在我的应用程序中,任何手机都可以语音连接到我的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)
}
答案 0 :(得分:2)
当沉默时数据流会在什么样的魔法中断?只要连接线是最符合所有软件和电子工程实现的,那么你就会得到一个连续的流。因此,您需要分析声波的频谱并计算均方根振幅以获得能量。你比较一个你通过经验测试确定的门槛(因为沉默实际上是你需要接受的一个小噪音)。