我正在按如下方式设置录制会话:
NSString *audioFilePath = [NSTemporaryDirectory() stringByAppendingString:@"temp.bin"];
_audioFileURL = [NSURL fileURLWithPath:audioFilePath];
NSDictionary *recordSettings = @{
AVFormatIDKey: @(kAudioFormatLinearPCM),
AVLinearPCMIsBigEndianKey: @NO,
AVLinearPCMIsFloatKey: @NO,
AVEncoderAudioQualityKey: @(AVAudioQualityHigh),
AVEncoderBitRateKey: @128000,
AVLinearPCMBitDepthKey: @32,
AVNumberOfChannelsKey: @2,
AVSampleRateKey: @44100.0f
};
据此,字节数应为:
第一个月
但实际上当我得到记录的数据时:
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag
{
if (flag) {
NSData *recordedAudioData = [NSData dataWithContentsOfURL:_audioFileURL options:0 error:&error];
NSUInteger recordedAudioLength = [recordedAudioData length];
recordedAudioLenght
稍大一些:709696 bytes
.
我如何避免这种情况?问题是我如何设置记录还是我如何检索数据?
1条答案
按热度按时间bgtovc5b1#
AVAudioRecorder中的数据不仅仅是原始字节。它在一个容器中,在本例中是Apple Core Audio Format或CAF。额外的4kB是文件头和块头,加上填充(“空闲”块)。
我不相信有任何方法可以让AVAudioRecorder输出没有格式的音频样本。You can find many versions of that question.您要么需要使用像AVAudioSinkNode这样的低级工具,要么在写入文件后读取文件并提取样本。
(Note你的
AVEncoderBitRateKey
和AVEncoderAudioQualityKey
键在这里不适用,因为这是LPCM,但是它们不会伤害任何东西;它们就被忽略了。)