我有一个音频文件,我想要一个浮动变量与它同步。然后,浮动变量将用于创建正在播放的音频文件的图形指示。
我想要发生的事:
音频文件中的其他节拍(第一拍、第三拍、第五拍等等),变量应该是0.0f。其他拍子(第二拍、第四拍、第六拍等等),变量应为1.0f。
最重要的是,我希望随着时间的推移,在节拍之间“滑动”在0.0到1.0之间,我的第一个想法是在C++标准库中使用sin函数。
我所掌握的有关音频文件的信息:
除此之外,我还有一个增量和一个生命周期,它告诉应用程序已经执行了多长时间(以秒为单位)。
由于sin函数以浮点(或双)作为参数,我需要帮助的是计算,然后可以将其作为函数的参数传递,然后函数将用于生成与音频文件同步的正弦波。
发布于 2016-07-10 14:49:42
虽然这个解决方案不是硬的,但它应该能够检测到一个简单音频文件的节拍:

这里你可以看到一个简单的音频文件,你可以清楚地看到节拍。我们的目标是找到偏移值,这样我们就可以创建cos函数。找到偏移值的一种方法是首先计算文件的平均体积(通过获取音频数据的绝对值,因为如下所示,这些值会降到零下)。为了消除可能的噪声,我们计算了这个平均体积。接下来,我们循环遍历所有样本(您可能只需选择一个音频通道),并找到绝对值高于此平均值的第一个示例。这将产生一个偏移值(而不是秒)。
因为我们知道我们正在回放的是哪一秒,所以我们现在可以计算cos函数的值,它通过填充我们之前计算的函数的频率和偏移量来可视化音频。
请纠正我数学太差了
具有给定BPM的规则节拍应该如下所示。
BPS=BPM/60
g(x)=cos((x*BPS)*360)
然后,带有偏移量的节拍应该如下所示:
OFFSET_IN_SECONDS=OFFSET_IN_SAMPLES/SAMPLERATE
g(x)=cos((x*BPS+OFFSET_IN_SECONDS)*360)
重要:这些函数使用与弧度相反的度,C++使用
https://stackoverflow.com/questions/38288324
复制相似问题