Audio 从麦克风实时检测音频峰值
我需要从拾音麦克风检测现场音频中的峰值,并在.txt文件中输出峰值的精确时间(毫秒或最好是纳秒) 我一直在寻找两种可能的解决办法。第一种方法是在linux中设置一个shell脚本,通过nohup函数记录5秒的音频增量,然后在matlab中对其进行分析,但这里的问题是,记录的文件的结尾和开头并不完全相隔5秒。新文件开始录制时会有50-150毫秒的延迟 第二个选择是做一些类似于他们用于clap灯开关的事情,但我不知道如何从中提取准确的时间。我也不知道这是否适用于拾音麦克风,还是只适用于声音传感器(用于Arduino…),如图所示Audio 从麦克风实时检测音频峰值,audio,detection,Audio,Detection,我需要从拾音麦克风检测现场音频中的峰值,并在.txt文件中输出峰值的精确时间(毫秒或最好是纳秒) 我一直在寻找两种可能的解决办法。第一种方法是在linux中设置一个shell脚本,通过nohup函数记录5秒的音频增量,然后在matlab中对其进行分析,但这里的问题是,记录的文件的结尾和开头并不完全相隔5秒。新文件开始录制时会有50-150毫秒的延迟 第二个选择是做一些类似于他们用于clap灯开关的事情,但我不知道如何从中提取准确的时间。我也不知道这是否适用于拾音麦克风,还是只适用于声音传感器(用
我想知道是否有更好的解决办法。我可以用C++或java做这个吗?请记住,我需要以毫秒或纳秒为单位输出准确的时间。为了获得准确的计时信息,您需要对样本进行计数,然后从开始记录开始计算时间 首先,您需要从众多可用的音频捕获播放API中选择一个。你没有提到你在哪个平台上,但如果你在linux上,你可以看看ALSA、Jack、OSS、SDL等等。一旦您能够配置捕获设备并开始接收样本,那么每个样本的方法都将是相似的。您将获得接收样本的某种函数回调,并需要扫描样本以查找峰值和计算时间等 下面是一个回调的示例。请记住,您选择的API有其自身的微妙之处,您可能需要将字节数组转换为双精度数组,等等。。。
时间
将是精度为1/采样器的双精度值
int sampleCount = 0;
void BufferCallback(double* samples, int numSamples)
{
for (int i = 0 ; i < numSamples ; i++)
{
if (abs(samples[i]) > threshold)
{
// exceeded peak threshold, record the time
double time = sampleCount / (double)SampleRate;
}
sampleCount++;
}
}
int sampleCount=0;
void BufferCallback(双*样本,整数样本)
{
对于(int i=0;i阈值)
{
//超过峰值阈值,记录时间
双倍时间=采样计数/(双倍)取样器;
}
sampleCount++;
}
}