为了播放文件中的声音片段,我根据这个 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");