python3解析wav文件获取dtmf值
操作系统 :Windows 10_x64
Python版本:3.9.2
从事FreeSwitch相关工作,大概率会遇得到DTMF,DTMF的传递方式有三种:
- In-band
- RFC2833
- SIP-INFO
使用RFC2833或SIP-INFO传递方式的DTMF,FreeSwitch可以在日志中打印出来,但遇到inband模式的DTMF,FreeSwitch的日志就打印不出来了。
如果是会议场景,使用In-band模式(比如固话)发送DTMF,DTMF按键的声音和音频流混合在一起发送到对端:
1)在传输过程转换为2833格式dtmf后,会添加2833格式的DTMF按键信息,混合在音频流里面的DTMF按键未移除;
2)会出现在会议系统中可以听到座机传来的DTMF按键音。
这个问题目前没有比较好的解决办法,这里记录一下。但这个问题引发了我的思考:
In-band模式的DTMF能识别吗?如果可以识别,怎么识别?
今天整理下In-band模式DTMF识别的笔记。我将从以下几个方面进行展开:
DTMF介绍
如何生成包含DTMF按键音的wav文件
如何使用python脚本解析wav文件获取DTMF按键值
运行效果截图及配套资源下载
一、DTMF介绍
DTMF信号即双音多频信号,网上介绍的资料比较多,这里主要关注的是频率信息,可以参考下pypi上关于DTMF的介绍:
https://pypi.org/project/dtmf/

二、生成包含DTMF按键音的wav文件
1、使用Audacity生成wav文件
Audacity版本:3.1.3这里使用Audacity进行噪音文件的生成,如果不了解Audacity软件,可参考这篇文章:
1)选择"生成->DTMF音..."

2)生成0123456789音频

3)导出音频
这里使用8000hz导出音频。

如果想直接使用导出的音频文件(dtmf-au.wav),可从如下渠道获取:
2、使用软电话模拟inband模式生成wav文件
1)配置软电话,使用inband模式

2)用会议室模拟通话过程的DTMF按键
conference test bgdial user/1001
conference test bgdial user/1002
1001按键,在会议室的1002可以听见按键音(按键值:123456789*0#)。
3)执行会议室录音
命令如下:
conference test recording start /tmp/dtmf-fs.wav
这里描述下大概流程,如果想直接使用导出的音频文件(dtmf-fs.wav),可从如下渠道获取:
三、python解析wav文件获取DTMF按键值
在GitHub上找到一个解析dtmf的库:
https://github.com/ribt/dtmf-decoder

如果无法打开,可从文末提供的渠道获取下载的源码压缩包。
其核心是 dtmf.py 文件,运行效果如下:

也可直接使用我修改过的代码(dtmf2.py):

完整代码可从如下渠道获取:
运行效果如下:

四、资源下载
本文涉及源码及相关文件,可从如下途径获取:

好,就这么多了,别忘了点赞哈!
python3解析wav文件获取dtmf值的更多相关文章
- Python解析Wav文件并绘制波形的方法
资源下载 #本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在 ...
- Python3解析dex文件
一.说明 1.1 背景说明 看<加密与解密>的时候反复听说“PE文件格式”,到Android安全兴起就不断听说“dex文件格式”.意思是看得懂的,但自己不能手解析一番总觉得不踏实,所以决定 ...
- Python3 解析excel文件
Python3 解析读取excel文件 一.第三方库 import xlrd 二.代码示例 import xlrd ''' 读取Excel每个sheet的第一列和第二列的值,拼接成json串,写入文件 ...
- 在java项目中怎样利用Dom4j解析XML文件获取数据
在曾经的学习.net时常常会遇到利用配置文件来解决项目中一些须要常常变换的数据.比方数据库的连接字符串儿等.这个时候在读取配置文件的时候.我们一般会用到一个雷configuration,通过这个类来进 ...
- python3解析XML文件
软硬件环境 Ubuntu 15.10 32bit Python 3.5.1 PyQt 5.5.1 前言 Python解析XML的方法挺多,本文主要是利用ElementTree来完成. 实例讲解 解析X ...
- python xml.etree.ElementTree解析xml文件获取节点
<?xml version = "1.0" encoding = "utf-8"?> <root> <body name=&quo ...
- 在tomcat启动时解析xml文件,获取特定标签的属性值,并将属性值设置到静态变量里
这里以解析hibernate.cfg.xml数据库配置信息为例,运用dom4j的解析方式来解析xml文件. 1.在javaWeb工程里新建一个java类,命名为GetXmlValue.java,为xm ...
- 音视频学习系列第(三)篇---wav文件的存储和解析
音视频系列 什么是wav wav是一种无损的音频文件格式,wav文件有两部分,第一部分是文件头,记录一些重要的参数信息,如音频的采样率,通道数,数据位宽,第二部分是数据部分,数据部分可以是PCM,也可 ...
- java解析属性文件
-----------------------解析属性文件----------------------------- /** * 获取src下属性文件 * @param params * ...
- WAV文件读取
WAV是一种以RIFF为基础的无压缩音频编码格式,该格式以Header.Format Chunk及Data Chunk三部分构成. 本文简要解析了各部分的构成要素,概述了如何使用C++对文件头进行解析 ...
随机推荐
- react 属性绑定动态值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Ansible-playbook剧本进阶
剧本高级特性篇 循环 在写 playbook 的时候发现了很多 task 都要重复引用某个相同的模块,比如一次启动10个服务,或者一次拷贝10个文件,如果按照传统的写法最少要写10次,这样会显得 pl ...
- vue双曲线
原型 1 <template> 2 <div :class="className" :style="{height:height,width:width ...
- VIP视频解析
效果图 新建窗口 import tkinter as tk# 创建一个窗口 root = tk.Tk() # 设置窗口大小 root.geometry('700x250+200+200') # 设置标 ...
- AtCoder Beginner Contest 302 H. Ball Collector 题解 可撤销并查集
为了更好的阅读体验,请单击这里 AtCoder Beginner Contest 302 H. Ball Collector 题意跳过. 可以视作将 \(a_i, b_i\) 之间连了一条边,然后 \ ...
- B 站和小红书又又又崩了,罪魁祸首竟然又是他。。。
大家好,我是凌晨. 今天上午10点左右,我打开B站发现无法刷新视频列表和评论区,收藏夹和弹幕也均不可用. 原以为是手机网络问题,换网络重启手机都还是不行,第一时间打开微博,果然,B站崩了的新闻荣登榜首 ...
- 专用M4F+四核A53,异构多核AM62x让工业控制“更实时、更安全” Tronlong创龙科技5 秒前 1 德州仪器 TI芯片
Cortex-M4F + Cortex-A53异构多核给工业控制带来何种意义? 创龙科技SOM-TL62x工业核心板搭载TI AM62x最新处理器,因其Cortex-M4F + Cortex-A53异 ...
- jsp+servlet+mysql-----------批量删除
jsp: <div class="result-wrap"> <form action="${pageContext.request.contextPa ...
- multipass中docker的使用及固定ip的配置
之前一直用WSL2,但是可能我高估了我笔记本的性能,每次开启后我的win11都闪得厉害. 公司给配发的联想昭阳 前两天实在受不了,把它重装了.才发现之前一直很抵触重装,结果重装完工作几乎没怎么受影响. ...
- spring cloud 上云的情况下,Ribbon 客户端负载均衡 与 ALB 服务端负载均衡的选择
在云环境(例如AWS)中,由于云提供商通常提供强大的负载均衡服务(如AWS的ALB),一般不再需要使用Ribbon这种客户端负载均衡方案.云环境中的负载均衡器通常能够提供更高的可靠性.可扩展性和简化的 ...