しばらくして、オーディオ ユニットを使って開発していると、低レベルのオーディオ バッファを扱う開発者によく知られているバグがあることがわかりました。
バグは、Mac のバッファ サイズが正しくなく、iDevice の同じソフトウェアが 1024 を表示する 1024 ではなく、512 を表示することです。
質問は、それを解決する方法があるので、Mac でも 1024 ビットのバッファを取得できますか? シミュレーションはデバイスとは異なるため、そのように作業するのは少し難しいです。
これは、マイク入力からバッファをチェックするコールバック関数です:
static OSStatus recordingCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
AudioBuffer buffer;
buffer.mNumberChannels = 1;
buffer.mDataByteSize = inNumberFrames * 2;
buffer.mData = NULL;
AudioBufferList bufferList;
bufferList.mNumberBuffers = 1;
bufferList.mBuffers[0] = buffer;
OSStatus status;
status = AudioUnitRender(audioUnit,
ioActionFlags,
inTimeStamp,
inBusNumber,
inNumberFrames,
&bufferList);
int16_t *q = (int16_t *)(&bufferList)->mBuffers[0].mData;
// inNumberFrames, is 512 on a mac ,and 1024 on a device
(スピーカー出力のコールバックは、ちなみに同じです=512ビット)。
オーディオユニットの設定の一部:
AudioStreamBasicDescription audioFormat;
audioFormat.mSampleRate = 44100.00;//44100.00;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
audioFormat.mFramesPerPacket = 1;
audioFormat.mChannelsPerFrame = 1;
audioFormat.mBitsPerChannel = 16;
audioFormat.mBytesPerPacket = 2;
audioFormat.mBytesPerFrame = 2;
さて、私はここで、誰かがあなたがMac(Retinaは私のものです)にmidiツールのサンプルレートを設定しなければならないと言っているのを見つけました、私はそれをチェックしますが、そこには44100があります. チャネルは 24 ビットです。16 ビットで試しましたが、良い結果は得られませんでした。私のMacではまだ512ビットのバッファサイズです。Mac Retina ディスプレイ 2012 を使用しています。