如何在 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.
您需要更新解析器:)
我到处搜索这个,但找不到合适的方法。我已经成功地以 .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.
您需要更新解析器:)