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