1

以下を使用して、wave ファイルを読み込んで再生しようとしています。

SoundPlayer simpleSound = new SoundPlayer(@"pack://application:,,,/MyAssembly;component/Sounds/10meters.wav");
            simpleSound.Play();

成功しませんでした。System.NotSupportedException:( 以下を参照してください。

System.NotSupportedException: The URI prefix is not recognized.
   at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
   at System.Net.WebRequest.Create(Uri requestUri)
   at System.Media.SoundPlayer.LoadSync()
   at System.Media.SoundPlayer.LoadAndPlay(Int32 flags)
   at System.Media.SoundPlayer.Play()

私はグーグルとSOを調べて解決策を見つけようとしましたが、何もうまくいきませんでした。直接パスでファイルを再生すると正常に動作します

SoundPlayer simpleSound = new SoundPlayer(@"D:\Projects\MyAssembly\Sounds\10meters.wav");
simpleSound.Play();

MyAssembly のコンテンツも確認しましたが、リソースはそこにあります。パッキングをサポートしていませSoundPlayerんか、それとも私が正しく行っていないことはありますか?

4

2 に答える 2

5

URI スキームはpack://WPF に固有であるため、非 WPF コンポーネントはそれを処理する方法を知りません... ただし、このリソースのストリームを取得して、SoundPlayerコンストラクターに渡すことができます。

Uri uri = new Uri(@"pack://application:,,,/MyAssembly;component/Sounds/10meters.wav");
StreamResourceInfo sri = Application.GetResourceStream(uri);
SoundPlayer simpleSound = new SoundPlayer(sri.Stream);
simpleSound.Play();

別のオプションは、MediaPlayerクラスを使用することです。

Uri uri = new Uri(@"pack://application:,,,/MyAssembly;component/Sounds/10meters.wav");
MediaPlayer player = new MediaPlayer();
player.Open(uri);
player.Play();

このクラスはpack://URI スキームをサポートします

于 2011-12-01T16:17:20.410 に答える
1

F1あなたの友達です(少なくともVS 2010では):

soundLocation パラメータに渡される文字列は、ファイル パスまたは .wav ファイルへの URL のいずれかです。

URI は URL ではありません (逆の場合とは異なります)。これは機能しません。必要に応じて、ファイルをディスク上の一時フォルダーに保存できます。

于 2011-12-01T16:14:01.130 に答える