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

获取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 GetTtsResultAsync(string url, List> 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);

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

你可能感兴趣的:(win10IoT)