#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 [![перейдите на страницу настроек>> Возможности>> Фон>> режимы>> Разрешить аудиофайл]