在模拟器中录制和播放声音效果很好,但在我的 iPhone 中却不行

Posted

技术标签:

【中文标题】在模拟器中录制和播放声音效果很好,但在我的 iPhone 中却不行【英文标题】:Recording and Playing a voice works great in Simulator but not in my iPhone 【发布时间】:2015-11-30 22:06:57 【问题描述】:

我正在使用 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")
    



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

【问题讨论】:

您是否确认在录制时委托方法被调用,并且您的录制首先完全成功? 是的,委托方法被调用,并且在我的 iPhone 中,当我按下记录并停止记录时,没有显示错误。但如果我想玩它,就会出现错误。 @Shripada 你能确保音频文件被创建了吗? 好吧,当我将 print(getFileURL()) 放入设置记录器和创建 soundReorder 之前,它显示以文件名结尾的相同路径。如何确保确实创建了音频文件? @Shripada 【参考方案1】:

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

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

【讨论】:

以上是关于在模拟器中录制和播放声音效果很好,但在我的 iPhone 中却不行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UILocalNotification 中播放录制的声音

iOS - 在录制视频时播放音频/声音

iOS:音频录制设置在模拟器中失败,但在我的设备上没有?

在 Android 上录制和播放声音而不存储临时文件

录制音频,然后使用 AudioRecord、AudioTrack.trouble 播放

UILocalNotifications 播放自定义声音