为了播放文件中的声音片段,我根据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");
答案 0 :(得分:0)
问题与我使用的调音台有关。最初我使用了我复制的代码中的AU3DMixerEmbedded
。当我用MultiChannelMixer
替换那个混音器时,一切都开始正常了。我仍然不知道AU3DMixerEmbedded
为什么不起作用。