ファイルからサウンド フラグメントを再生するために、この SO questionAUAudioFilePlayer
のコードに従って、ユニット、ミキサー ユニット、出力ユニットの3 つのユニットでオーディオ グラフをセットアップしました。それはうまく機能し、私の音の断片を完璧に再生します。
次に、別のユニットを追加AUAudioFilePlayer
し、その出力をミキサーにも供給して、2 つのファイルを並行して再生し、それらを一緒にミックスできるようにしました。これも、両方のユニットでフラグメントをスケジュールし続ける限りAUAudioFilePlayer
(つまり、2 秒ごとに新しい 2 秒のフラグメントをスケジュールするタイマーがある場合)、問題なく機能します。しかし、ユニットの 1 つでフラグメントのスケジューリングを停止するとすぐに、AUAudioFilePlayer
グラフ全体が静かになります。私のタイマーはまだ最初のAUAudioFilePlayer
ユニットで新しいフラグメントを喜んでスケジュールしており、どのシステム コールでもエラーは発生しませんが、音は聞こえません。
これを防ぐ方法を知っている人はいますか?
2 番目のプレーヤーでを実行しようとし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");