2

プログラムで複数のオーディオ ファイル (.wav および/または .mp3) を同時に再生できるものが必要です。ファイル パスを何らかのメソッドに単純に渡すことができれば理想的であり、詳細を気にせずにそのファイルを再生できます。

追加要件:

1) 任意のオーディオ ファイルの再生をいつでもプログラムで開始および停止できる必要があります。

2) 各オーディオ ファイルの再生がいつ終了したかを知る必要があります (イベントに応答するか、何らかのプロパティを通じてサウンド ファイルの長さ (サンプル、秒など) を知ることによって)。

3) このツールは、任意の長さ/期間の .wav (できれば .mp3) ファイルを再生できる必要があります。

4) このツールは、複数のオーディオ ファイルを同時に再生できる必要があります (少なくとも 5 つまたは 6 つのオーディオ ファイルを同時に再生できることが望ましい)。

私はすでに SlimDX と SharpDX を使用してみましたが、ファイルの再生がいつ停止したか、またはファイルの長さ (長さ) をプログラムで判断する方法が見つかりませんでした。

編集:

私は私が探していたものを見つけたと信じています!GStreamer は、私が求めていたすべてのことを行っているようです。http://www.gstreamer.com/

4

2 に答える 2

1

すべてのオーディオ API では、複数のファイルを同時に再生できます (ミキシングは舞台裏で行われるため、心配する必要はありません)。

ネイティブ API:

  • waveOut*関数ファミリー、解凍用の ACM
  • DirectSound (再生)
  • DirectShow (デコード、再生)
  • WASAPI(再生)
  • メディア財団

または、上記の C# ラッパーにNAudioを使用します。特定の詳細とコード スニペットが必要な場合は、ここ StackOverflow で NAudio に関する多数の投稿を見つけることができます。

于 2013-01-26T19:24:20.097 に答える
1

この質問に対する一般的な答え (フレームワーク/言語 X の質問で一度に複数のサンプルを再生する方法のほとんどに適しています) は、ファイルをソフトウェアで混合することです。

これには、個々のオーディオ ストリームの開始と停止のタイミング、および同期を完全に制御できるという利点があります。これは、高レベルのメディア プレーヤー コンポーネントを使用する場合、通常非常に困難なことです。

これを行うための手順は次のとおりです。

  1. 出力するすべてのオーディオをメモリ バッファにロード (およびフォーマット変換/デコード) します。
  2. 特定の瞬間に再生されるすべてのオーディオ ファイルについて、各ファイルの対応するサンプルを一緒に追加してミックスします。
  3. [常に必要というわけではありません] 結果のサンプルのゲインを調整します - 通常、これは混合されたサンプルの数で除算されます
  4. 結果を別のメモリ バッファに格納する

これで、問題を出力する単一のオーディオ ストリームに減らしました。ほとんどの場合、選択したフレームワークのオーディオ出力 API を使用します。この API は、出力するサンプルのバッファーを定期的に要求します。

オーディオ ストリームが大きい場合、入力ストリームを少しずつ処理する必要があるため、問題は少し複雑になります。

于 2013-01-26T19:28:19.053 に答える