Вопрос:Как заставить анимацию работать в точках во время воспроизведения музыкального файла?
В Swift код, кроме использования в
NSTimer
, как я могу получить анимации начать в точных точках во время воспроизведения музыкального файла воспроизводится с помощьюAVFoundation
?
фон
У меня есть метод, который играет музыкальный файл, используя AVFoundation
(ниже). У меня также есть анимации UIView, которые я хочу начать с точных точек во время воспроизведения музыкального файла.
Один из способов добиться этого - использовать NSTimer
, но у этого есть потенциал, чтобы выйти из синхронизации или не быть достаточно точным.
Есть ли способ, с помощью которого я могу использовать AVFoundation
, чтобы получить доступ к времени музыкального файла (счетчик времени), поэтому, когда появляются определенные моменты во время воспроизведения музыки, начинается анимация?
Есть ли событие/уведомление, что триггеры AVFoundation
, которые дают постоянный поток времени, прошедший с момента начала воспроизведения музыкального файла?
Например
При 0: 52.50 (52 секунд и 1/2), называют startAnimation1()
, в соотношении 1: 20.75 (1 минута, 20 секунд и 3/4), звоните startAnimation2()
и так далее?
switch musicPlayingTimeElapsed {
case 0:52.50:
startAnimation1()
case 1:20.75:
startAnimation2()
default:
()
}
Воспроизведение музыки с помощью AVFoundation
import AVFoundation
var myMusic : AVAudioPlayer?
func playMusic() {
if let musicFile = self.setupAudioPlayerWithFile("fileName", type:"mp3") {
self.myMusic = musicFile
}
myMusic?.play()
}
func setupAudioPlayerWithFile(file:NSString, type:NSString) -> AVAudioPlayer? {
let path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String)
let url = NSURL.fileURLWithPath(path!)
var audioPlayer:AVAudioPlayer?
do {
try audioPlayer = AVAudioPlayer(contentsOfURL: url)
} catch {
print("AVAudioPlayer not available")
}
return audioPlayer
}
Спасибо, этот подход может работать. – user4806509