vue 文字转语音mp3_vue 语音合成 - 梦魂清风的个人空间 - OSCHINA - 中文开源技术交流社区...

1、百度语音

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);

注意aue=4或者6是语音识别要求的格式,但是音频内容不是语音识别要求的自然人发音,所以识别效果会受影响。

重点****关闭 mock , 定义axios返回数据类型 responseType blob

重点****关闭 mock , 定义axios返回数据类型 responseType blob

重点****关闭 mock , 定义axios返回数据类型 responseType blob

核心代码 如下

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

2、科大讯飞 合成语音api类型 java php node a ndroid ios

你可能感兴趣的:(vue,文字转语音mp3)