Синхронная игра нескольких игроков в AUGraph

Я использую 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 ответ

Решение

Добавление установки kAudioUnitProperty_ScheduledFilePrime до того, как kAudioUnitProperty_ScheduleStartTimeStamp решит проблему.

    UInt32 defaultVal = 0;
    AudioUnitSetProperty(audioUnit,
                         kAudioUnitProperty_ScheduledFilePrime,
                         kAudioUnitScope_Global,
                         0,
                         &defaultVal,
                         sizeof(defaultVal));
Другие вопросы по тегам