前言

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)的更多相关文章

  1. 利用Google Speech API实现Speech To Text

    很久很久以前, 网上流传着一个免费的,识别率暴高的,稳定的 Speech To Text API, 那就是Google Speech API. 但是最近再使用的时候,总是返回500 Error. 后来 ...

  2. 必应(Bing)每日图片获取API

    必应(Bing)每日图片获取API January 11, 2015 API http://lab.dobyi.com/api/bing.php 介绍 Value Description title ...

  3. 语音识别(Web Speech API)

    近期看了一个语音识别的dome-----Web Speech API 本api为js调用云端接口识别 个人测试了一下,响应速度还是比较快的 注意:本API与官网需翻墙使用和访问 展示效果: 页面代码如 ...

  4. HTML5 Web Speech API 结合Ext实现浏览器语音识别以及输入

    简介      Web Speech API是HTML5技术中的一个提供原生语音识别技术的API,Google Chrome在25版之后开始支持Web Speech API,Google也提供了一个 ...

  5. 【miscellaneous】使用Google语音识别引擎(Google Speech API)[3月5日修改]

    原文:http://blog.csdn.net/dlangu0393/article/details/7214728#comments 近期重写本文,暂时禁止评论. 最近在使用Qt编写一个客户端程序的 ...

  6. xe5 android tts(Text To Speech)

    xe5 android  tts(Text To Speech) TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话. 以下代码实现xe5 开发的文本转 ...

  7. delphi xe5 android tts(Text To Speech)

    TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话. 以下代码实现xe5 开发的文本转语音的方法 和访问蓝牙一样,这里用javaclass的接口实现 接 ...

  8. 【百度地图API】如何利用地图API制作汽车沿道路行驶的动画?——如何获得道路层数据

    原文:[百度地图API]如何利用地图API制作汽车沿道路行驶的动画?--如何获得道路层数据 有几个做汽车导航的朋友问我说,他们想在地图上制作一辆车沿着道路行驶的动画.可是,百度地图的道路数据并没有公开 ...

  9. ES系列四、ES6.3常用api之文档类api

    1.Index API: 创建并建立索引 PUT twitter/tweet/ { "user" : "kimchy", "post_date&quo ...

随机推荐

  1. flush privileges 什么意思

    mysql> update mysql.user set password=PASSWORD(‘新密码’) where User=’root’;­ mysql> flush privile ...

  2. 最长公共子序列(模板 LCSL)

    博客: https://www.cnblogs.com/sasuke-/p/5396843.html 模板 #include<iostream>#include<cstdio> ...

  3. day15 Python函数递归,轻易不要用递归,容易搞出来内存溢出

    古之欲明明德于天下者,先治其国:欲治其国者,先齐其家:欲齐其家者,先修其身:欲修其身者,先正其心:欲正其心者,先诚其意:欲诚其意者,先致其知,致知在格物.物格而后知至,知至而后意诚,意诚而后心正,心正 ...

  4. ADB安装及使用

    环境安装: 下载.安装和配置ADB     https://jingyan.baidu.com/article/22fe7cedf67e353002617f25.html 安装驱动adbdriver  ...

  5. arduino:int & double 转string 适合12864下使用

    转自:http://www.geek-workshop.com/forum.php?mod=viewthread&tid=3383&highlight=12864 很多人在玩的时候,都 ...

  6. Saltstack管理对象属性之grains和pillar组件

    Grains组件 Grains是saltstack记录minion的一些静态信息组件,可以简单的理解为grains里面记录着每台minion的一些常用的属性,比如cpu.内存.磁盘.网络信息等,可以通 ...

  7. OSGeo.OGR.Geometry

    #region 程序集 ogr_csharp.dll, v2.0.50727 // D:\KM行业需求\C++\gdal17_cSharp\ogr_csharp.dll #endregion usin ...

  8. img图片加载出错处理(转载)

    为了美观当网页图片不存在时不显示叉叉图片当在页面显示的时候,万一图片被移动了位置或者丢失的话,将会在页面显示一个带X的图片,很是影响用户的体验.即使使用alt属性给出了”图片XX”的提示信息,也起不了 ...

  9. 如何学习 Webpack

    webpack-howto Tip: 本文是 webpack-howto 的原文,我觉得这篇文章写得非常好,确实算是目前学习 webpack 入门的必读文章.直接收录之. 本教程的目标 这是一本教你如 ...

  10. C# DllImport 相对路径无法找到dll

    原文:C# DllImport 相对路径无法找到dll 如题,近期在开发过程中,需要调用C++的库,一般来说,使用下面的方法即可正常调用: [DllImport("hci_sys.dll&q ...