FreeSwitch音频多种播放

在FreeSwitch中播放语音流,‌主要通过API指令和脚本方式实现语音相关的播放和录制等控制。在实际应用过程中根据业务需要,选择适合自己的方式进行处理。

第一、概述:

1,内置语音库

FreeSwitch支持多种音频格式,WAV、MP3、GSM等,把音频文件放在服务器上,通过相关指令进行播放相关文件。

如果把语音文件放在云服务器上如阿里云的OSS上等,在进行播放时,会有很大的噪音:

bgapi originate user/1004 &playback(https://bjpshop.oss-rg-china-mainland.aliyuncs.com/audio/error.wav)

bgapi uuid_broadcast 9d936ccc-20d3-421b-85ab-cfe26b72cdf8 https://bjpshop.oss-rg-china-mainland.aliyuncs.com/audio/major.wav

本地文件的默认语音文件的目录在vars.xml中可以看到

  <X-PRE-PROCESS cmd="set" data="sound_prefix=$${sounds_dir}/en/us/callie"/>
  <!--<Z-PRE-PROCESS cmd="set" data="sound_prefix=$${sounds_dir}/en/us/allison"/> -->

2,IVR(Interactive Voice Response)交互式语言应答

FreeSwitch提供强大的IVR功能,可以使用XML文件或Lua脚本实现交互式语音菜单,播放录制好的音频。在一般的CTI应用系统中,都会有IVR(交互式语音应答系统)。IVR系统是呼叫中心的重要组成部分,通过IVR系统,用户可以利用音频按健电话输入信息,从系统中获得预先录制的数字或合成语音信息。具有TTS功能的IVR可以加快服务速度,节约服务成本,使IVR为呼叫者提供7*24小时的服务。

3,TTS(Text To Speech的缩写

将文本实时转化为音频,在通话中播放生成的音频流。目前常见的音频流很多,如百度、阿里和腾讯都提供强大的文字转音频。TTS技术对文本文件进行实时转换,转换时间之短可以秒计算。在其特有智能语音控制器作用下,文本输出的语音音律流畅,使得听者在听取信息时感觉自然,毫无机器语音输出的冷漠与生涩感。

一个典型的包含TTS服务的电话服务流程可分为:

用户电话拨入,系统IVR响应,获得用户按键等信息。

IVR根据用户的按键信息,向数据库服务器申请相关数据。

数据库服务器返回文本数据给IVR。

IVR通过其TCP通讯接口,将需要合成的文本信息发送给TTS服务器。

TTS服务器将用户文本合成的语音数据分段通过TCP通讯接口发送给IVR服务器。

IVR服务器把分段语音数据组装成为独立的语音文件。

IVR播放相应的语音文件给电话用户。

一般的公网接入(IVR)大都采用工控机+语音板卡,而合成的语音数据则通过局域网传给IVR。这种结构只适用于简单的应用场合。

4,音频流 

FreeSwitch支持外部的流媒体服务器,借助流媒体可以实现语音播放。

第二、播放实例

方法一:使用API

1,originate命令播放语音:

bgapi originate user/1004 &playback(major.wav)

说明:异步单腿拨通1004客服,接通后播放major.wav背景音乐,播完后自动挂断。playback函数可以借助 file_string 实现多段音频播放。在 FreeSWITCH 中比较典型的是播放录音文件的 playback 和 play_and_detect_speech 。这两个播放录音的功能都依赖于 switch_ivr_play_say.c#switch_ivr_play_file() 函数,而该函数可以借助 file_string 实现多段音频播放,示例如下:

originate user/1000 &playback(file_string://ivr/8000/ivr-welcome1.wav!ivr/8000/welcome2.wav)

提醒:file_string:// 前缀不能省略,这个代表的是 FreeSWITCH 中的一个文件管理模块,多个音频文件用 ! 拼起来即可。注意如果文件名中含有 ! 符号,也可以使用通道变量 playback_delimiter 来修改文件间的分隔符号

2,uuid_broadcast命令播放语音:

在一个指定UUID的信道上执行任意一个拨号方案程序。如果指定了某录音文件名,则代表将会在该信道上播放该文件。 执行拨号方案程序的语法规则是“app::args”。

uuid_broadcast <uuid> <path> [aleg|bleg|both]

在选定的腿上执行应用程序,执行完毕后挂断,并指明挂机原因。
uuid_broadcast <uuid> app[![hangup_cause]]::args [aleg|bleg|both]

基本用法:

uuid_broadcast 873af3a3-9ab9-406d-b485-26bbadaec93c major.wav
uuid_broadcast 9d936ccc-20d3-421b-85ab-cfe26b72cdf8 major.wav

说明:如果信道上有很多其他的音频,会逐个播放。具体在实际应用种如何使用,可以了解

uuid_break、uuid_buglist和uuid_displace等相关指令,配合使用。

方法二、使用Lua脚本播放音频

1、使用方法:session:execute(app,data)

local mySound = "/usr/local/freeswitch/sounds/music/16000/major.wav"

session:execute("playback", mySound)

说明:使用session播放音频,是在当前通话中,获得通话的session,然后通过session调用playback方法进行音频播放。

2、TTS引擎方法:

-- 先应答,防止电话断掉
session:answer();
while (session:ready() == true) do
    -- 防止自动挂断
    session:setAutoHangup(false);
    -- 设置TTS引擎参数
    session:set_tts_params("flite", "kal");
    -- 播放欢迎语音
    session:speak("Hello. Welcome to the VoIp World!");
    -- 睡100ms
    session:sleep(100);
    -- 播放提示语音
    session:speak("please select an Action.");
    session:sleep(100);
    -- 按1转到1001分机
    session:speak("to call 1001, press 1");
    session:sleep(100);
    -- 按2挂断
    session:speak("to hangup , press 2");
    session:sleep(2000);
end

说明:使用此方法必前确保已经正确安装TTS。具体TTS安装和使用参考:FS+Lua+TTS实现IVR(互动式语音应答)-CSDN博客

方法三、使用IVR播放音频

 freeswitch> originate user/1001 &ivr(welcome)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常生果

喜欢我,请支持我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值