由于项目需要,这几天都在试图利用百度语音API进行语音识别。但是识别到的都是“啊,哦”什么的,我就哭了。

这里我只是分享一下这个过程,错误感觉出现在Post语音数据那一块,可能是转换问题吧。

API请求地址::http://vop.baidu.com/server_api

语音上传模式:显示发送:将语音数据直接放在 HTTP-BODY 中

其他参数:cuid:用户id,token:密钥 ,lan:语言等
要了解更多请查看官方文档:http://developer.baidu.com/wiki/index.php?title=docs/cplat/media/voice

实现的步骤:1、录音,将文件存储起来     2、获取token     3、Post数据并请求获取返回值

1、录音

String fileName = "test.wav";
private MediaCapture _mediaCaptureManager;
private StorageFile _recordStorageFile;
private async void record_Click(object sender, RoutedEventArgs e)//点击后开始录音
{
  try
  {
    //在临时文件夹Temp中创建文件,存在的话就替换掉
    _recordStorageFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
    //关键就是这俩句
    MediaEncodingProfile recordProfile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.Auto);//录音-WAV格式
  await _mediaCaptureManager.StartRecordToStorageFileAsync(recordProfile, this._recordStorageFile);//将录音保存到创建的文件中
  }
  catch (Exception ex)
  {
    Debug.WriteLine(ex.Message.ToString());
  }
}
private async void stop_Click(object sender, RoutedEventArgs e)
{
  await _mediaCaptureManager.StopRecordAsync();//停止录音
}

2、获取token

private void GetToken()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id="
+ "申请的API_KEY" + "&client_secret=" + “申请的SECRET_KEY”);
request.BeginGetResponse(ResponseTokenCall, request);
} private void ResponseTokenCall(IAsyncResult result)
{
try
{
HttpWebRequest httpWebRequest = (HttpWebRequest)result.AsyncState;
WebResponse webResponse = httpWebRequest.EndGetResponse(result);
using (Stream stream = webResponse.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
string content = reader.ReadToEnd();
string ssss = content.Replace("\"", "").Replace("{", "").Replace("}", "").Replace("\n", "");
string[] indexs = ssss.Split(',');
foreach (string index in indexs)
{
string[] _indexs = index.Split(':');
if (_indexs[] == "access_token")
token = _indexs[];//获取到的token
}
}
} catch (Exception ex)
{
Debug.WriteLine("获取Token失败");
}
}

3、发送请求

private async void Post()
{
string serverURL = "http://vop.baidu.com/server_api?";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serverURL + "lan=zh&cuid=" + cuid + "&token=" + token);//cuid = Guid.NewGuid().ToString(); 官方推荐使用 mac 地址/手机 IMEI 等类似参数,只要唯一就好
request.ContinueTimeout = ;//超时
request.Method = "POST";//Post请求 //post data
request.BeginGetRequestStream(ResponseStreamCallbackPost, request);//Post数据
} private async void ResponseStreamCallbackPost(IAsyncResult result)
{
    StorageFile storageFile = await ApplicationData.Current.TemporaryFolder.GetFileAsync(fileName);//取出临时文件夹中保存的音频文件 IBuffer buffer = await FileIO.ReadBufferAsync(storageFile);//读取文件至Ibuffer
    byte[] voice = WindowsRuntimeBufferExtensions.ToArray(buffer, , (int)buffer.Length);//将Ibuffer转换为byte[]

      HttpWebRequest httpWebRequest = (HttpWebRequest)result.AsyncState;
httpWebRequest.ContentType = "audio/wav;rate=8000";//参数设置
using (Stream writeStream = httpWebRequest.EndGetRequestStream(result))
{
writeStream.Write(voice, , voice.Length);//写入
} httpWebRequest.BeginGetResponse(ResponseCall, httpWebRequest);//发送请求
} private void ResponseCall(IAsyncResult result)
{
try
{
HttpWebRequest httpWebRequest = (HttpWebRequest)result.AsyncState;
WebResponse webResponse = httpWebRequest.EndGetResponse(result);
using (Stream stream = webResponse.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
string content = reader.ReadToEnd();//返回的是utf-8编码
string a = Regex.Unescape(content);//进行转换
}
}
catch (Exception ex)
{
Debug.WriteLine("识别失败");
}
}

token获取了一次,是说30天后会过期。
在处理过程中,遇到了一个问题。我让GetToken()和Post()先后进行处理,但是却发现token是在Post之后才得到的,这就导致了请求的URL里面不含token了。

所以还是要先获取了token之后再进行。

另外(HttpWebRequest)request无法给Content-length属性进行赋值。

利用百度语音API进行语音识别。的更多相关文章

  1. 利用百度词典API和Volley网络库开发的android词典应用

     关于百度词典API的说明,地址在这里:百度词典API介绍 关于android网络库Volley的介绍说明,地址在这里:Android网络通信库Volley 首先我们看下大体的界面布局!

  2. 利用百度地图API,获取经纬度坐标

    利用百度地图API,获取经纬度坐标 代码很简单,但在网上没找到现成的获取地图经纬度的页面. 就是想,给当前页面传递一个经纬度,自动定位到此经纬度.然后可以重新选择,选择完返回经纬度. 效果如下: 源代 ...

  3. 利用百度地图API和群蚁算法,对TSP问题进行模拟与求解

    前言 最近由于换了工作,期间也有反思和总结上家公司的得失,总觉得有什么事情当初可以完成或者完成得更好,其中TSP问题就是其中之一.当初在开发一个仓配系统的时候,有一个线路排程的需求,当时自己简单在纸上 ...

  4. 利用百度翻译API,获取翻译结果

    利用百度翻译API,获取翻译结果 translate.py #!/usr/bin/python #-*- coding:utf-8 -*- import sys reload(sys) sys.set ...

  5. ros下基于百度语音的,语音识别和语音合成

    代码地址如下:http://www.demodashi.com/demo/13153.html 概述: 本demo是ros下基于百度语音的,语音识别和语音合成,能够实现文字转语音,语音转文字的功能. ...

  6. C# 10分钟完成百度语音技术(语音识别与合成)——入门篇

    我们已经讲了人脸识别(入门+进阶).图片识别(入门).下面是链接: C# 10分钟完成百度人脸识别——入门篇 C# 30分钟完成百度人脸识别——进阶篇(文末附源码) C# 10分钟完成百度图片提取文字 ...

  7. Delphi百度语音【支持语音识别和语音合成】

    作者QQ:(648437169) 点击下载➨百度语音         语音识别api文档         语音合成api文档 [Delphi 百度语音]支持获取 Access Token.语音识别.语 ...

  8. 利用百度地图API,在浏览器中找到自己的位置

    首先你得有个百度地图的秘钥,http://lbsyun.baidu.com/apiconsole/key 剩下的就是编码了 这里面会用到一个javascript里的一个函数,getMyLocation ...

  9. 利用百度地图API制作房产酒店地图

    摘要: 想亲手制作一张酷讯.去哪儿.安居客.链接地产那样的房产.酒店地图麼?那赶快来学习吧.(以酷讯为例,如下图) 更多成功案例请点击:http://dev.baidu.com/wiki/map/in ...

随机推荐

  1. 心血来潮学python

    第一次见python就被吸引了,嗯,前面在linux下调试过一些小段代码.最近工作都在windows下面,也懒得换去unbuntu,所以想着在win下安装python. 之前不知道用什么方法装的pyt ...

  2. 数据结构算法C语言实现(十九)--- 5.5&5.6&5.7广义表

    一.简述 传说Lisp的基本数据结构就是广义表,广义表也是具有典型递归属性的数据结构,此外,由于建表要处理字符串,用C语言处理起来也是一脸懵逼.....最后自己还想写一个将广义表还原成字符串的函数,一 ...

  3. Markdown编辑器简单总结

    字体大小: #1 ##2 添加链接: 文字链接 [blog](http://yalantis.com/blog/how_we_created_tab_bar_animation_for_ios/?ut ...

  4. lbs(查看附近的人),看看社交软件如何实现查看附近的人

    最近在做一款移动端棋牌游戏,为了进一步提高用户体验.拉近玩家的距离,我们决定在游戏中加入好友功能,而对于体验好友功能的玩家来说,要是玩牌的时候可以看看附近都有谁在玩牌,跟他们交流交流玩牌心得什么的无疑 ...

  5. 软件产品案例分析——K米

    第一部分 调研.评价 调研 测试机型:iPhone 6s K米版本:4.3.0 直观感受 界面干净,功能丰富,操作不复杂,易上手 错误类 无法分享KTV主页 步骤:进入KTV主页,点击右上角分享图标 ...

  6. iOS内存管理个人总结

    一.变量,本质代表一段可以操作的内存,她使用方式无非就是内存符号化+数据类型 1.保存变量有三个区域: 1>静态存储区 2>stack 3>heap 2.变量又根据声明的位置有两种称 ...

  7. python3,交互模式,无法使用ctrl和方向键,需要和ctrl一块用

    转自csdn博客 http://blog.csdn.net/pumaadamsjack/article/details/52447989 https://pypi.python.org/pypi/re ...

  8. JavaWeb---总结(十一)使用Cookie进行会话管理

    一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...

  9. markdown安装和使用

    下载 运行markdownpad2-setup.exe文件,下一步一直到结束. 使用 标题 列表 引用.网页链接.图片链接 代码框 星号

  10. Cross-Site Scripting(XSS)简介

    最近才开始研究HTML以及安全问题.如果有什么说得不对的地方,望请指出. 在网络应用安全中,XSS可能是最常见,范围最大,所包含攻击方法最多,同时也是最难以理解的一种攻击.在OWASP所列出的十大网络 ...