Я боролся с этим некоторое время. У меня есть множество AKPlayers.
var players = [AKPlayer]()
Я искал много и много других вопросов в Интернете по той же проблеме, и все они предлагают использовать: AKPlayer.play(atTime: AVAudioTime)
Я пробовал это, делая (и другие подобные попытки):
var sampleRate = selectedSong!.channels[0].audioFile!.sampleRate
var sampleTime = players[0].audioTime(at: players[0].currentTime)?.sampleTime
var startTime = AVAudioTime(sampleTime: sampleTime! + Int64(0.25*sampleRate), atRate: sampleRate)
for audioPlayer in players {
audioPlayer.play(at: startTime)
}
и другие подобные вещи, такие как:
for audioPlayer in players {
audioPlayer.play(when: 0, hostTime: mach_absolute_time())
}
но ни один из них не работал. Заметна разница во времени воспроизведения. (Аудиофайлы имеют одинаковую длину и формат).
Если это полезно, моя установка выглядит следующим образом:
AKPlayer -> AKPitchShifter
> AKMixer > AudioKit.output
AKPlayer
** Все указанные выше AKPlayer
были добавлены к массиву players
.
Возможно, это связано с тем, что я не понимаю, что такое AVAudioTime
и как он работает.
Заранее спасибо.
******* ПРИМЕЧАНИЯ ****** документы для AKPlayer
say
Игроки могут быть привязаны к общим часам, а также к видео, используя hostTime в различных функциях воспроизведения.
Но не предоставляет пример синхронизации с hostTime.