如何在 Swift 应用程序中访问声音文件
Posted
技术标签:
【中文标题】如何在 Swift 应用程序中访问声音文件【英文标题】:How to access sound files in Swift app 【发布时间】:2015-04-22 22:11:26 【问题描述】:所以我正在创建一个在 Swift 中下载声音文件的 iPhone 应用程序,我有一个问题。使用 Xcode 和 ios 模拟器,我能够成功地将所需的音频文件下载到模拟器上。我发现正在下载的文件在我的 OSx 机器上的这个目录中:
OS X -> 用户 -> “我的名字” -> 库 -> 开发人员 -> 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()
我的所有代码都编译了,但是当我启动模拟器时,我收到了这个错误:fatal error: unexpectedly found nil while unwrapping an Optional value就在我的第一行代码链接(var playYoda = ...)。
我不知道这是因为我的音频文件路径错误,还是我在使用 AVAudioPlayer 时做错了什么。任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:怎么样:
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)")
【讨论】:
所以 URL 提供了文件的正确路径,但是我将如何在 AVAudioPlayer 中使用这个新 URL 来播放文件? 和以前一样:audioPlayer = AVAudioPlayer(contentsOfURL: playYoda, error: &error)
非常感谢。这对我很有帮助
不知道文件名怎么办?即你想展示一个可用文件的列表,然后当用户点击一个你播放它?
您必须向display the list of available files and then let the user choose 编写一些代码(我在此处包含的链接应该可以帮助您入门)。用户选择后,您可以获取结果并将其传递给我在回答中提出的 API。【参考方案2】:
您还可以这样做:
打开您的 Xcode 项目,在项目导航器中选择您的音频文件,然后点击删除(确保将它们移动到垃圾箱,而不仅仅是删除引用)。
然后转到文件 > 将文件添加到“您的应用”。
选择您要导入的音频文件,并确保选中默认设置(“如果需要,复制项目”、“创建组”和“将文件添加到目标:您的应用”)。
对于文件路径写入:
var playYoda = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("do_or_do_not", ofType: "wav")!)【讨论】:
以上是关于如何在 Swift 应用程序中访问声音文件的主要内容,如果未能解决你的问题,请参考以下文章
如何让背景音乐继续播放而我的应用程序在使用 Swift 时仍然播放其声音