您的位置:首页 > 理论基础 > 计算机网络

UWP应用获取HTTP请求返回的MP3音频文件(以百度语音合成API为例)

2017-09-03 20:14 627 查看

获取HTTP请求返回的MP3音频文件(以百度语音合成API为例)

使用百度语音合成API时,与使用人脸识别API的最大不同之处在于:人脸识别API返回结果均为JSON格式的字符串,而语音合成API则是返回的二进制语音文件。因此在代码的编写上有很大的不同。在此之前我也上网查了好多,但是没有针对UWP的示例,经过一番摸索算是找到了可以用的办法 (~ ̄▽ ̄)~

下面直接写出核心代码以供来日复习参考。

注:示例代码均是从uwp项目中截取的,保留了异步用法,不清楚的话可以大致先了解一下异步编程。

使用到的命名空间:

using Windows.Web.Http;//HttpClient所属
using System.Threading.Tasks;//Task所属
using Windows.Storage.Streams;//IBuffer所属
using Windows.Media.Playback;//MediaPlayer所属
using Windows.Media.Core;//MediaSource所属


这是请求的参数列表:

List<KeyValuePair<String, String>> paralist = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("tex",tex_seting),
new KeyValuePair<string, string>("lan",lan_setting),
new KeyValuePair<string, string>("tok",access_Token),
new KeyValuePair<string, string>("ctp",ctp_setting),
new KeyValuePair<string, string>("cuid","cuid"),
new KeyValuePair<string, string>("spd",spd_setting),
new KeyValuePair<string, string>("pit",pit_setting),
new KeyValuePair<string, string>("vol",vol_setting),
new KeyValuePair<string, string>("per",per_setting)
};


获取content 内容:

private async Task<IBuffer> GetTtsResultAsync(string url, List<KeyValuePair<String, String>> list)// 获取文件
{
HttpClient hc = new HttpClient();
using (var content = new HttpFormUrlEncodedContent(list))
{
var response = await hc.PostAsync(new Uri(url), content);
IBuffer buffer = await response.Content.ReadAsBufferAsync();
return buffer;
}
}


此处的关键点在于 使用
ReadAsBufferAsync()
来将content中的内容读取为
IBuffer
类型。

private async void PlayAudio(IBuffer result)//最终播放音频
{
folder = await KnownFolders.MusicLibrary.CreateFolderAsync("Greeting", CreationCollisionOption.ReplaceExisting);//创建文件夹
StorageFile x = await folder.CreateFileAsync("语音文件.mp3", CreationCollisionOption.ReplaceExisting);//创建文件
StorageFile storageFile = await folder.GetFileAsync("语音文件.mp3");

await FileIO.WriteBufferAsync(storageFile, result);//从缓冲写入文件

//  storageFile = await folder.GetFileAsync("语音文件.mp3");
MediaPlayer _mediaPlayer = new MediaPlayer();
_mediaPlayer.Source = MediaSource.CreateFromStorageFile(storageFile);
_mediaPlayer.Play();
}


将content中的内容读取为缓冲类型之后,在写入文件时就可以使用
FileIO.WriteBufferAsync()
方法来将数据从缓冲区写入文件了。因为此处为mp3格式,所以在创建文件时,需要加上后缀名.mp3

StorageFile x = await folder.CreateFileAsync("语音文件.mp3", CreationCollisionOption.ReplaceExisting);


我想,其他获取其他类型的文件也可以同理吧 :-)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息