Я работаю на Xcode 8 Swift 3.Swift 3 - Ошибка при воспроизведении звука на SplashScreen
Я пытаюсь сделать код для воспроизведения звука только после того, как приложение запускается. Я гнал его в функцию (в AppDelegate):
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {}
И так вот мой код:
var opening_sound = AVAudioPlayer()
и после того, как:
let Nt = URL(fileURLWithPath: Bundle.main.path(forResource: "opp", ofType: "mp3")!)
do {
opening_sound = try AVAudioPlayer(contentsOf: Nt)
opening_sound.prepareToPlay()
} catch {print("Error")}
opening_sound.play()
Конечно, я импортировать AVFundation.
При запуске я получаю в консоли «Error», а затем на линии opening_sound.play()
я получаю «Тема 1:. EXC_BAD_ACCESS (код = 1, адрес = 0x48)
Я попытался запустить его с зомби объекты активизированы, но нет ответ
EDIT:.. Спасибо за ваши ответы в ответ на @silicon_valley:
ошибка, я получаю это операция не может быть завершена (OSStatus ошибка 1685348671.)
I J. У ust также был: objc [31817]: Класс _NSZombie___NSArrayM реализован в обоих (0x618000047c80) и ?? (0x618000047cb0). Один из двух будет использован. Какой из них не определен. с разрешенными зомби.
Я пробовал то, что вы сказали @Pierce, но он не работает, потому что AVAudioplayer не может быть необязательным значением. Если я напишу ... = AVAudioplayer?
, у меня есть выбор между AVAudioplayer?()
, который заканчивается словами «Невозможно вызвать инициализатор для типа« AVAudioPlayer »? без аргументов ". Или, если я напишу AVAudioPlayer?.self
, код после не работает должным образом.
Таким образом, учитывая, что я могу начать opening_sound в качестве дополнительного значения этого:
if let Nt = Nt {
self.opening_sound = try? AVAudioPlayer(contentsOf: Nt)
}
не работает и поэтому является кодом.
Я думаю, что проблема связана с основной нитью, но я не вижу ее. Конечно, «opp.mp3» находится в главном комплекте.
EDIT: Спасибо к @Pierce ответ (извините, я не читал правильно) я получил это:
var opening_sound: AVAudioPlayer?
...
let Nt: URL? = URL(fileURLWithPath: (Bundle.main.path(forResource: "opp", ofType: "mp3"))!)
if let Nt = Nt {
self.opening_sound = try? AVAudioPlayer(contentsOf: Nt)
}
playOpeningSound()
...
func playOpeningSound() {
if let opening_sound = opening_sound {
if opening_sound.isPlaying {
opening_sound.pause()
}
opening_sound.currentTime = 0
DispatchQueue.global().async {
opening_sound.play()
}
}
И у меня нет ошибки. Но звук не выходит ...! Благодарим за помощь!
Что ошибка вы получаете в улове? Если вы замените 'catch {print (" Ошибка ")}' на 'catch let error {print (error.localizedDescription)}', вы получите причину сбоя. Кроме того, вы не должны называть «play», если в блоке do ... catch произошла ошибка. –
@VincentS - Я добавил ответ, который должен работать, если у вас правильно записано имя звукового файла и расширение. Как вы его написали, вы должны убедиться, что у вас есть файл под названием 'opp.mp3' в вашем основном пакете. Надеюсь, это поможет – Pierce
Прошу прощения за Винсент. Проверьте мой обновленный ответ. Я забыл бросить 'Nt' в качестве необязательного' URL'. Вам нужно сказать «let Nt: URL? ... ' – Pierce