如何在 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.
比特率等于 sampleRate * bitDepth * numberOfChannel
,这样您就可以通过为这 3 个变量选择正确的值来设置您的比特率。
对于 44100kHz、每个样本 16 位和立体声的 Wave,您将拥有:
16 * 44100 * 2 = 1 411 200 bit/sec
我正在使用音频单元录制一些 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.
比特率等于 sampleRate * bitDepth * numberOfChannel
,这样您就可以通过为这 3 个变量选择正确的值来设置您的比特率。
对于 44100kHz、每个样本 16 位和立体声的 Wave,您将拥有:
16 * 44100 * 2 = 1 411 200 bit/sec