Visualization: No longer throw an assert on error

If latency is greater than the buffer size, or somehow less than zero,
instead simply emit silent visualization data until latency recovers.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
This commit is contained in:
Christopher Snowhill 2025-07-01 04:48:07 -07:00
parent c3511ea5e7
commit 98d898a715

View file

@ -16,6 +16,7 @@
float *visAudio; float *visAudio;
int visAudioCursor, visAudioSize; int visAudioCursor, visAudioSize;
uint64_t visSamplesPosted; uint64_t visSamplesPosted;
BOOL ignoreLatency;
} }
static VisualizationController *_sharedController = nil; static VisualizationController *_sharedController = nil;
@ -35,6 +36,7 @@ static VisualizationController *_sharedController = nil;
visAudio = NULL; visAudio = NULL;
visAudioSize = 0; visAudioSize = 0;
latency = 0; latency = 0;
ignoreLatency = YES;
} }
return self; return self;
} }
@ -48,6 +50,7 @@ static VisualizationController *_sharedController = nil;
latency = 0; latency = 0;
visAudioCursor = 0; visAudioCursor = 0;
visSamplesPosted = 0; visSamplesPosted = 0;
ignoreLatency = YES;
if(visAudio && visAudioSize) { if(visAudio && visAudioSize) {
bzero(visAudio, sizeof(float) * visAudioSize); bzero(visAudio, sizeof(float) * visAudioSize);
} }
@ -99,7 +102,7 @@ static VisualizationController *_sharedController = nil;
- (void)postLatency:(double)latency { - (void)postLatency:(double)latency {
self->latency = latency; self->latency = latency;
assert(latency < 45.0); ignoreLatency = (latency >= 45.0) || (latency < 0.0);
} }
- (double)readSampleRate { - (double)readSampleRate {
@ -115,7 +118,7 @@ static VisualizationController *_sharedController = nil;
- (void)copyVisPCM:(float *_Nullable)outPCM visFFT:(float *_Nullable)outFFT latencyOffset:(double)latency { - (void)copyVisPCM:(float *_Nullable)outPCM visFFT:(float *_Nullable)outFFT latencyOffset:(double)latency {
if(!outPCM && !outFFT) return; if(!outPCM && !outFFT) return;
if(!visAudio || !visAudioSize) { if(ignoreLatency || !visAudio || !visAudioSize) {
if(outPCM) bzero(outPCM, sizeof(float) * 4096); if(outPCM) bzero(outPCM, sizeof(float) * 4096);
if(outFFT) bzero(outFFT, sizeof(float) * 2048); if(outFFT) bzero(outFFT, sizeof(float) * 2048);
return; return;