必应语音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 ...
随机推荐
- 添加Nginx为系统服务(设置开机启动)
在本节中,我们将创建一个脚本,将Nginx守护进程转换为实际的系统服务. 这有两个作用:守护程序可以使用标准命令控制,更重要的是,它可以在系统启动时自动启动,并在系统关闭时停止. System V s ...
- (转)Python网络爬虫实战:世纪佳缘爬取近6万条数据
又是一年双十一了,不知道从什么时候开始,双十一从“光棍节”变成了“双十一购物狂欢节”,最后一个属于单身狗的节日也成功被攻陷,成为了情侣们送礼物秀恩爱的节日. 翻着安静到死寂的聊天列表,我忽然惊醒,不行 ...
- canvas的drawImage函数
HTML5中引入新的元素canvas,其drawImage 方法允许在 canvas 中插入其他图像( img 和 canvas 元素) .drawImage函数有三种函数原型: drawImage( ...
- ROS 订阅图像节点(1)
博客 http://blog.csdn.net/github_30605157/article/details/50990493 参考ROS原网站 http://wiki.ros.org/image_ ...
- 转载 【.NET基础】--委托、事件、线程(3)
之前的两篇文章我们了解了委托和事件,本文我们看一下线程. 1,一个窗体程序,默认拥有一个线程(相当于一个商店里面,只有一个店员),这个默认的线程叫做 UI线程/主线程. 2,进程和线程的关系: A ...
- [转]QDir类及其用法总结
直接给出原文链接:QDir类及其用法总结
- 笔记二:常用的h5语义化标签
0.前言: 所谓语义化标签就是一种 我们仅通过标签名就能判断出该标签内容的语义的标签,见名知意. 总结这部分内容,主要是为了能从繁琐的div嵌套div中,改成带有h5标签码.这样更有利于读写代码. 人 ...
- Linux kernel Programming - Concurrency and Race Conditions
Concurrency and Its Management Race condition can often lead to system crashes, memory leak,corrupte ...
- PAT A1106 Lowest Price in Supply Chain (25 分)——树的bfs遍历
A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...
- PAT A1146 Topological Order (25 分)——拓扑排序,入度
This is a problem given in the Graduate Entrance Exam in 2018: Which of the following is NOT a topol ...