如何在 Swift 应用程序中访问声音文件

How to access sound files in Swift app

所以我正在创建一个 iPhone 应用程序来下载 Swift 中的声音文件,我有一个问题。使用 Xcode 和 iOS 模拟器,我能够成功地将我需要的音频文件下载到模拟器上。我发现正在下载的文件在我的 OSx 机器上的这个目录中:

OS X -> 用户 -> "My name" -> 库 -> 开发人员 -> CoreSimulator -> 设备 -> 96CDD... -> 数据 -> 6B742... ->文件

现在我的问题是,我知道我在应用内的设备上有音频文件,但我如何访问它们然后从应用本身播放它们?我试图只使用 AVAudioPlayer,但我一直未能成功访问该文件。这是我正在尝试 运行 的代码,它位于 viewDidLoad 函数内部:

    var playYoda = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Documents/do_or_do_not", ofType: "wav")!)
    println(playYoda)

    AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
    AVAudioSession.sharedInstance().setActive(true, error: nil)

    var error:NSError?
    audioPlayer = AVAudioPlayer(contentsOfURL: playYoda, error: &error)
    audioPlayer.prepareToPlay()
    audioPlayer.play()

我的所有代码都可以编译,但是当我启动模拟器时,我收到此错误:致命错误:在展开可选值时意外发现 nil 就在第一个我链接的代码行 (var playYoda = ...).

不知道是我的音频文件的路径不对,还是我AVAudioPlayer做错了。任何帮助将不胜感激。

怎么样:

let fileManager = NSFileManager.defaultManager()

let urls = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)

if let documentDirectoryURL: NSURL = urls.first as? NSURL {
    let playYoda = documentDirectoryURL.URLByAppendingPathComponent("do_or_do_not.wav")

    println("playYoda is \(playYoda)")
}

您还可以执行以下操作:

打开您的 Xcode 项目,在项目导航器中 select 您的音频文件,然后点击删除(确保将它们移动到垃圾箱,而不仅仅是删除引用)。

然后转到“文件”>“将文件添加到 "Your app"”。

Select 您要导入的音频文件,并确保选中默认值("Copy items if needed"、"Create groups" 和 "Add files to target: Your App")。

文件路径写:

var playYoda = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("do_or_do_not", ofType: "wav")!)