Edit 3
После уточнения комментариев OP пишет Command Line Application
...
Убедитесь, что ваш аудиофайл включен следующим образом:
Тогда (очень упрощенный) пример тестового кода может быть:
import Foundation
import AVFoundation
class AudioTest {
var sound = AVAudioPlayer()
func testMP3() -> Void {
let bundle = Bundle.main
let url = bundle.url(forResource: "files/this", withExtension: "mp3")
if let u = url {
do {
sound = try AVAudioPlayer(contentsOf: u, fileTypeHint: AVFileType.mp3.rawValue)
sound.prepareToPlay()
sound.play()
} catch let error {
print(error.localizedDescription)
}
} else {
print("Could not find resource!")
}
}
}
Я разместил здесь полный (простой) пример проекта : https://github.com/DonMag/TestMP3
Следующее основано на использовании в приложении iOS
Убедитесь, что ваш объект AVAudioPlayer
не объявляется, где вы пытаетесь воспроизвести свой звук. Он выйдет go за пределы, прежде чем сможет воспроизвести звук.
Вот текущий способ воспроизведения звука, например, при нажатии кнопки:
// declared at class-level
var sound = AVAudioPlayer()
@IBAction func didTap(_ sender: Any) {
// abort with error message if this.mp3 is not found in the bundle
guard let url = Bundle.main.url(forResource: "this", withExtension: "mp3") else {
fatalError("Could not get URL for mp3 file!")
}
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
try AVAudioSession.sharedInstance().setActive(true)
sound = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.mp3.rawValue)
sound.play()
} catch let error {
print(error.localizedDescription)
}
}
Изменить
Если этот код останавливается и выводит Could not get URL for mp3 file!
в консоль отладки, то ваш mp3-файл не включен в пакет.
Выберите его в Project Navigator и убедитесь, что ваша цель отмечена под Target Membership
на панели File Inspector. Также проверьте:
- Настройки проекта
- Фазы сборки
- Копировать ресурсы пакета
и убедитесь, что он указан там.
Edit 2
Предполагая, что вы запускаете это на Simulator ...
Добавьте эти две строки перед guard let url - ...
:
let path = Bundle.main.path(forResource: "Info", ofType: ".plist")
print(path)
Это должно напечатать длинный путь, который выглядит примерно так:
/Users/yourname/Library/Developer/CoreSimulator/Devices/C55189E0-FDC2-4D93-A1DA-D52EF2EAE905/data/Containers/Bundle/Application/F50C01D1-FF99-4592-8569-120E7362E23B/xcodeProject.app/Info.plist
Скопируйте этот путь, go в окно Finder, выберите Go -> Go to Folder...
и вставьте весь этот путь. Посмотрите на найденные там файлы и проверьте, существует ли ваш this.mp3
.
Если нет, удалите this.mp3
из своего проекта, снова добавьте его и попробуйте еще раз.