2013-07-22 33 views
0

我通过HttpClient访问Web服务,并获取应该包含音频数据的响应(它是一种名为Voice RSS的TTS Web服务)。从metro应用中的httpResponse中检索数据音频

我继续这样:

response = await httpClient.GetAsync("http://api.voicerss.org?key=97a912d2574c4538afbf0919ad1f5402&hl=fr-fr&src=hello"); 

然后我采取响应的内容:

content = response.Content; 

stream = content.ReadAsStreamAsync(); 

result = stream.Result; 

然后,我真的很犹豫,其余:我在很多论坛上看到了,我应该使用MediaElement并将其源设置为流,然后调用“play”方法,但它对我无效。其他人说,我应该创建一个StreamReader,以便能够读取流......

我的目标是播放响应中包含的声音(可以是mp3,wav等)。

我不知道是否必须创建MediaElement,IRandomAccessStream,IIOStream或其他任何东西。

我很困惑,因为我从来没有找到同样的问题,我有。

如果你可以请帮助我。

在此先感谢。

-

Meima

回答

0

检查这个博客帖子: How to Convert byte Array to IRandomAccessStream

他实施了class MemoryRandomAccessStream : IRandomAccessStream

所以,你可以使用它,这是我的工作代码:

private async void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var httpClient = new HttpClient(); 
    var response = await httpClient.GetAsync("http://api.voicerss.org?key=97a912d2574c4538afbf0919ad1f5402&hl=fr-fr&src=hello"); 
    var content = await response.Content.ReadAsStreamAsync(); 
    ME.SetSource(new MemoryRandomAccessStream(content), ""); 
    ME.Play(); 
} 

其中ME是在XAML代码MediaElement

<MediaElement x:Name="ME" ../> 

PS。经过一番更多的搜索,我发现a BCL developer said that an extension method will be added in Windows 8.1这样你就可以做

ME.SetSource(content.AsRandomAccessStream(), ""); 
+0

你好!你刚刚度过了我的一天!非常感谢,现在它工作:)我将很快升级到Windows 8.1,我希望他们会添加扩展至于其他功能(如语音合成器,这是现在缺少的) – Meima

+0

欢迎:) – Diryboy