Потоковая передача WAV-файла из Интернета в Silverlight 3

Мне удалось обнаружить Реализация воспроизведения файлов 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 работал, потому что это не будет выполняться в потоке пользовательского интерфейса.


person Russell Myers    schedule 29.05.2009    source источник
comment
Что не работает с этой реализацией? Мне кажется, все в порядке. Я предполагаю, что MediaPlayer является MediaElement, вы пытались вызвать MediaPlayer.Play()?   -  person Phil Price    schedule 30.05.2009
comment
это не потоковое аудио кстати   -  person George Birbilis    schedule 24.09.2014