私は現在、iPhone のオーディオ処理アプリに取り組んでいます。これは、Apple の SpeakHere サンプル コードに基づいており、リアルタイムのオーディオ処理と再生を目的としています。コードはシミュレーターではうまく機能しますが、デバイスでテストするとコールバックしません。
コールバック関数は次のようになります。
void AQPlayer::AQBufferCallback(void * inUserData,
AudioQueueRef inAQ,
AudioQueueBufferRef inCompleteAQBuffer)
{
AQPlayer *THIS = (AQPlayer *)inUserData;
if (THIS->mIsDone) return;
UInt32 numBytes;
UInt32 nPackets = THIS->GetNumPacketsToRead();
OSStatus result = AudioFileReadPackets(THIS->GetAudioFileID(), false, &numBytes, inCompleteAQBuffer->mPacketDescriptions, THIS->GetCurrentPacket(), &nPackets,
inCompleteAQBuffer->mAudioData);
if (result)
printf("AudioFileReadPackets failed: %d", (int)result);
if (nPackets > 0) {
inCompleteAQBuffer->mAudioDataByteSize = numBytes;
inCompleteAQBuffer->mPacketDescriptionCount = nPackets;
//Buffer Modification
SInt16 *testBuffer = (SInt16*)inCompleteAQBuffer->mAudioData;
for (int i = inCompleteAQBuffer->mAudioDataByteSize/sizeof(SInt16); i > 0; i --)
{
//printf("before modification %d", (int)*testBuffer);
*testBuffer = *testBuffer/2; //Simplest processing
//printf("after modification %d", (int)*testBuffer);
testBuffer++;
}
//Enqueue Buffer
AudioQueueEnqueueBuffer(inAQ, inCompleteAQBuffer, 0, NULL);
THIS->mCurrentPacket = (THIS->GetCurrentPacket() + nPackets);
}
その他の部分は、SpeakHere サンプル コードと同じです。
では、この奇妙な動作に関連する問題は何ですか? どんな洞察も高く評価されます。さらに情報が必要な場合はお知らせください。
どうもありがとうございました。
乾杯、
マンカ