【发布时间】:2014-04-12 10:15:09
【问题描述】:
我有一个程序,我正在从麦克风录制 24/7 的 1.5 秒音频缓冲区。 现在,我不想将缓冲区(根本没有声音)发送到服务器,这只会使它更加滞后并浪费带宽,我想检查缓冲区中是否有声音..
缓冲区如下所示:
short int *waveIn = new short int[NUMPTS];
在哪里:
const double seconds = 1;
const int sampleRate = 8000;
const int NUMPTS = sampleRate * seconds;
所以,我有一个包含 8000 个单元的短整数数组,用于存储音频缓冲区...
现在,通过使用 Visual Studio 调试器检查,在我将麦克风音频捕获到缓冲区之后,缓冲区看起来像这样:
waveIn[0] = -125
waveIn[1] = -780;
waveIn[2] = -1320;
等等……
现在,我需要使用这个缓冲区来检测它是否捕获了音频,或者它只是一个不包含声音的缓冲区...
运行几次后,我注意到当缓冲区内部确实有声音时,单元格包含的数字较小。例如,一个包含声音的数组通常看起来像这样:
waveIn[0] = -1300;
waveIn[1] = -3200;
waveIn[2] = -2400;
现在,我的问题是,有时,包含音频的缓冲区有很大的数字(更接近于 0),即使里面有声音..
因此,例如,有时单元格可以有 -600 ~ -1200 范围内的数字,而其中没有任何内容,而有时,它们可以有 -600 ~ 1200 范围内的数字,并且实际上包含声音。
那么,如何检测音频缓冲区内部是否有声音?
我希望我已经足够清楚了......
谢谢!
编辑:我忘了提,我正在使用 Wave API 来处理音频...
【问题讨论】: