使用AVAudioSession录制-为什么我获得的字节数比预期的多?

k2arahey  于 2023-01-10  发布在  iOS
关注(0)|答案(1)|浏览(96)

我正在按如下方式设置录制会话:

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.
我如何避免这种情况?问题是我如何设置记录还是我如何检索数据?

bgtovc5b

bgtovc5b1#

AVAudioRecorder中的数据不仅仅是原始字节。它在一个容器中,在本例中是Apple Core Audio Format或CAF。额外的4kB是文件头和块头,加上填充(“空闲”块)。
我不相信有任何方法可以让AVAudioRecorder输出没有格式的音频样本。You can find many versions of that question.您要么需要使用像AVAudioSinkNode这样的低级工具,要么在写入文件后读取文件并提取样本。
(Note你的AVEncoderBitRateKeyAVEncoderAudioQualityKey键在这里不适用,因为这是LPCM,但是它们不会伤害任何东西;它们就被忽略了。)

相关问题