我自己也在尝试一些开始/节拍检测算法。我的输入是一个.wav文件,我的输出是一个.wav文件;我可以访问float[]数组块中的整个波形。
我想不出一个好方法来调试和评估我的算法。由于我的输入和输出都是听觉的,所以我认为如果我的调试工具也是听觉的,这将是最有意义的。通过在起始点将可听到的“滴答声”或“嘟嘟声”添加到.wav文件。
有谁有办法做到这一点吗?理想情况下,这将是一个简单的for循环,我将运行几百或几千个样本。
发布于 2009-10-13 16:45:50
float * sample = first sample where beep is to be mixed in
float const beep_duration = desired beep duration in seconds
float const sample_rate = sampling rate in samples per second
float const frequency = desired beep frequency, Hz
float const PI = 3.1415926..
float const volume = desired beep volume
for( int index = 0; index < (int)(beep_duration * sample_rate); index++ )
{
sample[index] +=
sin( float(index) * 2.f * PI * sample_rate / frequency ) * volume;
}发布于 2009-10-13 16:40:41
穷人的答案是:找到一段滴答声或嘟嘟声的录音,然后在每个期望的时刻将其与原始波形混合。您可以通过简单地平均蜂鸣音和输入波形的值来混合蜂鸣音的持续时间。
发布于 2009-10-13 16:45:12
计算出您希望在样本中插入刻度的位置(包括刻度的长度,因此这是一个范围,而不是一个点)。取该部分波形的FFT。在频域表示中添加您想要的“滴答”声音的任何频率分量(最简单的是单个频率音调)。对结果执行逆FFT,瞧,你已经将你的音调混合到了原始信号中。我想(我已经有一段时间没有这样做了)。
https://stackoverflow.com/questions/1561433
复制相似问题