我正在做一些涉及 DirectSound 缓冲区的维护工作。我想知道如何解释缓冲区中的元素,即知道缓冲区中的每个值代表什么。此数据来自麦克风。
正在使用这种波形格式:
WAVEFORMATEXTENSIBLE format = {
{ WAVE_FORMAT_EXTENSIBLE, 1, sample_rate, sample_rate * 4, 4, 32, 22 },
{ 32 }, 0, KSDATAFORMAT_SUBTYPE_IEEE_FLOAT
};
我的目标是检测麦克风静音。我目前通过简单地确定缓冲区中的所有值是否未能超过某个阈值体积值来实现这一点,假设每个缓冲区元素的强度直接对应于体积。
这是我目前正在尝试的:
bool is_mic_silent(float * data, unsigned int num_samples, float threshold)
{
float * max_iter = std::max_element(data, data + num_samples);
if(!max_iter) {
return true;
}
float max = *max_iter;
if(max < threshold) {
return true;
}
return false; // At least one value is sufficiently loud.
}