バックグラウンド
ここにある MediaStreamSource 実装を使用して、Silverlight 4 でウェーブ ファイルをストリーミングしようとしています。問題は、バッファリング中にファイルを再生したい、または少なくともバッファリング中に視覚的なフィードバックをユーザーに提供したいことです。今のところ、私のコードは次のようになります。
private void button1_Click(object sender, RoutedEventArgs e)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(App.Current.Host.Source, "../test.wav"));
//request.ContentType = "audio/x-wav";
request.AllowReadStreamBuffering = false;
request.BeginGetResponse(new AsyncCallback(RequestCallback), request);
}
private void RequestCallback(IAsyncResult ar)
{
this.Dispatcher.BeginInvoke(delegate()
{
HttpWebRequest request = (HttpWebRequest)ar.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(ar);
WaveMediaStreamSource wavMss = new WaveMediaStreamSource(response.GetResponseStream());
try
{
me.SetSource(wavMss);
}
catch (InvalidOperationException)
{
// This file is not valid
}
me.Play();
});
}
問題はrequest.AllowReadStreamBuffering = false
、ストリームを設定した後にシークがサポートされず、上記の実装が例外をスローすることです (位置設定ロジックの一部をif (stream.CanSeek)
ブロックに入れたことを覚えておいてください)。
バッファリングが無効になっている場合、メインスレッドでの読み取りはサポートされていません
質問
Silverlight 4 で事前にバッファリングせずに WAV ストリームを再生する方法はありますか?