1

我正在尝试使用 C 库(Aubio)对从MediaPlayerAndroid 中播放的某些音乐执行节拍检测。为了捕获原始音频数据,我使用了 a Visualizer,它定期将字节缓冲区发送到回调函数,回调函数又通过 JNI 将其发送到 C 库。

我得到不一致的结果(即几乎没有检测到节拍,并且唯一与音频不完全一致的节拍)。我已经检查了多次,虽然我不能完全排除我自己在做什么,但我想知道 Android 的Visualizer行为究竟如何,因为它在文档中没有明确说明。

  • 如果我使用 设置缓冲区大小setCaptureSize,这是否意味着捕获的缓冲区是在整个音频样本上进行平均的?例如,如果我将捕获大小除以 2,它是否仍代表相同的捕获声音,但在时间轴上的精度会降低 2 倍?
  • 捕获率是一样的吗?例如,以一半的速率设置两倍的捕获大小是否会产生相同的数据?
  • 捕获是连续的吗?换句话说,如果我处理一个捕获的时间太长,当我收到下一个捕获时,处理过程中播放的声音会被忽略吗?

感谢您的洞察力!

4

1 回答 1

0

确保回调函数获取整个音频信号,例如通过计算从其中出来的帧以及到达回调的帧。

Visualizer指出文档会有所帮助。

于 2013-02-28T18:23:15.873 回答