当前位置:   article > 正文

FreeSWITCH对接微软edge-tts(mod_tts_commandline使用)

FreeSWITCH对接微软edge-tts(mod_tts_commandline使用)

FreeSWITCH对接asr/tts目前最简单且容易上手的还是mrcp模块,今天介绍另外一种方式来对接微软开源的edge-tts,即mod_tts_commandline模块的使用

mod_tts_commandline模块在编译freeswitch的时候,默认是不安装的。如需使用可以在编译freeswitch的时候修改modules.conf启用该模块;当然freeswitch编译后也可以单独再编译mod_tts_commandline模块,编译过程就省略了。

edge-tts:edge的安装此处就省略了,安装完成后,可以通过如下命令生成需要的音频文件

edge-tts --voice zh-CN-YunxiNeural --text "Hello, world!" --write-media hello.mp3

mod_tts_commandline模块安装成功后,在autoload_configs目录下有一个tts_commandline.conf.xml配置文件,主要就是通过这个配置文件完成第三方tts的对接。

#tts_commandline.conf.xml默认配置:

<configuration name="tts_commandline.conf" description="TextToSpeech Commandline configuration">
    <settings>
        <!--
        Some variables will be replaced :
        ${text}: input text (quoted)
        ${rate}: sample rate (example: 8000)
        ${voice}: voice_name passed to TTS(quoted)
        ${file}: output file (quoted, including .wav extension)

    Example commands can be found at:
    http://wiki.freeswitch.org/wiki/Mod_tts_commandline#Example_commands
        -->
        <param name="command" value="echo ${text} | text2wave -f ${rate} > ${file}"/>
       
    </settings>
</configuration>

mod_tts_commandline工作原理

mod_tts_commandline模块提供{text},{rate},{voice},{file} 这4个tts相关变量,然后允许你通过这4个变量,去调用第三方tts(调用方式可以是脚本也可以是命令等方式),最终是在tmp目录下生成一个音频文件,freeswitch再通过speak把这个音频文件播放出来。

从这个流程可以看出,mod_tts_commandline模块调用tts不是直接通过流式的方式得到语音流在freeswitch中播放,而是通过调用tts得到一个音频文件,然后拿着音频文件在freeswitch中播放,相比mrcp来说,耗时会明显有增加,但是网络稳定的情况下,也是可以进行一些尝试的。

具体案例:

通过mod_tts_commandline调用edge-tts:

第一步:我们在tts_commandline.conf.xml文件中,将settings下的默认command删除,然后在里面加入自己需要执行的脚本或指令,将自己需要播放的内容和音频文件传参给脚本或指令。

#在该文件中,我们调用了一个shell脚本,脚本内容其实就是去执行edge-tts命令,得到一个音频文件,freeswitch会通过commandline模块去播放这个音频文件。

这里需要注意,edge-tts生成的音频文件是mp3格式,而commandline模块默认只支持wav格式的音频文件,需要在脚本里通过ffmpeg将mp3格式转成wav格式;也可以尝试修改commandline源码,commandline源码应该是写死了wav,freeswitch结合shout模块其实是可以播放mp3格式的音频文件的。

<configuration name="tts_commandline.conf" description="TextToSpeech Commandline configuration">
    <settings>
        <!--
        Some variables will be replaced :
        ${text}: input text (quoted)
        ${rate}: sample rate (example: 8000)
        ${voice}: voice_name passed to TTS(quoted)
        ${file}: output file (quoted, including .wav extension)

    Example commands can be found at:
    http://wiki.freeswitch.org/wiki/Mod_tts_commandline#Example_commands
        -->
        <!--<param name="command" value="echo ${text} | text2wave -f ${rate} > ${file}"/>-->
        <param name="command" value="sh tts_commandline.sh ${text} ${voice} ${file}"/>
    </settings>
</configuration>

第二步:

在freeswitch的拨号规则或脚本中调用mod_tts_commandline,以lua脚本为例,写一个test.lua脚本,内容如下:

  1. session:answer()
  2. session:sleep(3000)
  3. session:set_tts_params("tts_commandline", "zh-CN-YunxiNeural");
  4. session:speak("今天天气不错啊");
  5. session:hangup()

第三步:

外呼测试

更多讨论可加QQ群:482489124或联系个人QQ:736984328

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/561332
推荐阅读
相关标签
  

闽ICP备14008679号