1

ファイルプレーヤーオーディオユニット()を使用して複数のファイルを再生しようとしていkAudioUnitSubType_AudioFilePlayerます(もちろん、同時にではありません)。それはiOSです。そのため、ファイルを正常に開き、の詳細を、AudioFileIDを使用してオーディオユニットに設定したの配列に保存しましたkAudioUnitProperty_ScheduledFileIDs。ここで、ファイルごとに1つずつ、2を定義ScheduledAudioFileRegionし、ファイルプレーヤーで使用します...

しかし、私は見つけることができないようです:

  • これらの2つの領域を格納するプロパティを設定する方法kAudioUnitProperty_ScheduledFileRegion(実際には、各領域のインデックスを定義する方法)?
  • 特定のリージョンの再生をトリガーする方法..私の推測では、kAudioTimeStampSampleTimeValidパラメーターでこれを有効にする必要がありますが、再生するリージョンを定義するにはどうすればよいですか?

このオーディオユニットの使い方が間違っているかもしれませんが、ドキュメントを入手するのは非常に難しく、同じプレーヤーで2つのリージョンを再生する例は見つかりませんでした。前もって感謝します。

4

1 に答える 1

3

ファイルを再生するたびにリージョンをスケジュールする必要があります。ScheduledAudioFileRegionでは、再生するようにAudioFileIDを設定する必要があります。再生は、単位(サンプル)の現在の時刻がスケジュールされた領域のサンプル時刻以上になると開始されます。

例:

// get current unit time
AudioTimeStamp timeStamp;
UInt32 propSize = sizeof(AudioTimeStamp);
AudioUnitGetProperty(m_playerUnit, kAudioUnitProperty_CurrentPlayTime, kAudioUnitScope_Global, 0, &timeStamp, &propSize);

// when to start playback
timeStamp.mSampleTime += 100;

// schedule region

ScheduledAudioFileRegion region;
memset(&region, 0, sizeof(ScheduledAudioFileRegion));
region.mAudioFile = ...; // your AudioFileID
region.mFramesToPlay = ...; // count of frames to play
region.mLoopCount = 1;
region.mStartFrame = 0;
region.mTimeStamp = timeStamp;


AudioUnitSetProperty(m_playerUnit, kAudioUnitProperty_ScheduledFileRegion, kAudioUnitScope_Global, 0, &region,sizeof(region));
于 2012-11-18T20:14:18.160 に答える