去年公司让给平台做一个语音告警提示,我当时想先通过在线文字转语音,然后拿到语音放到工程里,直接播放就行了。但是看到需求我才发现这个语音告警是动态的,每次告警转语音的文字不确定,所以只能做一个动态文子转语音直接播放。搞了一天,就搞定了。试了一下,效果还可以,就是说话声音有点呆板。
其实很简单,就是调用百度语音接口实现播放就行了。(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字节)
这样就能实现动态文字转语音播放了。