我喜欢在 iOS 上将(单次)音频效果与(循环)背景音乐的节拍同步。
我该如何处理该任务?
编辑:所以,为了提供更多细节,假设背景音乐循环超过 4 个小节。我希望能够在下一个第 8 个(或第 16 个或第 4 个......)音符上开始播放另一个音频文件(音频效果)。
简单的。将它们放在同一个时间线上(例如音频播放回调),并使用输入速度来确定样本中的度量间隔(或滴答声,如果使用 MIDI 事件)。
更新
double SamplesPerBeat(const double audioSampleRate,
const double beatsPerMinute) {
assert(8000.0 <= audioSampleRate && 192000.0 >= audioSampleRate);
assert(20.0 <= beatsPerMinute && 500.0 >= beatsPerMinute);
return audioSampleRate / beatsPerMinute;
}
uint32_t StartPosition(const double audioSampleRate,
const double beatsPerMinute,
const uint32_t beatNumber) {
const double samplesPerBeat = SamplesPerBeat(audioSampleRate, beatNumber);
return (uint32_t)floor(samplesPerBeat * beatNumber);
}