1

我正在尝试使用文件播放器音频单元 ( kAudioUnitSubType_AudioFilePlayer) 播放多个文件(当然不是同时播放)。那是在iOS上。AudioFileID所以我已经成功地打开了文件并将它们的详细信息存储在我设置为音频单元的数组中kAudioUnitProperty_ScheduledFileIDs。现在我想定义 2 ScheduledAudioFileRegion,每个文件一个,并将它们与文件播放器一起使用...

但我似乎无法找到:

  • 如何设置kAudioUnitProperty_ScheduledFileRegion属性来存储这2个区域(实际上是如何定义每个区域的索引)?
  • 如何触发特定区域的播放.. 我的猜测是该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 回答