XSwitch通信百科之TGML铃音生成

2024-02-28 17:08:26 浏览数 (4)

TGML(Tone Generation Markup Language)用于在 XSwitch 内生成各种铃音。

TGML 可以直接在 XSwitch 界面上设置,如:

代码语言:javascript复制
set ringback=%(1000,4000,450)

TGML 可以也可以用在 Dialplan 中,如(其中tone_stream是一个文件接口,相当于一个文件):

代码语言:javascript复制
<action application="playback" data="tone_stream://%(1000,4000,450)">

上述铃音是中国标准的电话回铃音,更多的铃音可以在XSwitch 默认的配置文件中找到(https://git.xswitch.cn/xswitch/xswitch/src/branch/master/conf/vanilla/vars.xml),如上述链接中的cn-ring就代表中国回铃音、us-ring就代表美国回铃音。

一般的定义是%(ontime,offtime,freq1,freq2),ontime(通)和offtime(断)的单位是毫秒,freq1和freq2的单位是赫兹。

cn-ring的定义是%(1000,4000,450),表示 1 秒通,4 秒断,单频 450 赫兹。当然也可以写成%(1000,4000,450,0)。

要播放忙音非常容易,下面的例子播放一个忙音,参数为 350 毫秒通,350 毫秒断,频率为 450 赫兹:

代码语言:javascript复制
<action application="playback" data="tone_stream://%(350,350,450)">

有时会碰到 700 毫秒通,700 毫秒断的忙音:tone_stream://%(700,700,450),跟 350 毫秒版本的相比显得比较悠长:

代码语言:javascript复制
<action application="playback" data="tone_stream://%(700,700,450)">

下面这个例子加上loops=4参数,播放 4 个忙音:

代码语言:javascript复制
<action application="playback" data="tone_stream://%(350,350,450);loops=4">

下面这个例子播放拨号音,也就是只有 60 秒通没有断:

代码语言:javascript复制
<action application="playback" data="tone_stream://%(60000,0,450)">

还可以直接播放 dtmf,dtmf 的范围当然是 0 到 9,再加上 abcd*#,下面的例子播放 dtmf1234

代码语言:javascript复制
<action application="playback" data="tone_stream://1234">

下面是一个组合的例子,先播放 5 秒的拨号音,接着播放 dtmf1234,最后播放回铃音:

代码语言:javascript复制
<action application="playback" data="tone_stream://%(5000,0,450);1234;%(1000,4000,450)">

上面的例子提到了%,loops,以及dtmf,除这些之外,TGML 还支持下面的变化:

  • c=x 设置通道数。
  • r=x 设置采样率。
  • d=x 设置默认 tone 的持续时长(ontime),单位是毫秒。
  • w=x 设置默认 tone 的静音时长(offtime),单位是毫秒。
  • v=x 设置默认音量(范围是-63.0dB 至 0.0dB)。
  • >=x 设置音量递减的步长,单位是毫秒。
  • <=x 设置音量递增的步长,单位是毫秒。
  • =x 设置每个间隔要增加或者减少的 dB 数。
  • l=x 设置脚本中每个 tone 重复的次数。
  • L=x 设置整个脚本重复的次数。

比如:

代码语言:javascript复制
<action application="playback" data="tone_stream://v=-7;>=2; =.1;%(1400,0,350,440)">

初始音量是-7dB,每隔 2 毫秒音量递减,每次递减 0.1dB。这是一个音量逐渐变低的拨号音。

L跟loops作用类似,但loops节约内存。

L和l可以通过下面的例子做对比就很清楚它们之间的区别:

代码语言:javascript复制
<action application="playback" data="tone_stream://1234;L=2">
<action application="playback" data="tone_stream://1234;l=2">

L=2把 dtmf1234 全部播放 2 遍,而l=2仅仅是把最后一个 dtmf4 播放 2 遍。

0 人点赞