diff --git a/Audio/Output/OutputAVFoundation.m b/Audio/Output/OutputAVFoundation.m index f88332f2e..c43ea55e2 100644 --- a/Audio/Output/OutputAVFoundation.m +++ b/Audio/Output/OutputAVFoundation.m @@ -340,6 +340,7 @@ current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, cons lastCheckpointPts = kCMTimeZero; secondsLatency = 1.0; started = NO; + restarted = NO; [self synchronizerBlock]; } @@ -989,8 +990,13 @@ current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, cons if(latencySeconds < 0) latencySeconds = 0; latencyVis = latencySeconds - latencyVis; - if(latencyVis < 0) - latencyVis = 0; + if(latencyVis < 0 || latencyVis > 30.0) { + if(latencyVis > 30.0 && !self->restarted) { + self->restarted = YES; + [outputController setShouldReset:YES]; + } + latencyVis = 0.0; + } *latencySecondsOut = latencySeconds; [visController postLatency:latencyVis]; }]; diff --git a/Audio/Visualization/VisualizationController.m b/Audio/Visualization/VisualizationController.m index 36b480941..fd6f8783a 100644 --- a/Audio/Visualization/VisualizationController.m +++ b/Audio/Visualization/VisualizationController.m @@ -40,7 +40,7 @@ static VisualizationController *_sharedController = nil; @synchronized(self) { if(self->sampleRate != sampleRate) { self->sampleRate = sampleRate; - int visAudioSize = (int)(sampleRate * 30.0); + int visAudioSize = (int)(sampleRate * 45.0); void *visAudio = realloc(self->visAudio, visAudioSize * sizeof(float)); if(visAudio && visAudioSize) { if(visAudioSize > self->visAudioSize) { @@ -71,7 +71,7 @@ static VisualizationController *_sharedController = nil; - (void)postLatency:(double)latency { self->latency = latency; - assert(latency < 30.0); + assert(latency < 45.0); } - (double)readSampleRate {