AVAudioPlayer не работает при загрузке сцены SpriteKit

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

Я скопировал аудиофайл с именем «Test Song.wav» в свой проект, и он также был обнаружен в моих ресурсах, когда я просматривал «Этапы сборки» > «Копировать ресурсы пакета» (что было тем, что этот пост предлагается проверить)

Мой код скомпилировался просто отлично, и мой кольцевой/бесшумный переключатель был правильно повернут в положение звонка, но звук не воспроизводился при загрузке сцены.

я использую

  • Бета-версия Xcode версии 8.0
  • iPhone 6S Plus под управлением iOS 10 Beta 1

Вот мой сломанный код:

import AVFoundation

class GameScene: SKScene {

    override func didMove(to view: SKView) {

        if let path = Bundle.main().pathForResource("Test Song", ofType: "wav") {

        let filePath = NSURL(fileURLWithPath:path)

        let songPlayer = try! AVAudioPlayer.init(contentsOf: filePath as URL)

        songPlayer.numberOfLoops = 0

        songPlayer.prepareToPlay()

        songPlayer.play()

        }
    }
}

Примечание. Я узнал, что в Swift 3.0 метод init() AVAudioPlayer больше не принимает параметр NSError, поэтому этот код НЕ компилируется:

var error:NSError?
audioPlayer = AVAudioPlayer(contentsOfURL: alertSound, error: &error)

person YJ Choi    schedule 24.06.2016    source источник
comment
Здравствуйте, я ценю ваши усилия по модерации, и вы технически правы, что это дубликат. Я не пытаюсь спорить: мне действительно интересно, как работает этот сайт. Имея это в виду: я не могу не задаться вопросом, почему мой пост не может существовать сам по себе, не получив минусов за то, что он бесполезен. Я сделал это в стиле вопросов и ответов, чтобы никто не тратил время на то, чтобы ответить на него, он написан на Swift 3.0 и для iOS 10, и я цитирую все свои источники. Если я не знал, что сообщение, на которое вы ссылаетесь, существует, как я мог узнать, что нужно добавить комментарий к этому сообщению, а не создавать свой собственный?   -  person YJ Choi    schedule 26.06.2016


Ответы (1)


Спасибо этого веб-сайта Я узнал, что моя проблема связана с областью действия моего объекта AVAudioPlayer.

Вот рабочий код:

class GameScene: SKScene {

    var songPlayer:AVAudioPlayer?

    override func didMove(to view: SKView) {

        if let path = Bundle.main().pathForResource("Test Song", ofType: "wav") {

            let filePath = NSURL(fileURLWithPath:path)

            songPlayer = try! AVAudioPlayer.init(contentsOf: filePath as URL)

            songPlayer?.numberOfLoops = 0 //This line is not required if you want continuous looping music

            songPlayer?.prepareToPlay()

            songPlayer?.play()

        }
    }
}
person YJ Choi    schedule 24.06.2016
comment
О каком сайте вы говорите? Ссылка отсутствует в вашем ответе. - person Nicolas Miari; 24.06.2016