Compare commits

..

No commits in common. "4bb24c3324190305b82c7aaac82169d8f120c548" and "5cbebd0c43fced1f519bdd022358a2ce9d653de8" have entirely different histories.

View file

@ -17,7 +17,6 @@
int visAudioCursor, visAudioSize;
uint64_t visSamplesPosted;
BOOL ignoreLatency;
double sinePhase;
}
static VisualizationController *_sharedController = nil;
@ -38,7 +37,6 @@ static VisualizationController *_sharedController = nil;
visAudioSize = 0;
latency = 0;
ignoreLatency = YES;
sinePhase = 0.0;
}
return self;
}
@ -53,7 +51,6 @@ static VisualizationController *_sharedController = nil;
visAudioCursor = 0;
visSamplesPosted = 0;
ignoreLatency = YES;
sinePhase = 0.0;
if(visAudio && visAudioSize) {
bzero(visAudio, sizeof(float) * visAudioSize);
}
@ -104,13 +101,8 @@ static VisualizationController *_sharedController = nil;
}
- (void)postLatency:(double)latency {
if((latency >= 45.0) || (latency < 0.0)) [[clang::unlikely]] {
ignoreLatency = YES;
self->latency = latency;
} else {
self->latency = latency;
ignoreLatency = NO;
}
ignoreLatency = (latency >= 45.0) || (latency < 0.0);
self->latency = latency;
}
- (double)readSampleRate {
@ -123,44 +115,27 @@ static VisualizationController *_sharedController = nil;
return visSamplesPosted;
}
- (void)generateSineWave:(float *_Nullable)outPCM visFFT:(float *_Nullable)outFFT {
double sinePhase = self->sinePhase;
self->sinePhase = fmod(sinePhase + (M_PI / 90.0), M_PI * 2.0);
if(outPCM || outFFT) {
const double stepSize = M_PI * 2.0 * 5.0 / 4096.0;
double sineStep = sinePhase;
for(int i = 0; i < 2048; ++i) {
double sinePoint = sin(sineStep);
if(outPCM) {
outPCM[i * 2] = sinePoint;
outPCM[i * 2 + 1] = sin(sineStep + stepSize);
}
if(outFFT) {
outFFT[i] = sinePoint * -40.0 - 40.0;
}
sineStep = fmod(sineStep + stepSize * 2, M_PI * 2.0);
}
}
}
- (void)copyVisPCM:(float *_Nullable)outPCM visFFT:(float *_Nullable)outFFT latencyOffset:(double)latency {
if(!outPCM && !outFFT) return;
if(ignoreLatency || !visAudio || !visAudioSize) {
[self generateSineWave:outPCM visFFT:outFFT];
if(outPCM) bzero(outPCM, sizeof(float) * 4096);
if(outFFT) bzero(outFFT, sizeof(float) * 2048);
return;
}
void *visAudioTemp = calloc(sizeof(float), 4096);
if(!visAudioTemp) {
[self generateSineWave:outPCM visFFT:outFFT];
if(outPCM) bzero(outPCM, sizeof(float) * 4096);
if(outFFT) bzero(outFFT, sizeof(float) * 2048);
return;
}
@synchronized(self) {
if(!sampleRate) {
free(visAudioTemp);
[self generateSineWave:outPCM visFFT:outFFT];
if(outPCM) bzero(outPCM, 4096 * sizeof(float));
if(outFFT) bzero(outFFT, 2048 * sizeof(float));
return;
}
int latencySamples = (int)(sampleRate * (self->latency + latency)) + 2048;