AUGraph中几名球员的同步发挥

时间:2017-10-25 09:51:34

标签: ios objective-c core-audio audiounit audiotoolbox

我使用AUGraph,其中包含几个(例如10个)播放器,混音器和输出。 如果我打开延迟大约0.2秒的玩家 - 没关系,他们都玩,但如果我同时打开它们,只有3-4个玩家玩。

没关系,所有玩家都玩,但有延迟:

    for(int i=0; i<10; i++){
       [players[i] play];
       usleep(200000);
    }

不行,只有2-3名球员参赛,但同步:

    for(int i=0; i<10; i++){
       [players[i] play];
    }

[player play]方法中:

   AudioTimeStamp startTime;
   memset (&startTime, 0, sizeof(startTime));
   startTime.mFlags = kAudioTimeStampSampleTimeValid;
   startTime.mSampleTime = -1;

   AudioUnitSetProperty(audioUnit, 
      kAudioUnitProperty_ScheduleStartTimeStamp, 
      kAudioUnitScope_Global, 
      0, 
      &startTime, 
      sizeof(startTime));

AudioUnitSetProperty返回noErr。

似乎AudioUnitSetProperty中有几个线程存在冲突,我无法控制。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在kAudioUnitProperty_ScheduleStartTimeStamp解决问题之前添加kAudioUnitProperty_ScheduledFilePrime设置。

    UInt32 defaultVal = 0;
    AudioUnitSetProperty(audioUnit,
                         kAudioUnitProperty_ScheduledFilePrime,
                         kAudioUnitScope_Global,
                         0,
                         &defaultVal,
                         sizeof(defaultVal));