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

来源:互联网 发布:录制电脑屏幕视频软件 编辑:程序博客网 时间:2024/05/16 07:55

获取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);

我想,其他获取其他类型的文件也可以同理吧 :-)

阅读全文
0 0
原创粉丝点击