AudioQueueEnqueueBuffer への呼び出しが、OSStatus -66686 で失敗しています。このエラー コードはこれまで見たことがなく、どこにも情報がありません。それを NSError に変換し、その説明を出力すると、次のコンソール出力が得られます。
エラー: エラー ドメイン=NSOSStatusErrorDomain コード=-66686 「操作を完了できませんでした。(OSStatus エラー -66686.)」
関連するすべての AudioQueue 初期化コードは次のとおりです。
AudioQueueRef audioQueue;
AudioQueueBufferRef aq_buffer[3];
AudioStreamBasicDescription streamFormat;
streamFormat.mSampleRate = 44100;
streamFormat.mFormatID = kAudioFormatLinearPCM;
streamFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
streamFormat.mBitsPerChannel = 16;
streamFormat.mChannelsPerFrame = 1;
streamFormat.mBytesPerPacket = 2 * streamFormat.mChannelsPerFrame;
streamFormat.mBytesPerFrame = 2 * streamFormat.mChannelsPerFrame;
streamFormat.mFramesPerPacket = 1;
streamFormat.mReserved = 0;
OSStatus err;
err = AudioQueueNewOutput(&streamFormat, AudioPlayCallback, self,
CFRunLoopGetCurrent(), kCFRunLoopCommonModes, 0, &audioQueue);
// Start playback
err = AudioQueueStart(audioQueue, NULL);
// Enqueue buffers
for (int i = 0; i < 3; i++) {
err = AudioQueueAllocateBuffer (audioQueue, 1024, &aq_buffer[i]);
err = AudioQueueEnqueueBuffer (audioQueue, aq_buffer[i], 0, NULL);
NSLog(@"err : %d", err);
NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain
code:err
userInfo:nil];
NSLog(@"Error: %@", [error description]);
}
割り当てたバッファーのサイズを変更しようとしましたが、効果はありません (いずれにせよ、AudioQueueAllocateBuffer の呼び出しは失敗しません)。AudioQueueStart とバッファ割り当ての間で呼び出しの順序を切り替えて、呼び出しをキューに入れようとしましたが、効果がありませんでした。AudioQueue.h のコメントを確認しましたが、何が間違っているのかわかりません。エラーの説明が曖昧すぎて役に立ちません。
AudioQueueEnqueueBuffer 呼び出しが失敗するのはなぜですか?