AUAudioFilePlayer在播放后使整个图形静音

时间:2013-07-06 09:21:50

标签: ios core-audio audiounit

为了播放文件中的声音片段,我根据this SO question中的代码设置了一个包含三个单位的音频图表,一个AUAudioFilePlayer单位,一个混音器单元和一个输出单元。这很好用,完美播放我的声音碎片。

然后我添加了另一个AUAudioFilePlayer单位,并将其输出也输入到混音器中,这样我就可以并行播放两个文件并将它们混合在一起。这也很好,只要我在两个AUAudioFilePlayer单元上保持调度片段(也就是说,我有一个定时器,每2秒调度一个新的2秒片段)。但是一旦我停止在AUAudioFilePlayer单位之一上安排片段,整个图表就会沉默。我的计时器仍然很乐意在第一个AUAudioFilePlayer单元上安排一个新的片段,我没有在任何系统调用上得到任何错误,但没有声音通过。

有人知道如何防止这种情况吗?

我尝试在第二个播放器上执行AudioUnitReset,甚至用AUGraphDisconnectNodeInput将其从图表中删除,但都无济于事。

我安排片段的代码在这里:

CheckError(AudioUnitReset(fileAU, kAudioUnitScope_Global, 0), "AudioUnitReset");

ScheduledAudioFileRegion rgn;
memset (&rgn.mTimeStamp, 0, sizeof(rgn.mTimeStamp));
rgn.mTimeStamp.mFlags = kAudioTimeStampSampleTimeValid;
rgn.mTimeStamp.mSampleTime = -1;
rgn.mCompletionProc = NULL;
rgn.mCompletionProcUserData = NULL;
rgn.mAudioFile = inputFile;
rgn.mLoopCount = 0;
rgn.mStartFrame = startFrame;
rgn.mFramesToPlay = 88200;

CheckError(AudioUnitSetProperty(fileAU, kAudioUnitProperty_ScheduledFileRegion, kAudioUnitScope_Global, 0,&rgn, sizeof(rgn)), "AudioUnitSetProperty[kAudioUnitProperty_ScheduledFileRegion] failed");

1 个答案:

答案 0 :(得分:0)

问题与我使用的调音台有关。最初我使用了我复制的代码中的AU3DMixerEmbedded。当我用MultiChannelMixer替换那个混音器时,一切都开始正常了。我仍然不知道AU3DMixerEmbedded为什么不起作用。