1
我目前正在開發iPhone上的音頻處理應用程序。它基於Apple的SpeakHere示例代碼,旨在實時音頻處理和回放。代碼在模擬器中運行良好,但在設備上測試時不會回調。模擬器中的AudioQueue回調,但不在設備上
回調函數是這樣的:
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示例代碼。
那麼這個奇怪的行爲有什麼問題呢?任何見解將不勝感激。如果需要更多信息,請讓我知道。
非常感謝。
乾杯,
曼卡
您正在初始化音頻會話並將其配置爲播放和錄製嗎? – hotpaw2 2011-03-07 12:43:06
是的,AudioSessionSetActive()設置爲true,就像示例代碼一樣。 – Manca 2011-03-07 13:07:20