Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >XSwitch通信百科之TGML铃音生成

XSwitch通信百科之TGML铃音生成

作者头像
杜金房
发布于 2024-02-28 09:08:26
发布于 2024-02-28 09:08:26
17900
代码可运行
举报
运行总次数:0
代码可运行

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set ringback=%(1000,4000,450)

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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
代码运行次数:0
运行
AI代码解释
复制
<action application="playback" data="tone_stream://%(350,350,450)">

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<action application="playback" data="tone_stream://%(700,700,450)">

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<action application="playback" data="tone_stream://%(350,350,450);loops=4">

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<action application="playback" data="tone_stream://%(60000,0,450)">

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<action application="playback" data="tone_stream://1234">

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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
代码运行次数:0
运行
AI代码解释
复制
<action application="playback" data="tone_stream://v=-7;>=2;+=.1;%(1400,0,350,440)">

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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 遍。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeSWITCH中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用FreeSWITCH检测声音文件中的DTMF信息
今天,有网友问到一个问题——使用什么工具检测录音文件中的DTMF信息。其实FreeSWITCH本身就具备检测DTMF的功能,简单配置一下,写几个脚本就可以了。
杜金房
2020/12/21
2.7K0
烽火2640路由器命令行手册-11-IP语音配置命令
(1)       用户输入的ID若在dialpeer表中已存在,且模式匹配,则进入dialpeer配置模式对相应dialpeer进行配置修改;
landv
2018/12/17
1.1K0
android学习笔记----关于音频焦点Audio Focus
为了便于理解,我们以android的8.0以前的版本为例,8.0以后有一定改动,但是基本思路一样。
砖业洋__
2023/05/06
2K0
freeswitch笔记2:呼叫中心坐席转接
2.添加坐席,并与呼叫中心建立tiers。 我使用的是fusionpbx添加。 xml方式添加,在callcenter.conf.xml:未测试
全栈程序员站长
2022/09/18
3.1K0
Android平台实现屏幕录制(屏幕投影)|音频播放采集|麦克风采集并推送RTMP或轻量级RTSP服务
好多开发者,希望我们能系统的介绍下无纸化同屏的原理和集成步骤,以Android平台为例,无纸化同屏将Android设备上的屏幕内容实时投射到另一个显示设备(如Windows终端、国产化操作系统或另一台Android设备)上,从而实现多屏互动和内容的无缝共享。
音视频牛哥
2024/08/16
2530
Android平台实现屏幕录制(屏幕投影)|音频播放采集|麦克风采集并推送RTMP或轻量级RTSP服务
Freeswitch常见问题
FreeSwitch下配置DID的方法 首先介绍下什么是DID? 翻译为中文为“直接向内拨号”,该服务是由电话公司提供的,它使用户能够直接拨打PBX或VOIP系统中的分机号码,而无需求助于总机或自动话
Jensen_97
2023/07/20
1.4K0
Tina_Linux_音频_开发指南
Allwinner 硬件平台R6, R7s, R11, R16, R18, R30, R58, R328, R332, R333, R311, MR133, T7, R329, MR813, R818, R818B, R528, H133, V853, F133。
韦东山
2023/02/25
7.8K0
Tina_Linux_音频_开发指南
深度解密HTTP通信细节
基础避讳上一篇文章中,我们学会了用wireshark和tcpdump来分析TCP的“三次握手,四次挥手”,非常好用。这哥俩就是传说中的 锤子,拿着 锤子,看什么都像 钉子!在这篇文章中,我对准了 HTTP这颗钉子砸下去,咳咳。
纯洁的微笑
2019/05/06
3640
深度解密HTTP通信细节
智慧教室无纸化同屏方案是否适用RTMP?
智慧教室无纸化方案是一种基于现代信息技术,旨在通过数字化手段实现教学过程的无纸化、智能化和高效化的解决方案。该方案以学生为中心,强调互动化的数字教学服务,旨在提升教学质量和学习效率,同时减少对传统纸张的依赖,实现绿色环保。以下是对智慧教室无纸化方案的详细阐述:
音视频牛哥
2024/09/18
1470
智慧教室无纸化同屏方案是否适用RTMP?
如何设计开发RTSP直播播放器?
我们在对接RTSP直播播放器相关技术诉求的时候,好多开发者,除了选用成熟的RTSP播放器外,还想知其然知其所以然,对RTSP播放器的整体开发有个基础的了解,方便方案之作和技术延伸。本文抛砖引玉,做个大概的介绍。
音视频牛哥
2024/10/12
4730
高通Audio中ASOC的machine驱动
ASoC被分为Machine、Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machine驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个放大器);单独的Platform和Codec驱动是不能工作的,它必须由Machine驱动把它们结合在一起才能完成整个设备的音频处理工作。 ASoC的一切都从Machine驱动开始,包括声卡的注册,绑定Platform和Codec驱动
233333
2018/03/07
4.1K0
高通Audio中ASOC的machine驱动
Android开发笔记(一百二十六)自定义音乐播放器
在Android手机上面,音频的处理比视频还要复杂,这真是出人意料。在前面的博文《Android开发笔记(五十七)录像录音与播放》中,介绍了视频/音频的录制与播放,其中录像用的是MediaRecorder类,播放用的是MediaPlayer类。虽然Android还提供了专门的视频视图VideoView,但是该控件并非新的东西,而是继承了MediaRecorder和MediaPlayer,所以严格来说,Android上面只有一种视频的录制和播放方式。可是音频就大不一样了,Android提供了两种录音方式,以及至少三种常用的播音方式。两种录音方式分别是MediaRecorder类和AudioRecord类,而播音方式包括MediaPlayer类、AudioTrack类和SoundPool类,它们的使用场合各有千秋,且待笔者下面细细道来。 首先是MediaRecorder与MediaPlayer,这对组合即可用于录像,也可单独录制音频。它们处理的音频文件是压缩过的编码文件,通常用于录制和播放音乐,是最经常用到的。MediaRecorder与MediaPlayer在处理音频和视频时,整体流程是一样的,只有在部分方法的调用上有所差异,下面分别把录音/播音有关的方法列出来。 MediaRecorder的录音相关方法: reset : 重置录制资源 prepare : 准备录制 start : 开始录制 stop : 结束录制 release : 释放录制资源 setOnErrorListener : 设置错误监听器。可监听服务器异常以及未知错误的事件。 setOnInfoListener : 设置信息监听器。可监听录制结束事件,包括达到录制时长或者达到录制大小。 setAudioSource : 设置音频来源。一般使用麦克风AudioSource.MIC。 setOutputFormat : 设置媒体输出格式。OutputFormat.AMR_NB表示窄带格式,OutputFormat.AMR_WB表示宽带格式,AAC_ADTS表示高级的音频传输流格式。该方法要在setVideoEncoder之前调用,不然调用setAudioEncoder时会报错“java.lang.IllegalStateException”。 setAudioEncoder : 设置音频编码器。AudioEncoder.AMR_NB表示窄带编码,AudioEncoder.AMR_WB表示宽带编码,AudioEncoder.AAC表示低复杂度的高级编码,AudioEncoder.HE_AAC表示高效率的高级编码,AudioEncoder.AAC_ELD表示增强型低延迟的高级编码。 注意:setAudioEncoder应在setOutputFormat之后执行,否则会出现“setAudioEncoder called in an invalid state(2)”的异常。 setAudioSamplingRate : 设置音频的采样率,单位赫兹(Hz)。该方法为可选,AMRNB默认8khz,AMRWB默认16khz。 setAudioChannels : 设置音频的声道数。1表示单声道,2表示双声道。该方法为可选 setAudioEncodingBitRate : 设置音频每秒录制的字节数。越大则音频越清晰。该方法为可选 setMaxDuration : 设置录制时长。单位毫秒。 setMaxFileSize : 设置录制的媒体大小。单位字节。 setOutputFile : 设置输出文件的路径。 MediaPlayer的播音相关方法: reset : 重置播放器 prepare : 准备播放 start : 开始播放 pause : 暂停播放 stop : 停止播放 setOnPreparedListener : 设置准备播放监听器。 setOnCompletionListener : 设置结束播放监听器。 setOnSeekCompleteListener : 设置播放拖动监听器。 create : 创建指定Uri的播放器。 setDataSource : 设置播放数据来源。create与setDataSource只需设置其一。 setVolume : 设置音量。第一个参数是左声道,第二个参数是右声道,取值在0-1之间。 setAudioStreamType : 设置音频流的类型。AudioManager.STREAM_MUSIC表示音乐,AudioManager.STREAM_RING表示铃声,AudioManager.STREAM_ALARM表示闹钟,AudioManager.STREAM_NOTIFICATION表示通知。 setLooping : 设置是否循环播放。 i
aqi00
2019/01/18
3.1K0
基于windowsphone7的控制ppt播放 第一部分 服务器端
最近突然想起了一个学长的一个利用手机控制ppt播放的一个创意,并想将其在windows phone7上实现一下。 经过几天的努力已经可以控制ppt的播放,暂停,上一张,下一张了,并且电脑会将当前ppt的截图发送到手机端这里。 在代码的编写过程中,参考了IT黄老邪的Windows Phone开发(46):与Socket有个约会 进行服务端与wp客户端的socket通讯的编写,并加入了键盘消息模拟,服务端截屏,图片发送,与客户端的图片接受。 代码如下: WP客户端 1、新建Windows Phone应用程序项目
magicsoar
2018/02/06
9620
基于windowsphone7的控制ppt播放 第一部分 服务器端
【Unity3D插件】AVPro Video插件分享《视频播放插件》
Avpro Video是一款由RenderHeads出品的可以在Unity上安装使用的万能多平台视频播放插件,Avpro Video支持Windows,linux,ios,mac,Android等多平台万能播放。不仅可以实现基础的播放功能,还能实现进度条拖放和速率调整,播放4K视频,360度全景视频等,并对不同的平台进行了优化。
恬静的小魔龙
2022/08/07
5.1K0
【Unity3D插件】AVPro Video插件分享《视频播放插件》
Greenplum 实时数据仓库实践(9)——Greenplum监控与运维
想要一个数据库长久健康的运行,离不开完备的运维工作,切忌只运而不维。针对Greenplum分布式数据库,集群由大量服务器组成,对运维人员或DBA,不仅要关注数据库本身,还要注意集群中各硬件的状况,及时发现并处理问题。本篇介绍权限与角色管理、数据导入导出、性能优化、例行监控、例行维护、推荐的监控与维护任务六方面常规工作内容,目标是满足Greenplum系统维护、使用等方面的要求,保证提供稳定高效的数据库服务。
用户1148526
2022/04/13
4.2K0
TCP常用网络和木马使用端口对照表,常用和不常用端口一览表
大家好,又见面了,我是你们的朋友全栈君。 【开始-运行- CMD , 输入 netstat -an 然后回车就可以查看端口】      端口:0   服务:Reserved   说明:通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果。一种典型的扫描,使用IP地址为0.0.0.0,设置ACK位并在以太网层广播。      端口:1   服务:tcpmux   说明:这显示有人在寻找SGI Irix机器。Irix是实现tcpmux的主要
全栈程序员站长
2022/09/14
2.3K0
ArrayList源码解析(JDK1.8)
1 package java.util; 2 3 import sun.misc.SharedSecrets; 4 5 import java.util.function.Consumer; 6 import java.util.function.Predicate; 7 import java.util.function.UnaryOperator; 8 9 10 /** 11 * 概述: 12 * List接口可调整大小的数组
武培轩
2018/04/18
9040
hugo博客搭建之旅
一直以来都有搭建个人博客的想法,然而一直以来都没有开始行动。近来逛V站,又刷到了个人博客方面的内容,直接行动了。
六月河
2023/06/26
8480
呼叫中心FAQ_客服呼叫中心介绍
英文是否如此?VDN(Virtual Directory Number)VEC(Vector) HUNT(Hunt Group)
全栈程序员站长
2022/11/16
9.1K1
Redis配置文件详解
还记得我刚入行的时候,我的师傅就经常告诉我们配置比开发更重要,因为很多时候就是由于配置不当,而造成后期的难以预想的各种问题,以至于项目难以维护等等由于配置。进入一个公司首先的也是看相关项目的文档。so,如果需要对于redis有更深入的了解,与使用配置文件不可不读。为CURD,但不止于CURD。那么接下来我们对于redis.conf有个了解,话不多说,开干。
PayneWu
2021/01/25
2K0
推荐阅读
相关推荐
使用FreeSWITCH检测声音文件中的DTMF信息
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验