Compare commits
No commits in common. "bccd4970d998f1a773bec0ccad6ed5f4f8a16f9e" and "d32f77d02f63ae6c160ab6bc702e1b1cd24605a7" have entirely different histories.
bccd4970d9
...
d32f77d02f
1 changed files with 8 additions and 33 deletions
|
@ -17,7 +17,6 @@
|
||||||
int visAudioCursor, visAudioSize;
|
int visAudioCursor, visAudioSize;
|
||||||
uint64_t visSamplesPosted;
|
uint64_t visSamplesPosted;
|
||||||
BOOL ignoreLatency;
|
BOOL ignoreLatency;
|
||||||
double sinePhase;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static VisualizationController *_sharedController = nil;
|
static VisualizationController *_sharedController = nil;
|
||||||
|
@ -38,7 +37,6 @@ static VisualizationController *_sharedController = nil;
|
||||||
visAudioSize = 0;
|
visAudioSize = 0;
|
||||||
latency = 0;
|
latency = 0;
|
||||||
ignoreLatency = YES;
|
ignoreLatency = YES;
|
||||||
sinePhase = 0.0;
|
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
@ -53,7 +51,6 @@ static VisualizationController *_sharedController = nil;
|
||||||
visAudioCursor = 0;
|
visAudioCursor = 0;
|
||||||
visSamplesPosted = 0;
|
visSamplesPosted = 0;
|
||||||
ignoreLatency = YES;
|
ignoreLatency = YES;
|
||||||
sinePhase = 0.0;
|
|
||||||
if(visAudio && visAudioSize) {
|
if(visAudio && visAudioSize) {
|
||||||
bzero(visAudio, sizeof(float) * visAudioSize);
|
bzero(visAudio, sizeof(float) * visAudioSize);
|
||||||
}
|
}
|
||||||
|
@ -104,13 +101,8 @@ static VisualizationController *_sharedController = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)postLatency:(double)latency {
|
- (void)postLatency:(double)latency {
|
||||||
if((latency >= 45.0) || (latency < 0.0)) [[clang::unlikely]] {
|
ignoreLatency = (latency >= 45.0) || (latency < 0.0);
|
||||||
ignoreLatency = YES;
|
|
||||||
self->latency = latency;
|
self->latency = latency;
|
||||||
} else {
|
|
||||||
self->latency = latency;
|
|
||||||
ignoreLatency = NO;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (double)readSampleRate {
|
- (double)readSampleRate {
|
||||||
|
@ -123,44 +115,27 @@ static VisualizationController *_sharedController = nil;
|
||||||
return visSamplesPosted;
|
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 {
|
- (void)copyVisPCM:(float *_Nullable)outPCM visFFT:(float *_Nullable)outFFT latencyOffset:(double)latency {
|
||||||
if(!outPCM && !outFFT) return;
|
if(!outPCM && !outFFT) return;
|
||||||
|
|
||||||
if(ignoreLatency || !visAudio || !visAudioSize) {
|
if(ignoreLatency || !visAudio || !visAudioSize) {
|
||||||
[self generateSineWave:outPCM visFFT:outFFT];
|
if(outPCM) bzero(outPCM, sizeof(float) * 4096);
|
||||||
|
if(outFFT) bzero(outFFT, sizeof(float) * 2048);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *visAudioTemp = calloc(sizeof(float), 4096);
|
void *visAudioTemp = calloc(sizeof(float), 4096);
|
||||||
if(!visAudioTemp) {
|
if(!visAudioTemp) {
|
||||||
[self generateSineWave:outPCM visFFT:outFFT];
|
if(outPCM) bzero(outPCM, sizeof(float) * 4096);
|
||||||
|
if(outFFT) bzero(outFFT, sizeof(float) * 2048);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@synchronized(self) {
|
@synchronized(self) {
|
||||||
if(!sampleRate) {
|
if(!sampleRate) {
|
||||||
free(visAudioTemp);
|
free(visAudioTemp);
|
||||||
[self generateSineWave:outPCM visFFT:outFFT];
|
if(outPCM) bzero(outPCM, 4096 * sizeof(float));
|
||||||
|
if(outFFT) bzero(outFFT, 2048 * sizeof(float));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int latencySamples = (int)(sampleRate * (self->latency + latency)) + 2048;
|
int latencySamples = (int)(sampleRate * (self->latency + latency)) + 2048;
|
||||||
|
|
Loading…
Reference in a new issue