Звук 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 .

  • Невозможно профилировать приложение на устройстве с iOS 9.0.1, используя Xcode 7, 7.0.1 или 7.1 beta
  • Расширение доли RPPreviewViewController недействительно с помощью ReplayKit
  • Как открыть специальный контроллер просмотра On didReceiveRemoteNotification, когда приложение находится на заднем плане
  • Тестирование тестового блока Xcode 7 7.1 сбой сборки
  • Как создать экземпляр UIView из Watch Extension в watch OS 2?
  • Включение псевдоязыка Double Length не работает в Xcode 7.3
  • Как проверить наличие статического текста, отображаемого в сети в тестах пользовательского интерфейса в Xcode?
  • error: Bundle содержит только бит-маркер
  • Alamofire всегда дает мне ошибку с кодом состояния 500 в ответ
  • Файл isignal / onesignal.h не найден
  • XCode 7: раскадровки WatchOS не поддерживают тип целевого устройства «iphone»
  • Interesting Posts

    Изображение закрывается при использовании BringSubviewToFront

    Предикат даты не работает

    Загрузка файла на диск Google с помощью iOS sdk

    Не удалось прочитать белый на черном штрих-коде Matrix Data Matrix

    HTTP GET-запрос получает фатальную ошибку, когда сеть отключена в iOS 9

    Как изменить разрешение слоя на IOS 5

    зачем загружать места в iOS, используя google places api, вызывает ошибку запроса идентификатора места ошибки?

    Как установить `-ferror-limit` при использовании Fastlane

    Зачем хранить имя пользователя и пароль в Keychain в приложении iPhone?

    Как интегрировать два языка (английский или арабский) в один проект в iphone sdk

    Получение долготы / широты пользователя Когда viewDidLoad

    iOS: функция вызова через несколько секунд пользователь закончил печатать

    Настройка NSPredicate с несколькими условиями

    Масштабировать кнопку входа в Google на iOS с ограничениями

    Есть ли способ получить симулятор iOS 7 на Xcode 8 beta

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.