2

アプリケーションでAudio Queue Servicesを使用しています。バッファーを割り当てるときに、バッファー サイズを 30000 サンプルに設定します。

AudioQueueAllocateBuffer(mQueue, 30000, &mBuffers[i]);

ただし、コールバックの後続の呼び出しは、次のinNumberPacketDescriptionsで行われます。

30000
30000
30000
26928
30000
30000

それらは常に 30000 に等しいとは限りません。なぜですか?

レコード形式の構成 ( CAStreamBasicDescriptionを使用):

mRecordFormat.mSampleRate = kSampleRate;    
mRecordFormat.mChannelsPerFrame = 1;
mRecordFormat.mFormatID = kAudioFormatLinearPCM;
mRecordFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
mRecordFormat.mBitsPerChannel = 16;
mRecordFormat.mBytesPerPacket = mRecordFormat.mBytesPerFrame = (mRecordFormat.mBitsPerChannel / 8) * mRecordFormat.mChannelsPerFrame;
mRecordFormat.mFramesPerPacket = 1;

3 つのバッファが使用されます。

4

1 に答える 1

3

編集: 2 のべき乗でないオーディオ バッファが提示されると、iOS がびっくりして自然にバッファ サイズを変更するのを見てきました。(別のSOの質問はこれを参照しています)とにかく、

30000は

(a) 巨大なバッファサイズ、および

(b) バッファに使用する奇妙な数値。通常、それらは 2 の累乗です。つまり*=2、64 から、つまり 64、128、256、512、1024、2048、4096 です。私は 4096 より高いものを見たことがなく、私は多くのオーディオ作業を行っています。

異常に大きなバッファを使用する特別な理由がある場合は、nextPowerOfTwo便利な関数を使用するか、自分で数学をハードコードすることができます。

于 2011-09-12T14:12:17.873 に答える