phpwind的代表网站,网站建设都包含哪些内容,wordpress电子商务插件,seo做子网站手机打电话时如何识别对方按下的DTMF按键的字符 --安卓AI电话机器人 一、前言 前面的篇章中#xff0c;使用蓝牙电话拦截手机通话的声音#xff0c;并对数据加工#xff0c;这个功能出来也有一段时间了。前段时间有试用的用户咨询说#xff1a;有没有办法在手机上#xff… 手机打电话时如何识别对方按下的DTMF按键的字符 --安卓AI电话机器人 一、前言 前面的篇章中使用蓝牙电话拦截手机通话的声音并对数据加工这个功能出来也有一段时间了。前段时间有试用的用户咨询说有没有办法在手机上识别出通话时对方手机按下的DTMF按键就那种电话打通了之后语音提示对方“按1查话费、按2查流量、按0转人工”这种功能。之前检索了一下Android系统截至目前并未提供此类“DTMF解码器”的解析能力。 我们静下心来思考了一下觉得这样的经典IVR场景的需求是非常合理的。以前我们都是建议用户直接对接到呼叫中心或CRM由这种语音平台对通话中的DTMF频率进行解码和识别。但如果不接入呼叫中心呢我们手机本身是否能够从语音中直接识别出来呢 这也是本篇章内容编写的由来。用户的需求就是我们产品演化的方向和动力。在本篇章中我们从DTMF频率的组成、FFT过滤声音的频率以及DTMF字符的识别等角度一起探讨一下Android手机中如何通过手机app识别出通话时对方手机到底有没有按键、按的是哪个dtmf按键。 这个课题方向估计也比较新颖因为一般也没有人去干这种事一般情况确实也没有这个需求打个电话谁会关注对方按什么键呢又不是打摩斯密码。但是从一般应用场景来看也确实有这个需求。 二、认识DTMF按键 我们一般使用电话座机或手机拨打电话时在振铃阶段或接通后均可以按下键盘上的数字0-9、*、#等按键把对应的DTMF按键值发送给对方。通话的对方接收该按键值后进行业务处理和反馈。 通常来说人耳是无法区分不同的DTMF按键值的这也是DTMF双音多频中传输的频率太高远超出人耳能分辨的频率所致。按下按键后通常人耳只能听到“嘟嘟”的按键提示音具体解析要由对应的数学运算模块对语音进行处理和识别。 本篇是应用文多余的理论就不在赘述主要看下面这个图。对语音数据做FFT运算从时空域转频域把横坐标和纵坐标的两个频率确定了DTMF的数字字符就出来了 详细描述看这个网址http://en.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling有空自己去参考。 三、对声音数据做FFT运算
FFT运算算是非常经典和基础的算法了特别对于音频和视频图像处理领域。本来我们在做之前还在想要不要将FFT和DTMF字符识别的功能做成一个纯Java的jar包供有需要的或感兴趣的同学在Android中试着调用。
但在实践中发现真没必要直接使用TarsosDSP库就好反正也就400KB左右又不大。
具体案例可以参考GitHub上的开源示例代码
https://github.com/GreyLabsDev/TarsosDSP-Example
下载下来后将TarsosDSP-Android-2.4.jar文件丢到Android项目的app\libs目录即可。
具体的FFT运算和DTMF识别可以参考DeepSeek中检索的代码实际测试确实可用不得不说DS真TM好用。^V^示例内容如下图所示 四、识别出DTMF字符
这个也没什么技术含量直接按上面章节的DTMF双音多频的频率进行高频和低频的解析然后判断后即可正常识别出对方按下的DTMF按键字符。
DeepSeek中检索的内容这里也直接贴出来了可以直接用。有兴趣的可以参考或自己在里面按关键字来提问获取代码。 有两点需要特意注明一下
1、声音的DTMF解码处理最好放到新的子线程当中去执行。这样可以不干扰原有业务的语音播放和识别处理。子线程中大多数时间都不反馈DTMF字符如果有的话单独另外处理上抛的消息即可。
2、20ms一包的语音数据每包数据320 字节的FFT 的分辨率较低。通常需要缓存多包数据如 40ms 或 80ms来提高频率检测的准确性。按照一般理论8k采样率下采样点数量为205时FFT运算的精度和识别的效果最好。 五、最终输出结果
子线程中FFT运算后上抛的DTMF按键值基本上准确率还是比较高的。但由于每次DTMF音的时长较长需要对识别的按键结果做去除重复的处理。
在运算性能上由于本篇针对的是语音通话的上行数据做的处理。运算量非常的小测试结果表明Android手机上DTMF软解码功能的引入对app的运算性能几乎可以忽略不计放心大胆的用。 六、总结
本篇这个课题通话时解码对方按下的DTMF按键值这种需求正常使用手机的人群偶尔可能会有这个想法一闪而过但估计一般人也没有这个需求。毕竟我们打电话都是用人耳来接听但人耳是无法分辨DTMF的“嘟嘟”声的。
这里之所以会出现识别的需求前提条件是蓝牙电话方案中已经能将手机SIM卡通话的声音给提取了出来。在这个基础之上扩展出在手机本地进行DTMF识别来对接本地的IVR或AI电话机器人。
目前看起来从语音中提取DTMF按键字符还是非常简单的。在通话语音数据中挂一个子线程把数据丢进去等待它识别字符并上抛出来就行。
本篇章的内容除了对手机声音IVR/AI处理功能比较刚需之外对于的SIP坐席电话的数据处理也能起到一定的参考作用。 上一篇ADB点击实战-做一个自动点广告播放领金币的脚本app
下一篇Android应用app实现AI电话机器人接打电话