如何在Swift中以wav格式录制音频?
问题描述:
我到处搜索过这个,我找不到正确的方法。我成功地以.wav格式录制,但问题是,当我尝试从录制的.wav文件中读取原始数据时,有些块位于错误的位置/根本就没有。如何在Swift中以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”“A”“T”“A”应该写,由以下零。然后,在数据中间出现。
否64617461( 'd' 'A' 'T' 'a')的块 - 它应该是代替464c4c52
64617461( 'd' 'A' 'T' 'a')的在很多个零后,随机点
是否有更好的录音wav文件的方式?我不知道为什么会发生这种情况,所以任何帮助,将不胜感激。我应该以其他格式录制,然后将其转换为原始格式?
非常感谢,并为这么多的图像抱歉。
答
我认为只有fmt
大块保证是第一位的。看起来在data
区块之前有其他区块可以,所以只需跳过非data
区块即可。
从http://soundfile.sapp.org/doc/WaveFormat/
甲RIFF文件开始时与文件头,后跟数据块的序列。
你需要更新你的解析器:)
你可以添加一个链接到一个坏的wav文件? –
@RhythmicFistman https://www.dropbox.com/s/n1fdsu7n2exjr1t/pg-proj-snimak.wav?dl=0这只是一个随机的例子,我记录的每一个wav都有同样的问题 – Uros19
那个wav没什么错 - 听起来你的解析器有问题。你如何解析它们? –