如何在 Swift 中以 wav 格式录制音频?

How to record audio in wav format in Swift?

我到处搜索这个,但找不到合适的方法。我已经成功地以 .wav 格式录制,但问题是,当我尝试从录制的 .wav 文件中读取原始数据时,一些块是错误的 place/aren 根本不存在。

我的录音代码:

    func startRecording(){

    let audioSession = AVAudioSession.sharedInstance()

    try! audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
    try! audioSession.setActive(true)
    audioSession.requestRecordPermission({(allowed: Bool) -> Void in print("Accepted")} )


    let settings: [String : AnyObject] = [
        AVFormatIDKey:Int(kAudioFormatLinearPCM),
        AVSampleRateKey:44100.0,
        AVNumberOfChannelsKey:1,
        AVLinearPCMBitDepthKey:8,
        AVLinearPCMIsFloatKey:false,
        AVLinearPCMIsBigEndianKey:false,
        AVEncoderAudioQualityKey:AVAudioQuality.Max.rawValue
    ]

    let date = NSDate()

    let df = NSDateFormatter()
    df.dateFormat = "yyyy-MM-dd-HH:mm:ss"

    let dfString = df.stringFromDate(date)

    let fullPath = documentsPath.stringByAppendingString("/\(dfString).wav")

    recorder = try! AVAudioRecorder(URL: NSURL(string: fullPath)!, settings: settings)
    recorder.delegate = self
    recorder.prepareToRecord()
    recorder.record()

}

当我打印出录音机音频文件的数据时,我得到奇怪的数字,其中应该写入 'd' 'a' 't' 'a',后面是零。然后,在数据的中间,它出现了。

No 64617461 ('d' 'a' 't' 'a') chunk - 它应该代替 464c4c52

64617461 ('d' 'a' 't' 'a') 在很多零之后的随机点

有没有更好的录制wav文件的方法?我不确定为什么会这样,所以任何帮助将不胜感激。我是否应该以其他格式录制然后将其转换为原始格式?

感谢并抱歉提供了这么多图片。

我认为只有 fmt 块可以保证排在第一位。在 data 块之前有其他块似乎没问题,所以跳过非 data 块。

来自http://soundfile.sapp.org/doc/WaveFormat/

A RIFF file starts out with a file header followed by a sequence of data chunks.

您需要更新解析器:)