#swift #xcode #audio #avfoundation
Вопрос:
У меня небольшая проблема с AVFoundation, когда я запускаю звук, ничего не выходит. С другой стороны, достаточно добавить таймер, который отображает текущее время рассматриваемого звука, и все работает правильно. не могли бы вы мне помочь? Спасибо.
код, который не работает:
do {
let path = Bundle.main.path(forResource: "sound1", ofType: "mp3")!
let url = URL(fileURLWithPath: path)
let audioPlayer = try AVAudioPlayer(contentsOf: url)
audioPlayer.volume = 1.0
audioPlayer.play()
} catch {
assertionFailure("Failed crating audio player: (error).")
return
}
просто добавьте таймер, и все будет работать:
do {
let path = Bundle.main.path(forResource: "sound1", ofType: "mp3")!
let url = URL(fileURLWithPath: path)
let audioPlayer = try AVAudioPlayer(contentsOf: url)
audioPlayer.volume = 1.0
audioPlayer.play()
print("le son est en cours de lecture !")
Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (timer) in
print(audioPlayer.currentTime)
}
} catch {
assertionFailure("Failed crating audio player: (error).")
return
}
Комментарии:
1. Загрузите аудиофайл в память перед воспроизведением звука.
2. Как я могу это сделать ?
3. и почему это работает, когда я добавляю таймер ? обычно это не должно меняться
4. Я только что попробовал использовать метод prepareForPlay (), но он все еще не работает
5. ваш
AVAudioPlayer
выходит за рамки и разрушается. назначьте его переменной-члену, чтобы продлить срок его службы. это то, что ваш таймер, по сути, делает во втором примере кода
Ответ №1:
Это сработало для меня
вместо
let audioPlayer = try AVAudioPlayer(contentsOf: url)
изменить на
audioPlayer = try AVAudioPlayer(contentsOf: url)