// // VisualizationController.m // CogAudio Framework // // Created by Christopher Snowhill on 2/12/22. // #import "VisualizationController.h" #import #import "fft.h" @implementation VisualizationController static VisualizationController *_sharedController = nil; + (VisualizationController *)sharedController { @synchronized(self) { if(!_sharedController) { _sharedController = [[VisualizationController alloc] init]; } } return _sharedController; } - (id)init { self = [super init]; if(self) { vDSP_vclr(visAudio, 1, 4096); } return self; } - (void)dealloc { fft_free(); } - (void)postSampleRate:(double)sampleRate { @synchronized(self) { self->sampleRate = sampleRate; } } - (void)postVisPCM:(const float *)inPCM amount:(int)amount { int skipAmount = 0; if(amount > 4096) { skipAmount = amount - 4096; amount = 4096; } @synchronized(self) { cblas_scopy(4096 - amount, visAudio + amount, 1, visAudio, 1); cblas_scopy(amount, inPCM + skipAmount, 1, visAudio + 4096 - amount, 1); } } - (double)readSampleRate { @synchronized(self) { return sampleRate; } } - (void)copyVisPCM:(float *)outPCM visFFT:(float *)outFFT { @synchronized(self) { cblas_scopy(4096, visAudio, 1, outPCM, 1); fft_calculate(visAudio, outFFT, 2048); } } @end