现在我有一个循环遍历文件播放器音频单元阵列,并告诉他们开始播放音频文件中的位置。 (这是有效的)在同一个循环中,我有以下代码告诉单位何时开始播放(-1使它们在下一个渲染周期中播放)。问题是他们没有在同一时间开始,因为在我有机会告诉第三首曲目之前,第一首曲目开始播放。我要说的是“跟踪一个,你只用5个周期进行比赛,跟踪2你正好用4个周期进行比赛,跟踪3你用3个周期进行比赛......等等他们同时进行比赛。这是正确的方法?如果是这样,你为startTime.mSampleTime设置了什么价值?我没有找到任何文件告诉我如何做到这一点。谢谢
// tell the file player AU when to start playing (-1 sample time means next render cycle)
AudioTimeStamp startTime;
memset (&startTime, 0, sizeof(startTime));
startTime.mFlags = kAudioTimeStampSampleTimeValid;
startTime.mSampleTime = -1;
AudioUnitSetProperty(fileUnitArray[mycount], kAudioUnitProperty_ScheduleStartTimeStamp, kAudioUnitScope_Global, 0, &startTime, sizeof(startTime));
答案 0 :(得分:0)
我无法跟踪有关将mSampleTime设置为任何其他值然后为-1的任何信息(即从下一个周期开始),但我能够解决该问题。使用AudioUnitReset重置文件播放器音频单元,然后使用上面的代码重新启动文件播放器,而不是保持AUGraph运行,我存储当前文件播放器播放头位置,完全停止AUGraph,用当前重新初始化AUGraph玩头位置而不是告诉它从零位开始,然后重新启动AUGRAPH。
答案 1 :(得分:0)
您需要做的是安排从渲染线程播放音频文件。 您可以在不同的线程上加载文件,但是您可以在渲染线程的下一个渲染周期中告诉文件。这样,您的所有文件都将同时启动。