Я выполняю некоторые работы по техническому обслуживанию с использованием буферов 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.
}