Мне удалось обнаружить Реализация воспроизведения файлов WAV в Silverlight 3, предложенная Жилем Хозамом, и хотя это будет большая часть битвы, я застрял на последней детали: как мне извлечь файл 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);
}
Работает отлично. Это также имеет смысл после прочтения статьи Шона Вилдермута о различиях. Я хотел бы, чтобы HttpWebRequest работал, потому что это не будет выполняться в потоке пользовательского интерфейса.