3

iOS ではkAudioUnitSubType_AudioFilePlayer、AUNode によってラップされ、オーディオ グラフ内のマルチチャンネル ミキサーとリモート IO (出力) に接続されたタイプの Audio Unit があります。

グラフの再生中にファイルをループし、AudioFilePlayer がファイルの最後に到達したタイミングを判断できるようにして、ループの次の反復を開始する前に操作を実行できるようにします。

AudioUnitProperties.h を確認すると、完了コールバックがありmCompletionProcますが、実際にオーディオの再生が終了したときではなく、ディスクがファイルを読み取って再生をスケジュールしたときにのみ呼び出されます。

そこで、オーディオ (パケット/フレーム) の長さをプロパティとして保存し、ミキサーの別の入力に接続された入力コールバックで、ファイルの最後にいるかどうかを確認することを検討しました。しかし、そのコールバックはすべてのフレームで呼び出されるわけではないため、ファイルの実際の末尾を見逃す可能性があります。

これにどのようにアプローチできますか?

4

2 に答える 2

1

ScheduledAudioFileRegion.mCompletionProc を設定してください。

///

ScheduledAudioFileRegion playRegion;
playRegion.mTimeStamp.mFlags = kAudioTimeStampSampleTimeValid;
playRegion.mTimeStamp.mSampleTime = 0;
playRegion.mCompletionProc = XXXXXXXXXXXXXXXX(you proc);
playRegion.mCompletionProcUserData = NULL;
playRegion.mAudioFile = mAudioFile;
playRegion.mLoopCount = 0;
playRegion.mStartFrame = mStartSampleFrame;
playRegion.mFramesToPlay = UInt32(-1);

err = AudioUnitSetProperty(mFilePlayerAU, kAudioUnitProperty_ScheduledFileRegion,
                           kAudioUnitScope_Global, 0, &playRegion, sizeof(playRegion));
于 2015-03-19T15:33:15.647 に答える