/* * 文本转语音(调用百度语音合成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() { } })