检测SerialPort输入中的暂停

时间:2014-03-19 04:59:56

标签: c# serial-port naudio

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

问题是,只有当呼叫者停止说话时,应用程序才应该回话。我怎么能检测出来?

我尝试实现一个3秒钟的定时器,当从串口接收到数据时会自动复位,所以当定时器被勾选时#39;它应该意味着呼叫者保持沉默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)
 }

1 个答案:

答案 0 :(得分:2)

当沉默时数据流会在什么样的魔法中断?只要连接线是最符合所有软件和电子工程实现的,那么你就会得到一个连续的流。因此,您需要分析声波的频谱并计算均方根振幅以获得能量。你比较一个你通过经验测试确定的门槛(因为沉默实际上是你需要接受的一个小噪音)。