不是,是写状态迁移程序,根据当前是否需要检测信号音,再对脉宽计数,对有/无音来切换子状态、并对音长计数。根据计数值判断是哪一种信号音。程序每10ms置一个定时器标志,主循环的状态监控函数对所有需要计数的状态表进行计数,再判断是需要需要迁移状态。
一般都不能直接用硬延时办法判断,因为软件要用于多个通道(最多8个),而且有的信号音不标准,如回铃音的第一声可能特别短,有的交换机回铃音比较特别,如两短声,这些情况都要求遇到问题时程序容易修改。而且同时还要判断用户挂机等情况。
我们写惯了这种程序就很容易写,一般不搞通信的人想不通的。
用这种办法检测忙音,在一声响、一声停、第二声刚响起来时就完成了,大概0.8秒,比人的反应快得多。对于忙音时长可以通过软件参数调整,可以把拥塞音一起做进去。
信号音检测比较容易,脉冲收号比较难做。