У меня есть неприятная проблема с получением звука для игры в игру, но, похоже, не получается получить какой-либо выход через AVAudioPlayer. Первоначально это было настроено как класс, но когда он не работал, я пробовал жестко кодировать звуковой вывод, чтобы проверить, есть ли там проблема. Он по-прежнему не работает, и я попробовал несколько разных файлов, чтобы исключить проблемный аудиофайл или формат. URL-адрес восстанавливается, но аудиоплеер просто не выводит звук.Звук, воспроизводимый через SKAction, но не через AVAudioPlayer
Я прочитал несколько тем о похожих проблемах и искал системные настройки звука, но это не имеет никакого значения. Было высказано предположение, что Симулятор не может выводить звук в некоторых обстоятельствах, но я не думаю, что это имеет место здесь.
let myFile = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("gong", ofType: "wav")!)
print ("URL data: \(myFile)")
do{
let audioPlayer = try AVAudioPlayer(contentsOfURL:myFile)
audioPlayer.prepareToPlay()
audioPlayer.play()
}catch {
print("Error playing sound")
}
Однако это играет отлично:
self.runAction(SKAction.playSoundFileNamed("gong", waitForCompletion: false))
мне нужна функциональность AVAudioPlayer, как я хочу, чтобы иметь возможность начать остановку и регулировать громкость звука, как это петли. Я использую XCode 7.3.1 и Swift 2.2.
Любые идеи?
Большое спасибо, Kw
Вы импортировали AVFoundation правильно? – Pierce
Да. Думаю, я это проработал. Мне нужно было создать экземпляр на AVAudioPlayer в области, которая является постоянной, поэтому она не удаляется сборкой мусора. Кроме того, я думаю, что команда prepareToPlay не успевает загрузить файл в память до выполнения команды воспроизведения, и игрок также выходит из сферы действия и собирается почти мгновенно, когда вызывается код, в который он вызван. Результат: нет шансов на игру. Я собираюсь создать класс, который предварительно загружает все звуки в память на этапе init() с помощью prepareToPlay, чтобы их можно было вызвать, чтобы играть мгновенно. Спасибо – Kwangle
Это было то, что я собирался сказать, я никогда не использовал метод prepareToPlay, и мне сказали, что это обычно не нужно. – Pierce