作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我到处都在搜索这个,但找不到合适的方法。我已经成功地以 .wav 格式录制,但问题是,当我尝试从录制的 .wav 文件中读取原始数据时,一些 block 在错误的位置/根本不存在。
我的录音代码:
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') block - 它应该代替 464c4c52
64617461 ('d' 'a' 't' 'a') 在很多零之后的随机点
有没有更好的方法来录制wav文件?我不确定为什么会这样,所以任何帮助将不胜感激。我是否应该以其他格式录制然后将其转换为原始格式?
感谢并抱歉提供了这么多图片。
最佳答案
我认为只有 fmt
block 可以保证排在第一位。在 data
block 之前有其他 block 似乎没问题,所以跳过非 data
block 。
来自 http://soundfile.sapp.org/doc/WaveFormat/
A RIFF file starts out with a file header followed by a sequence of data chunks.
你需要更新你的解析器:)
关于ios - 如何在 Swift 中以 wav 格式录制音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34275577/
我是一名优秀的程序员,十分优秀!