Фоновая музыка в Swift 3

#ios #swift #swift3

#iOS #swift #swift3

Вопрос:

Я хочу, чтобы в моей игре была фоновая музыка, которая закодирована в Swift 3. Я перепробовал множество руководств и примеров кодов, но не могу найти реализацию, которая работает в моем коде Swift 3. Лучший пример кода, который я смог найти, — это этот:

 lazy var backgroundMusic: AVAudioPlayer? = {
    guard let url = Bundle.main.url(forResource: "Music Title", withExtension: "mp3") else {
        return nil
    }

    do {
        let player = try AVAudioPlayer(contentsOf: url)
        player.numberOfLoops = -1
        return player
    } catch {
        return nil
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    backgroundMusic?.play()
}
  

Я поместил музыкальный файл в отдельную папку под названием «Ресурсы». Я был бы очень рад, если бы вы могли мне помочь!


Я заменил пробелы в имени файла подчеркиванием, но проблема по-прежнему сохраняется. Кстати, когда я следую подсказкам по переводу из Xcode, я получаю этот код:

 lazy var backgroundMusic: AVAudioPlayer? = {
    guard let url = Bundle.main.url(forResource: "Mining by Moonlight", withExtension: "mp3") else {
        return nil
    }

    do {
        let player = try AVAudioPlayer(contentsOf: url)
        player.numberOfLoops = -1
        return player
    } catch {
        return nil
    }
}()

override func viewDidLoad() {
    super.viewDidLoad()
    backgroundMusic?.play()
}
  

После установки точки останова в lazy var backgroundMusic и ввода кода я получаю следующий результат от отладчика:

0x1029097d8 < 760>: movq 0x69a9 (%rip), %rcx ; прямое смещение поля для TabTab.ViewController.(backgroundMusic.storage в _98A37426C9C75C234890E1E239802C1D) : Swift.Необязательно>

Комментарии:

1. И когда вы используете отладчик для пошагового выполнения своего кода, вы обнаружили …..?

2. Пожалуйста, не игнорируйте ошибку, которую вы кэшировали. По крайней мере, запишите это.

3. Когда я использую отладчик при вводе функции, я получаю это:

4. 0x1029097d8 < 760>: movq 0x69a9 (%rip), %rcx ; прямое смещение поля для TabTab.ViewController.(backgroundMusic.storage в _98A37426C9C75C234890E1E239802C1D) : Swift. Необязательно<Swift. Необязательно<__ObjC. AVAudioPlayer>>

5. Воспроизводится ли она, если поместить файл в корень проекта, а не во вложенную папку? В зависимости от того, как вы добавили аудиофайлы в проект (создавая ссылки на папки или нет), он может не найти их в основном пакете без более полного пути к каталогу.

Ответ №1:

В swift 3

 class MusicHelper {
static let sharedHelper = MusicHelper()
var audioPlayer: AVAudioPlayer?
func playBackgroundMusic() {
    let aSound = NSURL(fileURLWithPath: Bundle.main.path(forResource: "mario", ofType: "mp3")!)

    print(aSound)
    do {
        audioPlayer = try AVAudioPlayer(contentsOf:aSound as URL)
        audioPlayer!.numberOfLoops = -1
        audioPlayer!.prepareToPlay()
        audioPlayer!.play()
    } catch {
        print("Cannot play the file")
    }
}
  

}

и добавьте это в viewDidLoad MusicHelper.sharedHelper.playBackgroundMusic()

Ответ №2:

решена проблема ALHAMDULELLAH только изменением настроек Xcode [![перейдите на страницу настроек>> Возможности>> Фон>> режимы>> Разрешить аудиофайл]