Потоковое WAV-файл из Интернета в Silverlight 3 - PullRequest
2 голосов
/ 29 мая 2009

Мне удалось обнаружить Реализацию воспроизведения Жиля Хоузама для файлов 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);
    }

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

...