0

为了播放文件中的声音片段,我根据这个 SO questionAUAudioFilePlayer中的代码设置了一个包含三个单元、一个单元、一个混音器单元和一个输出单元的音频图。效果很好,可以完美地播放我的声音片段。

然后我添加了另一个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");
4

1 回答 1

0

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

于 2013-07-29T12:54:14.860 回答