必应语音API(Bing text to speech API)
前言
Link : Microsoft Speech API overview
通过这个链接,大致了解Bing speech API的语音识别和语音合成两部分,
这次是需要用到TTS,所以就直接看TTS相关的文档。
Link : Bing text to speech API
简介
使用Bing语音合成API,需要应用程序通过发送HTTP请求到云端,云端合成为人声后返回音频文件。
语音合成请求
JSON Web Token(JWT) access token
每一个的语音合成请求都需要一个JSON Web Token(JWT) access token,且这个JWT要放在语音请求的header中。每一个JWT持续10分钟,如果超时或者没有获得这个JWT,那么你的语音请求就会得到**[403 Forbidden]**的response。
所以,发送语音请求的第一步需要根据你的API密钥来获取,API密钥就是:

登录后就看的到了,有两个,哪个都行。
根据文档,发送POST请求来获取Base64 access token,用curl就如下:
E:\xxx>curl.exe -X POST --header "Content-Length: 0" --header "Ocp-Apim-Subscription-Key:your api key goes here" "https://api.cognitive.microsoft.com/sts/v1.0/issueToken"
当然,用几次你就会想还是写个程序来的方便,哈哈。
那么,就得到了Base64 access token的一串东西,现在可以来发送语音合成的请求了。
HTTP headers
如下表:
| Header | Value | Comments |
|---|---|---|
| Content-Type | application/ssml+xml | The input content type. |
| X-Microsoft-OutputFormat | 1.ssml-16khz-16bit-mono-tts 2.raw-16khz-16bit-mono-pcm 3.audio-16khz-16kbps-mono-siren 4.riff-16khz-16kbps-mono-siren 5.riff-16khz-16bit-mono-pcm 6.audio-16khz-128kbitrate-mono-mp3 7.audio-16khz-64kbitrate-mono-mp3 8.audio-16khz-32kbitrate-mono-mp3 | The output audio format. |
| X-Search-AppId | A GUID (hex only, no dashes) | An ID that uniquely identifies the client application. This can be the store ID for apps. If one is not available, the ID can be user generated for an application. |
| X-Search-ClientID | A GUID (hex only, no dashes) | An ID that uniquely identifies an application instance for each installation. |
| User-Agent | Application name | The application name is required and must be fewer than 255 characters. |
| Authorization | Authorization token | See the Authorization token section. |
不是每一项都必须,我只用了加粗的那3个header
Input parameters
好,头已经准备就绪,只等……
body部分包含SSML,SSML通过更改参数可以改变输出的声音。
所以,语音输出请求就像这样:
POST /synthesize
HTTP/1.1
Host: speech.platform.bing.com
X-Microsoft-OutputFormat: riff-8khz-8bit-mono-mulaw
Content-Type: application/ssml+xml
Authorization: Bearer [Base64 access_token]
<speak version='1.0' xml:lang='en-US'><voice xml:lang='en-US' xml:gender='Female' name='Microsoft Server Speech Text to Speech Voice (en-US, ZiraRUS)'>Microsoft Bing Voice Output API</voice></speak>
请求之后一会儿服务器返回音频文件,程序中写入文件就好了。
SSML参考资料:
Changing voice output via SSML
SSML W3C Specification
P.S. Bing speech和Microsoft speech似乎不是同一套东西,但大部分规则是相通的:
Speech Synthesis Markup Language Reference
(这里是个总览,可以选择具体元素的页面)
以下几个页面对SSML的修饰有比较大的帮助:
1.prosody Element
(包括音调、速率、持续时间、音量等的描述)
2.phoneme Element
(这个元素主要针对如何改变发音的描述,此页面没有中文的例子,但可以先看看)
SSML说明
< prosody >音律调整
此部分说明了音律调整要用到的包括pitch(音调)、contour("音形")、 range(音调范围)、rate(速率)、duration(持续时间)和volume(音量)
语法:
<prosody pitch="value" contour="value" range="value" rate="value" duration="value" volume="value"> </prosody>
参数信息:
| 属性 | 描述 |
|---|---|
| pitch | 代表文字的基准音调,它的值有3种不同的方式表达:1.一个绝对的值,使用“数字Hz”的方式。例如,600Hz;2.一个相对的值,使用“+/-数字Hz/st”的方式,表示音调的变化程度。例如,+80Hz 或 -2st。st(semitone)表示一个半音;3.一个枚举的值,包括:x-low, low, medium, high, x-high, or default |
| contour | 在不同的时间段内描述出音调变化(感觉是个高级特性),时间段用%作区隔,代表在此百分比时音调开始变化。例如,< prosody contour="(0%,+20Hz) (10%,-2st) (40%,+10Hz)" > |
| range | 代表文字音调的范围,值同上面的pitch |
| rate | 代表文字的阅读速率,它的值有2种不同的方式表达:1.一个相对的值,例如:1表示速率不变;.5表示速率减半;3表示3倍基本速率(测试发现用"+20%"的方式也行);2.一个枚举的值,包括:x-slow, slow, medium, fast, x-fast, or default |
| duration | 文字阅读的持续时间,单位为s或ms |
| volume | 代表阅读的音量大小,它的值有3中不同的方式表达:1.一个绝对的值,范围在0.0~100.0(从最小声到最大声)。例如,75。默认为100.0;2.一个相对的值,使用“+/-数字”的方式。例如,+10或-5.5;3.一个枚举的值,包括:silent, x-soft, soft, medium, loud, x-loud, or default |
< phoneme >音素调整
此部分说明了如何从支持的语音字母表中来更改文字的发音。
语法:
<phoneme alphabet="string" ph="string"> </phoneme>
注意:参数alphabet的值只有3个:ipa | x-microsoft-sapi | x-microsoft-ups
也就是支持的发音字母表,参见:3.Phonetic Alphabet Reference
(Microsoft.speech的发音表,总共有3个,SAPI支持中文)
参数信息:
| 属性 | 描述 |
|---|---|
| alphabet | 可选。选择一个合适的发音字母表,值为:ipa / x-microsoft-sapi / x-microsoft-ups |
| ph | 必须。一个描述如何发音的字符串,如果这个字符串不合法,TTS引擎会拒绝SSML文档,不会生成任何输出。中文发音标注的方式,例如,< phoneme alphabet="x-microsoft-sapi" ph="o 3" >哦< phoneme >,这里“哦”字的发音就是o的第三声。另外,12345代表汉语发音的4声和轻声。 |
SSML例子:
<speak version="1.0"
xmlns="http://www.w3.org/2001/10/synthesis"
xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="zh-CN">
<voice xml:lang="zh-CN" name="Microsoft Server Speech Text to Speech Voice (zh-CN, Kangkang, Apollo)">
<prosody rate="+20%" pitch="+8st" duration="220ms">
<phoneme alphabet="x-microsoft-sapi" ph="a 1">啊</phoneme>
</prosody>
<prosody rate="-20%" duration="380ms">
<phoneme alphabet="x-microsoft-sapi" ph="ou 1">哦</phoneme>
</prosody>
</voice>
</speak>
对了,还有另一位老兄的文章,是Bing speech语音识别那部分的:http://blog.csdn.net/kwgrg/article/details/54809238
Have fun!
必应语音API(Bing text to speech API)的更多相关文章
- 利用Google Speech API实现Speech To Text
很久很久以前, 网上流传着一个免费的,识别率暴高的,稳定的 Speech To Text API, 那就是Google Speech API. 但是最近再使用的时候,总是返回500 Error. 后来 ...
- 必应(Bing)每日图片获取API
必应(Bing)每日图片获取API January 11, 2015 API http://lab.dobyi.com/api/bing.php 介绍 Value Description title ...
- 语音识别(Web Speech API)
近期看了一个语音识别的dome-----Web Speech API 本api为js调用云端接口识别 个人测试了一下,响应速度还是比较快的 注意:本API与官网需翻墙使用和访问 展示效果: 页面代码如 ...
- HTML5 Web Speech API 结合Ext实现浏览器语音识别以及输入
简介 Web Speech API是HTML5技术中的一个提供原生语音识别技术的API,Google Chrome在25版之后开始支持Web Speech API,Google也提供了一个 ...
- 【miscellaneous】使用Google语音识别引擎(Google Speech API)[3月5日修改]
原文:http://blog.csdn.net/dlangu0393/article/details/7214728#comments 近期重写本文,暂时禁止评论. 最近在使用Qt编写一个客户端程序的 ...
- xe5 android tts(Text To Speech)
xe5 android tts(Text To Speech) TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话. 以下代码实现xe5 开发的文本转 ...
- delphi xe5 android tts(Text To Speech)
TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话. 以下代码实现xe5 开发的文本转语音的方法 和访问蓝牙一样,这里用javaclass的接口实现 接 ...
- 【百度地图API】如何利用地图API制作汽车沿道路行驶的动画?——如何获得道路层数据
原文:[百度地图API]如何利用地图API制作汽车沿道路行驶的动画?--如何获得道路层数据 有几个做汽车导航的朋友问我说,他们想在地图上制作一辆车沿着道路行驶的动画.可是,百度地图的道路数据并没有公开 ...
- ES系列四、ES6.3常用api之文档类api
1.Index API: 创建并建立索引 PUT twitter/tweet/ { "user" : "kimchy", "post_date&quo ...
随机推荐
- [BUG]Appium1.9.1 这个问题竟然花了我5分钟进行定位
1.先上问题,知道是什么问题先 EE ====================================================================== ERROR: tes ...
- work flow 工作流程
常用git 命令 v-1 # 切换分支 git checkout site-v1.7.8 # 提交代码前,先拉取分支 git pull # 拉取失败说明有冲突,解决冲突... # 保存在stash之中 ...
- 控件布局_LinearLayout
gravity和layout_gravity的区别 android:gravity与android:layout_gravity.他们的区别在于:android:gravity用于设置View组件的对 ...
- Java虚拟机4:Java对象创建和对象访问
1.对象创建 Java是一门面向对象的语言,Java程序运行过程中无时无刻都有对象被创建出来.在语言层面上,创建对象(克隆.反序列化)就是一个new关键字而已,但是虚拟机层面上却不是如此.看一下在虚拟 ...
- Visual studio 2010 OpenGL配置
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/niuxiunan/article/details/24557935 题记:今天同学问我关于OpenG ...
- centos7下安装docker(13.3volume生命周期管理)
本章讨论:volume的备份,恢复,迁移和销毁 1.备份 通过前面的大量的实验,我们知道volume 是依赖host存在的,是host中的文件或目录,所以volume 的备份实际是对文件系统的备份. ...
- MySql常用命令集Mysql常用命令3
MYSQL常用命令 有很多朋友虽然安装好了mysql但却不知如何使用它.在这篇文章中我们就从连接 MYSQL.修改密码.增加用户等方面来学习一些MYSQL的常用命令. 有很多朋友虽然安装好了mysql ...
- 0 ardunio processing 显示三轴数据
http://blog.csdn.net/Fortware/article/details/38307799 /** * Mixture * by Simon Greenwold. * * Displ ...
- mybatis基础系列(三)——动态sql
本文是Mybatis基础系列的第三篇文章,点击下面链接可以查看前面的文章: mybatis基础系列(二)--基础语法.别名.输入映射.输出映射 mybatis基础系列(一)--mybatis入门 动态 ...
- 基于Matlab的多自由度系统固有频率及振型计算
可参考文涛,基于Matlab语言的多自由度振动系统的固有频率及主振型计算分析,2007 对于无阻尼系统 [VEC,VAL]=eig(inv(A)*K) 对于有阻尼系统,参考振动论坛计算程序 输入M,D ...