Звук AVAudioPlayer не воспроизводится

В iOS 8 / Xcode 6 у меня была функция, которая включала звуковой эффект. Он больше не работает в iOS 9 после многократного изменения кода. Это то, что я пробовал:

Оригинал:

let bangSoundEffect = SKAction.playSoundFileNamed("Bang.mp3", waitForCompletion: false) runAction(bangSoundEffect) 

Другая попытка:

 self.runAction(SKAction.playSoundFileNamed("Bang.mp3", waitForCompletion: false)) 

Также:

 func playRocketExplosionSound(filename: String) { let url = NSBundle.mainBundle().URLForResource( filename, withExtension: nil) if (url == nil) { print("Could not find file: \(filename)") return } var error: NSError? = nil do { backgroundMusicPlayer = try AVAudioPlayer(contentsOfURL: url!) } catch let error1 as NSError { error = error1 backgroundMusicPlayer = nil } if backgroundMusicPlayer == nil { print("Could not create audio player: \(error!)") return} backgroundMusicPlayer.numberOfLoops = 1 backgroundMusicPlayer.prepareToPlay() backgroundMusicPlayer.play() } playRocketExplosionSound("Bang.mp3") 

Я вытаскиваю волосы. Я использую тот же код в другой сцене для другого звукового эффекта, и он отлично работает! Что случилось? Я заметил, что звуковой эффект начинает иногда воспроизводиться в симуляторе, однако он не завершается и вызывает эту ошибку:

 2015-09-24 19:12:14.554 APPNAME[4982:270835] 19:12:14.553 ERROR: 177: timed out after 0.012s (735 736); mMajorChangePending=0 

Это не работает на реальных устройствах.

В чем проблема? : '(

3 Solutions collect form web for “Звук AVAudioPlayer не воспроизводится”

Возможная проблема с файлом MP3

Проблема, скорее всего, связана с файлом MP3 который вы используете. Код работает для других звуков, это говорит о том, что файл MP3 может быть поврежден, и AVAudioPlayer не работает с расшифровкой. Вы можете попробовать перекодировать этот файл и посмотреть, не исчезла ли проблема. Или, что еще лучше, конвертировать его в WAV .

Использование WAV

Общее правило большого пальца при создании коротких звуковых эффектов для игр – использовать WAV если вы действительно не чувствуете, что вам нужно обрезать жир.

Игры с первоклассными играми подходят к первоклассному производственному качеству, поэтому они записывают и производят активы без сжатия 24bit / 48kHz . Заголовки с немного меньшими амбициями могут записываться и воспроизводиться в CD 16 / 44.1 , что является официальным стандартом для аудио качества CD .

Это имеет как минимум два преимущества. Во-первых, звук имеет лучшее качество. Во-вторых, CPU не должен декодировать файл, чтобы воспроизвести его.

попробуй это:

 dispatch_async(dispatch_get_main_queue(), { (self.playRocketExplosionSound("Bang.mp3") }) 

более безопасно воспроизводить аудио в дочернем потоке в iOS 9.

Коррумпированный файл данных | AVAudioPlayer выходит за рамки


1. Коррумпированный файл данных

Это гарантирует, что вы нашли файл:

  var backgroundMusicPlayer: AVAudioPlayer? = nil if let url = Bundle.main.url( forResource: "Bang", withExtension: "mp3") { do { try backgroundMusicPlayer = AVAudioPlayer(contentsOf: url) backgroundMusicPlayer!.play() } catch {} } return nil 

2. AVAudioPlayer выходит за рамки

Переменная, сохраняющая backgroundMusicPlayer не должна покидать область действия до того, как play() завершит и вернется. Обычно это достигается с помощью переменной класса:

 var backgroundMusicPlayer: AVAudioPlayer? = nil 

Не делайте этого: следующий звук будет воспроизводиться в лучшем случае outOfScopeDelay из-за локальной области var audioPlayer .

 let outOfScopeDelay = 0.5 do { var audioPlayer:AVAudioPlayer! // Incorrectly scoped variable try audioPlayer = AVAudioPlayer(contentsOf: audioRecorder.url) audioPlayer.play() Thread.sleep(forTimeInterval: outOfScopeDelay) } catch {} 

► Найдите это решение на GitHub и получите дополнительную информацию о Swift Recipes .

  • Способ определения того, является ли двоичный код битовым кодом, больше не работает
  • Сохранение NSManagedObject в NSUserDefaults
  • Статическая инфраструктура iOS с включенным битовым кодом для iOS9
  • Как решить проблему с типом или протоколом в Xcode 7?
  • XCode 7 UITests с локализованным пользовательским интерфейсом
  • BRAOfficeDocumentPackage необъявленный тип
  • Ссылка раскадровки в Xcode, где мы должны ее использовать?
  • XCode 7: раскадровки WatchOS не поддерживают тип целевого устройства «iphone»
  • Ресурсы приложений недоступны при тестировании пользовательского интерфейса в Xcode 7
  • Как добавить UDID в Xcode Managed Provisioning Profile
  • Xcode 7.0 beta 6: проблема с VectorKit
  • Interesting Posts
    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.