Silverlight 3 での WAV ファイルの Gilles Khouzam の再生実装を発見することができました。それが戦いの大部分ですが、最終的な詳細に行き詰まっています。Web から wav ファイルをどこかの場所から取得してから取得するにはどうすればよいかということです。再生のために WaveMediaStreamSource にフィードしますか?
ここに私が来た最も近いものがあります:
public MainControl()
{
// Required to initialize variables
InitializeComponent();
PlayButton.Click += PlayButtonClicked;
}
private void PlayButtonClicked(object sender, RoutedEventArgs e)
{
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(@"soundfile.wav");
request.BeginGetResponse(ReadCallback, request);
}
private void ReadCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
WaveMediaStreamSource wavMss = new WaveMediaStreamSource(response.GetResponseStream());
MediaPlayer.SetSource(wavMss);
}
編集: 問題は HttpWebRequest に関係していたことが判明しました。コードを次のように変更します。
public MainPage()
{
InitializeComponent();
WebClient webClient = new WebClient();
webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
webClient.OpenReadAsync(new Uri(@"http://www.russellmyers.com/somefile.wav", UriKind.Absolute));
}
void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
WaveMediaStreamSource wavMss = new WaveMediaStreamSource(e.Result);
Debug.WriteLine("Setting source...");
Media.SetSource(wavMss);
}
正常に動作します。これは、相違点に関する Shawn Wildermuth の記事を読んだ後でも理にかなっています。UIスレッドでは実行されないため、HttpWebRequestを機能させたいと思います。