2017-10-25 14 views
0

Ich benutze AUGraph, die mehrere (10, zum Beispiel) Player, Mixer und Ausgang enthält. Wenn ich Spieler mit einer Verzögerung von etwa 0,2 Sekunden einschalte - es ist in Ordnung, sie alle spielen, aber wenn ich sie gleichzeitig einschalte, spielen nur 3-4 Spieler.Synchrones Abspielen mehrerer Player in AUGraph

Es ist in Ordnung, alle Spieler spielen, aber mit Verzögerung:

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

Es ist nicht in Ordnung, nur 2-3 Spieler spielen, aber synchron:

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

In [player play] Methode:

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

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

AudioUnitSetProperty gibt noErr zurück.

Es scheint, dass es einen Konflikt in AudioUnitSetProperty mit mehreren Threads gibt, die ich nicht kontrollieren kann.

Irgendwelche Ideen?

Antwort

0

Das Hinzufügen von kAudioUnitProperty_ScheduledFilePrime-Setup vor kAudioUnitProperty_ScheduleStartTimeStamp löste ein Problem.

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