我正在尝试使用文件播放器音频设备(kAudioUnitSubType_AudioFilePlayer
)播放多个文件(当然不是同时播放)。这是在iOS上。
所以我已成功打开文件并将其详细信息存储在我使用AudioFileID
设置到音频单元的kAudioUnitProperty_ScheduledFileIDs
数组中。现在我想定义2个ScheduledAudioFileRegion
,每个文件一个,并将它们与文件播放器一起使用...
但我似乎无法找到:
kAudioUnitProperty_ScheduledFileRegion
属性来存储这两个区域(实际上,如何定义每个区域的索引)?kAudioTimeStampSampleTimeValid
参数应启用此功能,但如何定义您想要播放的区域?也许我对使用这个音频单元的方式完全没错,但是文档很难获得,而且我没有找到任何显示在同一个播放器上播放2个区域的例子! 提前谢谢。
答案 0 :(得分:2)
您需要在每次播放文件时安排区域。在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(®ion, 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, ®ion,sizeof(region));