zpy1993-09

       去年公司让给平台做一个语音告警提示,我当时想先通过在线文字转语音,然后拿到语音放到工程里,直接播放就行了。但是看到需求我才发现这个语音告警是动态的,每次告警转语音的文字不确定,所以只能做一个动态文子转语音直接播放。搞了一天,就搞定了。试了一下,效果还可以,就是说话声音有点呆板。

   其实很简单,就是调用百度语音接口实现播放就行了。(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字节)

这样就能实现动态文字转语音播放了。

分类:

技术点:

相关文章: