2

C# では、System.Media から SoundPlayer クラスを取得して、次のコードを使用して C:\Windows\Media フォルダーから任意の wav を再生できません。私が得るのは音だけです:

String filename = "C:\\Windows\\Media\\tada.wav";
SoundPlayer sp = new SoundPlayer(filename);
sp.Load();
sp.Play();

「Gspot」というプログラムでウェーブファイル「tada.wav」を確認したところ、オーディオコーデックが「PCM Audio」であることがわかりました。コンパイラの警告やエラーは表示されず、プログラムを実行しても例外は発生しません。ただ音が出ません。スピーカーがオンになっており、Windows Media Player でファイルを再生できます。

wav をプロジェクト リソースとして追加しても、違いはありません。なぜ音が出ないのか誰か教えてください。

4

2 に答える 2

1

Play() メソッドは、別のスレッドでサウンドを再生します。つまり、コンソール アプリは、サウンドを再生する新しいスレッドをスピンします。これは、サウンドの再生によって Windows のメイン スレッドが停止しないため、Windows アプリケーションに最適です。コンソール アプリでは、親スレッドが終了すると、子スレッドもすべて終了します。-- したがって、音はありません。

新しいスレッドを生成しない PlaySync() メソッドがあるため、サウンドの再生が完了するまでコンソール アプリのスレッドを維持します。

于 2014-03-02T19:44:09.933 に答える
0

これをコンソール アプリケーションの main() メソッドの本体として使用していますか? アプリケーションが終了している可能性があるため、オーディオを再生するスレッドがシャットダウンされます。

あなたのコードをコピーして、新しい「Visual C# コンソール アプリケーション」のメインに貼り付けました。「using System.Text;」を追加しました。ファイルの先頭にある行をコンパイルし、ステップスルーすると、機能しました。(デバッグなしで)実行すると、音が出ませんでした。

次の行を追加する場合:

System.Threading.Thread.Sleep(2000);

Play() の呼び出し後、アプリケーションはオーディオを再生するのに十分な時間留まります。

于 2012-08-06T21:45:24.730 に答える