HTML5实现DTMF(电话拨号按键信号)解码、编码,代码简单易于移植
DTMF(Dual Tone Multi Frequency) 双音多频,由高频群和低频群组成,高低频群各包含4个频率;两个频率波形合成按键信号(0-9 * # A B C D)。
SIP中检测DTMF信号的方法:SIPINFO、RFC2833、INBAND;至于这些是什么我这个外行纯属热闹;拿两个手机互打电话,中途按下的按键嘟嘟的声音就是直接通过话音来传输DTMF信号,属于INBAND(带内检测)吧。
拿Adobe Audition打开手机上的电话录音文件,可以直观的肉眼看到整齐的DTMF信号,分析一下就能很快GET到此信号的解码、编码原理。
在线测试地址:在线测试
【图1】简单粗暴合成的PCM信号杂波较多,但和华为手机打出来的录音信号差不多(他们杂波少点)
一、前言
1.1 HTML5实现DTMF的一些动机
我的GitHub开源库 Recorder 功能日渐丰富,最近又有项目可能会用到DTMF的解码功能,所以就用js实现了一下,本着易于移植的目的,相关代码都是简单的纯js代码,移植到别的语言非常方便。
涉及到三个源码,个个小巧:
- FFT:lib.fft.js 111行(代码+空行+注释)
- DTMF解码:dtmf.decode.js 192行(代码+空行+注释)
- DTMF编码:dtmf.encode.js 191行(代码+空行+注释)
自评:高性能