0

我通过 HttpClient 访问 Web 服务,并得到一个应该包含音频数据的响应(它是一个称为 Voice RSS 的 TTS Web 服务)。

我这样做:

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 并将其源设置为流然后调用“播放”方法,但这对我不起作用。其他人说我应该创建一个 StreamReader 以便能够读取流......

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

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

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

如果你能请帮助我。

提前致谢。

--

美马

4

1 回答 1

0

查看此博客文章: 如何将字节数组转换为 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();
}

XAML 代码中的是MEMediaElement

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

PS。经过一番搜索,我发现一个 BCL 开发人员说在 Windows 8.1 中将添加一个扩展方法,这样你就可以做到

ME.SetSource(content.AsRandomAccessStream(), "");
于 2013-07-22T16:27:32.047 回答