去年公司让给平台做一个语音告警提示,我当时想先通过在线文字转语音,然后拿到语音放到工程里,直接播放就行了。但是看到需求我才发现这个语音告警是动态的,每次告警转语音的文字不确定,所以只能做一个动态文子转语音直接播放。搞了一天,就搞定了。试了一下,效果还可以,就是说话声音有点呆板。
其实很简单,就是调用百度语音接口实现播放就行了。(http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=0&per=0&text=)
<div> <input type="text" hidden="hidden" id="ttsText"> <input type="button" id="tts_btn" hidden="hidden" onclick="doTTS()" value="播放"> </div>
<script type="text/javascript">
function doTTS() {
var ttsDiv = document.getElementById(\'bdtts_div_id\');
var ttsAudio = document.getElementById(\'tts_autio_id\');
var ttsText = document.getElementById(\'ttsText\').value;
// 这样为什么替换不了播放内容
/*var ssrcc = \'http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=10&text=\'+ttsText;
document.getElementById(\'tts_source_id\').src=ssrcc;*/
// 这样就可实现播放内容的替换了
ttsDiv.removeChild(ttsAudio);
var au1 = \'<audio id="tts_autio_id" autoplay="autoplay">\';
var sss = \'<source id="tts_source_id" src="http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=9&per=0&text=?\' + ttsText + \'" type="audio/mpeg">\';
var eee = \'<embed id="tts_embed_id" height="0" width="0" src="">\';
var au2 = \'</audio>\';
ttsDiv.innerHTML = au1 + sss + eee + au2;
ttsAudio = document.getElementById(\'tts_autio_id\');
ttsAudio.play();
}
</script>
lan:固定值zh。语言选择,目前只有中英文混合模式,填写固定值zh
ie:编码方式
spd:语速,取值0-9,默认为5中语速
text:合成的文本,使用UTF-8编码。小于512个中文字或者英文数字。(文本在百度服务器内转换为GBK后,长度必须小于1024字节)
这样就能实现动态文字转语音播放了。