检测SerialPort输入中的暂停

本文关键字:暂停 输入 SerialPort 检测 | 更新日期: 2023-09-27 17:50:49

在我的应用程序中,任何电话都可以语音连接到我的3G USB调制解调器,并且通话立即被接听。它通过串行端口接收PCM(8000个样本,16位,单声道)音频,并使用微软的语音合成器与呼叫者对话。

问题是,只有当调用者停止说话时,应用程序才应该回话。

我尝试实现一个3秒定时器,当从串行端口接收数据时重置自己,所以当定时器被"勾选"时,它应该意味着调用者沉默了3秒。但事实并非如此。我做错了什么?

private void DataRecdFromSerial(object sender, SerialDataReceivedEventArgs e)
{
     say.Stop(); say.Start(); // reset timer with interval 5000
     int n = usb.BytesToRead;
     byte[] comBuffer = new byte[90000];
     usb.Read(comBuffer, 0, n);
     if(comBuffer.Length > 0)
     {  
          wfw.Write(comBuffer, 0, n); // NAudio Wave File Writer
     }
}
private void say_Tick(object sender, EventArgs e)
{
     // Caller stopped speaking for 5 seconds (not working)
 }

检测SerialPort输入中的暂停

究竟是什么魔法让数据流在寂静中中断?您将得到一个连续的流,只要线路连接,这是当今所有软件和电子工程实现中最符合逻辑的。所以你需要分析声波的频谱,计算均方根振幅来得到能量。您将比较通过经验测试确定的阈值(因为沉默实际上是您需要接受的小噪音)。