0

ファイルからサウンド フラグメントを再生するために、この 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");
4

1 に答える 1