2019独角兽企业重金招聘Python工程师标准>>> javascript
一、百度语音
restAPI https 请求,在线语音合成免费
tex 必填 合成的文本,使用UTF-8编码。小于2048个中文字或者英文数字。(文本在百度服务器内转换为GBK后,长度必须小于4096字节)
tok 必填 开放平台获取到的开发者
access_token(见上面的“鉴权认证机制”段落)
cuid 必填 用户惟一标识,用来计算UV值。建议填写能区分用户的机器
MAC 地址或 IMEI 码,长度为60字符之内
ctp 必填 客户端类型选择,web端填写固定值1
lan 必填 固定值zh。语言选择,目前只有中英文混合模式,填写固定值zh spd 选填 语速,取值0-15,默认为5中语速
pit 选填 音调,取值0-15,默认为5中语调 vol 选填 音量,取值0-15,默认为5中音量
per 选填 发音人选择, 0为普通女声,1为普通男生,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女声
aue 选填 3为mp3格式(默认); 4为pcm-16k;5为pcm-8k;6为wav(内容同pcm-16k); php
注意aue=4或者6是语音识别要求的格式,可是音频内容不是语音识别要求的天然人发音,因此识别效果会受影响。html
重点****关闭 mock , 定义axios返回数据类型 responseType blob
重点****关闭 mock , 定义axios返回数据类型 responseType blob
重点****关闭 mock , 定义axios返回数据类型 responseType blob java
核心代码 以下node
import util from './util' import { otherServiceGet,otherServiceBlobPost } from '../api/api' const audio = {} /** * 浏览器调用语音合成接口 * @param {Object} param 百度语音合成接口参数 * 请参考 https://ai.baidu.com/docs#/TTS-API/41ac79a6 * @param {Object} options 跨域调用api参数 * timeout {number} 超时时间 默认不设置为60秒 * volume {number} audio控件音量,范围 0-1 * hidden {boolean} 是否隐藏audio控件 * autoDestory {boolean} 播放音频完毕后是否自动删除控件 * onInit {Function} 建立完audio控件后调用 * onSuccess {Function} 远程语音合成完成,而且返回音频文件后调用 * onError {Function} 远程语音合成完成,而且返回错误字符串后调用 * onTimeout {Function} 超时后调用,默认超时时间为60秒 */ const isFunction = (obj) => { if (Object.prototype.toString.call(obj) === '[object Function]') { return true } return false } let canPlay = true; const btts = function (param, options, audioTextArr) { let url = 'http://tsn.baidu.com/text2audio' let opt = options || {} let p = param || {} // 若是浏览器支持,能够设置autoplay,可是不能兼容全部浏览器 let audio = document.createElement('audio') if (opt.autoplay) { audio.setAttribute('autoplay', 'autoplay') } // 隐藏控制栏 if (!opt.hidden) { audio.setAttribute('controls', 'controls') } else { audio.style.display = 'none' } // 设置音量 if (typeof opt.volume !== 'undefined') { audio.volume = opt.volume } // 调用onInit回调 isFunction(opt.onInit) && opt.onInit(audio) // 默认超时时间60秒 let DEFAULT_TIMEOUT = 30000 let timeout = opt.timeout || DEFAULT_TIMEOUT // 建立form参数 let data = {} for (let p in param) { data[p] = param[p] } // 赋值预约义参数 data.cuid = data.cuid || data.tok data.ctp = 1 data.lan = data.lan || 'zh' otherServiceBlobPost(url,data).then(res => { const fileReader = new FileReader(); if (res.data.type === 'audio/mp3') { // 在body元素下apppend音频控件 document.body.append(audio) let urlObject = window.URL || window.webkitURL || window let src = urlObject.createObjectURL(res.data) audio.setAttribute('src', src) // autoDestory设置则播放完后 移除audio的dom对象 if (opt.autoDestory) { audio.onended = () => { canPlay = true document.body.removeChild(audio) audioTextArr.splice(0,1) } } isFunction(opt.onSuccess) && opt.onSuccess(audio) } // 用来处理错误 if (res.type === 'application/json') { fileReader.onload = () => { let text = fileReader.result isFunction(opt.onError) && opt.onError(text) } fileReader.readAsText(res) } }) } audio.text2Audio = function (audioTextArr) { //https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=*******S&client_secret=******* // 调用语音合成接口 // 参数含义请参考 https://ai.baidu.com/docs#/TTS-API/41ac79a6 if(canPlay && audioTextArr.length != 0){ canPlay = false btts({ tex: audioTextArr[0], tok: '24.35df59bd2429785a878672f52e6de877.2592000.1547271881.282335-15133749', spd: 6, pit: 5, vol: 15, per: 0 }, { volume: 0.3, autoDestory: true, timeout: 10000, hidden: true, autoplay: true, onInit: function (htmlAudioElement) { }, onSuccess: function (htmlAudioElement) { htmlAudioElement.play() }, onError: function (text) { util.log.danger(text) }, onTimeout: function () { util.log.warning('timeOut') } },audioTextArr) } } export default audio
二、科大讯飞 合成语音api类型 java php node a ndroid iosios