1

现在我有一个循环遍历文件播放器音频单元的数组,并告诉他们在音频文件中的哪个位置开始播放。(这有效)在同一个循环中,我有以下代码来告诉单元何时开始播放(-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));
4

2 回答 2

0

我无法找到有关将 mSampleTime 设置为任何其他值然后 -1(即从下一个周期开始)的任何信息,但我能够解决该问题。我没有保持 AUGraph 运行,而是使用 AudioUnitReset 重置文件播放器音频单元,然后使用上面的代码重新启动文件播放器,我存储当前文件播放器播放头位置,完全停止 AUGraph,用当前的重新初始化 AUGraph播放头位置,而不是告诉它从零位置开始,然后重新启动 AUGRAPH。

于 2012-08-01T14:22:16.980 回答
0

您需要做的是安排从渲染线程播放音频文件。您在不同的线程上加载文件,但您告诉文件在渲染线程的下一个渲染周期中播放。这样,您的所有文件都将同时启动。

于 2013-12-02T11:28:21.337 回答