/*
* 文本转语音(调用百度语音合成API)
* 江鸿宾(QQ33080907)
* 最近修改:2018.07.04
* 本插件只用于作者参与的项目,未经许可请勿转载
*/
// 不支持IE8及以下版本
// 在需要插入按钮的地方,插入HTML:
$(function () {
// 总开关(关闭语音功能,请设置为:false)
var isopen = true
// ie版本,以下代码请勿修改
var ie = iever()
// 是否引用了AMUI
var amui = typeof (AMUI) === 'object'
var icon_play = amui ? '' : '▶'
var icon_pause = amui ? '' : '∥'
// 开放才调用
if (isopen && (ie === null || ie > 8)) {
// 判断是否连接互联网
$.ajax('https://www.psy.com.cn/images/spacer.htm', {
dataType: 'jsonp',
jsonpCallback: 'jsonpcallback',
success: function () {
// 联网
tts()
},
error: function () {
// 没联网
}
})
}
// 开始语音功能
function tts() {
if (!amui) {
// 插入按钮样式表
var style = document.createElement('style')
var css = 'span.tts { display:inline-block; width: 20px; font-size: 10px; height: 16px; border-radius: 5px; cursor: pointer; line-height: 16px; border: 1px solid #ccc; background: #fff; text-align: center; }'
style.innerHTML = css
document.getElementsByTagName('head')[0].appendChild(style)
}
$('span.tts').html(icon_play).data('status', 'play')
// 插入audio标签
var audio = $('').appendTo('body')[0]
// 语音相关
$('span.tts').on('click', function () {
var $tts = $(this)
// 播放
if ($tts.data('status') === 'play') {
var target = $tts.data('target')
var text = ''
// 无target属性
if (typeof (target) === 'undefined') { text = $tts.parent().text() }
// 有target属性
else { text = $(target).text() }
// 去掉首尾空格,回车、换行和Tab
text = $.trim(text.replace(/\n|\r|\t/g, ''))
// 文本为空则去掉按钮
if (text === '') { $tts.remove() }
// 播放
else {
// 空格等特殊字符会导致语音中断
text = $.trim(text)
text = text.replace(/\s|•|▶/g, '')
// console.log(text)
// text = encodeURI(text)
// 其他按钮状态重置
$('span.tts').html(icon_play).data('status', 'play')
$tts.html(icon_pause).data('status', 'pause')
var src = 'http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=5&text=' + text
audio.src = src
audio.play()
$(audio).off().one('ended', function () { $tts.html(icon_play).data('status', 'play') })
}
}
// 暂停
else {
$tts.html(icon_play).data('status', 'play')
audio.pause()
}
})
}
// 检测IE版本(不是IE返回null)
function iever() {
var win = window
var doc = document
var input = doc.createElement('input')
var v = 11
if (win.ActiveXObject === undefined) { v = null }
else if (!win.XMLHttpRequest) { v = 6 }
else if (!doc.querySelector) { v = 7 }
else if (!doc.addEventListener) { v = 8 }
else if (!win.atob) { v = 9 }
else if (!input.dataset) { v = 10 }
return v
}
// 判断联网接口的回调
/* eslint-disable */
function jsonpcallback() { }
})