如何在 coreaudio 中为 AudioStreamBasicDescription 指定比特率?

How to specify bitrate for an AudioStreamBasicDescription in coreaudio?

我正在使用音频单元录制一些 PCM 音频。在回调中,当我有 30 秒的音频时,我想将一个 8000Hz AAC 编码的文件写入磁盘,比特率为 12kb/s。

这是我使用的 AudioStreamBasicDescription,但我的输出最终为 40 kb/s。我的问题是,我可以更改一些参数来降低比特率吗?如果可以,我应该修改哪些参数?

    // specify the M4A
    AudioStreamBasicDescription outputFormat = {0};

    outputFormat.mSampleRate         = 8000.0;
    outputFormat.mFormatID           = kAudioFormatMPEG4AAC;
    outputFormat.mFormatFlags        = kMPEG4Object_AAC_Main;
    outputFormat.mChannelsPerFrame   = 1;

请参阅 AudioStreamBasicDescription 中的字段 mBitsPerChannel

The number of bits for one audio sample. For example, for linear PCM audio using the kAudioFormatFlagsCanonical format flags, calculate the value for this field as follows:

mBitsPerChannel = 8 * sizeof (AudioSampleType);

Set this field to 0 for compressed formats.

https://developer.apple.com/library/ios/documentation/MusicAudio/Reference/CoreAudioDataTypesRef/#//apple_ref/c/tdef/AudioStreamBasicDescription

比特率等于 sampleRate * bitDepth * numberOfChannel,这样您就可以通过为这 3 个变量选择正确的值来设置您的比特率。 对于 44100kHz、每个样本 16 位和立体声的 Wave,您将拥有: 16 * 44100 * 2 = 1 411 200 bit/sec