录制和播放语音在模拟器中运行良好,但在iPhone中无效

时间:2015-11-30 22:06:58

标签: swift swift2 avaudioplayer

我使用AVFoundation录制和播放语音。该应用程序在模拟器上运行良好。然而,在我的iPhone 5S(运行IOS 9)中,它记录了语音问候,但它没有播放语音。播放录制的声音时我总是收到错误(操作无法完成。(OSStatus错误-39。)"))和下一行(致命错误:在解开Optional值时意外发现nil)。

然后,我在这行代码中发现了错误:

self._SoundPlayer = try AVAudioPlayer(contentsOfURL: getFileURL())

"它总是会抛出错误"

这是getFileURL()代码:

func getCacheDirectory() -> String {

    let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)

    return paths[0]

}

func getFileURL() -> NSURL{
    let path  = (getCacheDirectory() as NSString).stringByAppendingPathComponent(fileName)

    let filePath = NSURL(fileURLWithPath: path)

    return filePath
}

这是设置录制文件代码:

    func setupRecorder(){

    let recordSettings = [AVSampleRateKey : NSNumber(float: Float(44100.0)),
        AVFormatIDKey : NSNumber(int: Int32(kAudioFormatMPEG4AAC)),
        AVNumberOfChannelsKey : NSNumber(int: 2),
        AVEncoderAudioQualityKey : NSNumber(int: Int32(AVAudioQuality.High.rawValue)),
        AVEncoderBitRateKey : NSNumber(int: Int32(320000))]

    do {
        _soundRecorder = try AVAudioRecorder(URL: getFileURL(), settings: recordSettings)
        _soundRecorder.delegate=self
        _soundRecorder.prepareToRecord()
        print(getFileURL())

    }
    catch {
        print("error")
    }


}

"注意: 当我使用打印线作为路径创建录制文件和播放文件完全相同但我不知道为什么它会抛出错误"

1 个答案:

答案 0 :(得分:1)

我删除了getCacheDirectory()和getFileURL()方法,然后我添加了这段代码而且效果很好

let fileManager =      NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask).first
    let soundURL = fileManager!.URLByAppendingPathComponent("audio.m4a")