gpt4 book ai didi

c++ - 解读来自麦克风捕捉设备的 DirectSound 缓冲区元素

转载 作者:行者123 更新时间:2023-11-30 04:40:57 27 4
gpt4 key购买 nike

我正在做一些涉及 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.
}

最佳答案

正如 MSN 所说,样本是 32 位 float 。要检测静音,您通常会计算 RMS 值:取某个时间间隔(比如 20-50 毫秒)内的平方 样本值的平均值,并将该平均值与阈值进行比较(的平方根) .麦克风信号中固有的噪声可能会让单个样本达到阈值以上,而环境声音仍将被视为静音。短时间间隔内的平均值将产生更符合我们感知的值。

关于c++ - 解读来自麦克风捕捉设备的 DirectSound 缓冲区元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/612154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com