Синхронная игра нескольких игроков в 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));