我到处寻找这个,我找不到合适的方法。我已成功以.wav格式录制,但问题是,当我尝试从录制的.wav文件中读取原始数据时,某些块位于错误的位置/根本不存在。
我录制音频的代码:
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'''t''a'应该被写入,后跟零。然后,在数据的中间,它会出现。
没有64617461('d''''t'''') - 它应该代替464c4c52
64617461('d'''t''t''a')在很多零之后的随机点
是否有更好的录制wav文件的方法?我不确定为什么会发生这种情况,所以任何帮助都会受到赞赏。我是否应该以其他格式录制然后将其转换为原始格式?
感谢并抱歉这么多图片。
答案 0 :(得分:2)
我认为只有fmt
块才能保证首先出现。在data
块之前有其他块看起来很好,所以只需跳过非data
块。
来自http://soundfile.sapp.org/doc/WaveFormat/
RIFF文件以文件头开头,后跟一系列数据块。
您需要更新解析器:)