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);
我想,其他获取其他类型的文件也可以同理吧 :-)
相关文章推荐
- C#获取音频文件(MP3等)播放时间长度的几种方式
- C#里面用API完成MP3等音频文件地播放类
- [导入]C#中用API实现MP3等音频文件的播放类
- C#中用API实现MP3等音频文件的播放类
- C#中用API实现MP3等音频文件的播放类(转)
- (转)C#中用API实现MP3等音频文件的播放类
- 【UWP通用应用开发】文件选取器、获取文件属性、写入和读取、保存读取和删除应用数据
- c#实现调用MP3等格式音频文件API
- C#获取音频文件(MP3等)播放时间长度的几种方式
- AS3(flash)获取MP3音频文件的比特率
- 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用
- C#中用API实现MP3等音频文件的播放类
- C#中用API实现MP3等音频文件的播放类
- C#中用API实现MP3等音频文件的播放类
- java获取Wav文件的属性及Wav音频文件的合成
- 如何从mp3,wma等音频文件中获取歌曲信息
- Java获取音频文件(MP3)的播放时长
- C#中用API实现MP3等音频文件的播放类
- vue中添加mp3音频文件
- iOS开发 应用退到后台继续播放音乐或音频文件