From 472615bbf71acded9ebbf8a89e3b38e7cb629ee5 Mon Sep 17 00:00:00 2001 From: Sam Ellicott Date: Sat, 13 Mar 2021 13:58:17 -0500 Subject: [PATCH 1/9] Update .clang-format with more rules --- .clang-format | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.clang-format b/.clang-format index 4b41897..ecaad8c 100644 --- a/.clang-format +++ b/.clang-format @@ -1,3 +1,4 @@ +# Basic style rules by Charles Lohr BasedOnStyle: Microsoft AccessModifierOffset: -4 AlwaysBreakTemplateDeclarations: 'Yes' @@ -21,4 +22,16 @@ SpacesInSquareBrackets: 'true' TabWidth: '4' UseTab: Always FixNamespaceComments: 'true' -IndentCaseLabels: 'true' \ No newline at end of file +IndentCaseLabels: 'true' + +# Additions by Sam Ellicott +ColumnLimit: 100 +AlignConsecutiveAssignments: true +AlignConsecutiveMacros: true +AlignTrailingComments: true +AlignEscapedNewlines: Left +AlignOperands: AlignAfterOperator +AllowShortBlocksOnASingleLine: Always +AllowShortIfStatementsOnASingleLine: WithoutElse +AllowShortCaseLabelsOnASingleLine: true +AllowShortLoopsOnASingleLine: true \ No newline at end of file From 2f89063b6a3052a5152c8f5584019f021195a44b Mon Sep 17 00:00:00 2001 From: Sam Ellicott Date: Sat, 13 Mar 2021 13:58:40 -0500 Subject: [PATCH 2/9] Clean up main.c --- colorchord2/main.c | 528 ++++++++++++++++++++------------------------- 1 file changed, 236 insertions(+), 292 deletions(-) diff --git a/colorchord2/main.c b/colorchord2/main.c index 98bf99b..ef0fb86 100644 --- a/colorchord2/main.c +++ b/colorchord2/main.c @@ -1,30 +1,29 @@ -//Copyright 2015-2020 <>< Charles Lohr under the ColorChord License. +// Copyright 2015-2020 <>< Charles Lohr under the ColorChord License. -#if defined(WINDOWS) || defined(USE_WINDOWS)\ - || defined(WIN32) || defined(WIN64) \ - || defined(_WIN32) || defined(_WIN64) -#include +#if defined( WINDOWS ) || defined( USE_WINDOWS ) || defined( WIN32 ) || defined( WIN64 ) || \ + defined( _WIN32 ) || defined( _WIN64 ) #include +#include #ifndef strdup #define strdup _strdup #endif #endif -#include #include "color.h" -#include -#include -#include "os_generic.h" +#include "configs.h" +#include "decompose.h" #include "dft.h" #include "filter.h" -#include "decompose.h" -#include -#include +#include "hook.h" #include "notefinder.h" +#include "os_generic.h" #include "outdrivers.h" #include "parameters.h" -#include "hook.h" -#include "configs.h" +#include +#include +#include +#include +#include #define CNFG_IMPLEMENTATION @@ -34,20 +33,19 @@ #include "CNFA.h" - -//Sound driver. -struct CNFADriver * sd; +// Sound driver. +struct CNFADriver *sd; int bQuitColorChord = 0; #ifdef ANDROID -#include -#include -#include -#include #include +#include #include +#include +#include +#include void HandleDestroy() { @@ -60,115 +58,103 @@ void HandleDestroy() #define GENLINEWIDTH 89 -#define GENLINES 67 +#define GENLINES 67 -int genlinelen = 0; -char genlog[(GENLINEWIDTH+1)*(GENLINES+1)+2] = "log"; +char genlog[ ( GENLINEWIDTH + 1 ) * ( GENLINES + 1 ) + 2 ] = "log"; int genloglen; int genloglines; +int genlinelen = 0; int firstnewline = -1; -void example_log_function( int readSize, char * buf ) +void example_log_function( int readSize, char *buf ) { - static og_mutex_t * mt; - if( !mt ) mt = OGCreateMutex(); + static og_mutex_t *mt; + if ( !mt ) mt = OGCreateMutex(); OGLockMutex( mt ); - int i; - for( i = 0; (readSize>=0)?(i <= readSize):buf[i]; i++ ) + for ( int i = 0; readSize && i <= readSize && buf[ i ]; i++ ) { - char c = buf[i]; - if( c == '\0' ) c = '\n'; - if( ( c != '\n' && genlinelen >= GENLINEWIDTH ) || c == '\n' ) + char c = buf[ i ]; + if ( c == '\0' ) c = '\n'; + if ( ( c != '\n' && genlinelen >= GENLINEWIDTH ) || c == '\n' ) { - int k; genloglines++; - if( genloglines >= GENLINES ) + if ( genloglines >= GENLINES ) { - genloglen -= firstnewline+1; - int offset = firstnewline; + genloglen -= firstnewline + 1; + int offset = firstnewline; firstnewline = -1; - - for( k = 0; k < genloglen; k++ ) + int k; + for ( k = 0; k < genloglen; k++ ) { - if( ( genlog[k] = genlog[k+offset+1] ) == '\n' && firstnewline < 0) - { + if ( ( genlog[ k ] = genlog[ k + offset + 1 ] ) == '\n' && firstnewline < 0 ) firstnewline = k; } - } - genlog[k] = 0; + genlog[ k ] = 0; genloglines--; } genlinelen = 0; - if( c != '\n' ) + if ( c != '\n' ) { - genlog[genloglen+1] = 0; - genlog[genloglen++] = '\n'; + genlog[ genloglen + 1 ] = 0; + genlog[ genloglen++ ] = '\n'; } - if( firstnewline < 0 ) firstnewline = genloglen; + if ( firstnewline < 0 ) firstnewline = genloglen; } - genlog[genloglen+1] = 0; - genlog[genloglen++] = c; - if( c != '\n' ) genlinelen++; + genlog[ genloglen + 1 ] = 0; + genlog[ genloglen++ ] = c; + if ( c != '\n' ) genlinelen++; } OGUnlockMutex( mt ); } - - -#if defined(WIN32) || defined(USE_WINDOWS) - +#if defined( WIN32 ) || defined( USE_WINDOWS ) #define ESCAPE_KEY 0x1B void HandleDestroy() { CNFAClose( sd ); } - - #else #define ESCAPE_KEY 65307 #endif -int is_suspended = 0; - float DeltaFrameTime = 0; -double Now = 0; - +double Now = 0; +int is_suspended = 0; int lastfps; short screenx, screeny; -struct DriverInstances * outdriver[MAX_OUT_DRIVERS]; - -int headless = 0; REGISTER_PARAM( headless, PAINT ); -int set_screenx = 640; REGISTER_PARAM( set_screenx, PAINT ); -int set_screeny = 480; REGISTER_PARAM( set_screeny, PAINT ); -char sound_source[16]; REGISTER_PARAM( sound_source, PABUFFER ); -int cpu_autolimit = 1; REGISTER_PARAM( cpu_autolimit, PAINT ); +struct DriverInstances *outdriver[ MAX_OUT_DRIVERS ]; +int headless = 0; REGISTER_PARAM( headless, PAINT ); +int set_screenx = 640; REGISTER_PARAM( set_screenx, PAINT ); +int set_screeny = 480; REGISTER_PARAM( set_screeny, PAINT ); +char sound_source[ 16 ]; REGISTER_PARAM( sound_source, PABUFFER ); +int cpu_autolimit = 1; REGISTER_PARAM( cpu_autolimit, PAINT ); float cpu_autolimit_interval = 0.016; REGISTER_PARAM( cpu_autolimit_interval, PAFLOAT ); int sample_channel = -1; REGISTER_PARAM( sample_channel, PAINT ); int showfps = 1; REGISTER_PARAM( showfps, PAINT ); -#if defined(ANDROID) || defined( __android__ ) +#if defined( ANDROID ) || defined( __android__ ) float in_amplitude = 2; #else float in_amplitude = 1; #endif REGISTER_PARAM( in_amplitude, PAFLOAT ); -struct NoteFinder * nf; +struct NoteFinder *nf; -//Sound circular buffer +// Sound circular buffer #define SOUNDCBSIZE 8096 #define MAX_CHANNELS 2 double VisTimeEnd, VisTimeStart; -int soundhead = 0; -float sound[SOUNDCBSIZE]; -int show_debug = 0; +float sound[ SOUNDCBSIZE ]; +int soundhead = 0; +int show_debug = 0; int show_debug_basic = 1; int gKey = 0; @@ -176,53 +162,48 @@ extern int force_white; void RecalcBaseHz() { - nf->base_hz = 55 * pow( 2, gKey / 12.0 ); ChangeNFParameters( nf ); + nf->base_hz = 55 * pow( 2, gKey / 12.0 ); + ChangeNFParameters( nf ); } void HandleKey( int keycode, int bDown ) { char c = toupper( keycode ); #ifdef ANDROID - if( keycode == 4 && bDown ) + if ( keycode == 4 && bDown ) { - //Back button. + // Back button. printf( "Back button pressed\n" ); AndroidSendToBack( 0 ); return; } #endif - if( c == 'D' && bDown ) show_debug = !show_debug; - if( c == 'W' ) force_white = bDown; - if( c == '9' && bDown ) { gKey--; RecalcBaseHz(); } - if( c == '-' && bDown ) { gKey++; RecalcBaseHz(); } - if( c == '0' && bDown ) { gKey = 0; RecalcBaseHz(); } - if( c == 'E' && bDown ) show_debug_basic = !show_debug_basic; - if( c == 'K' && bDown ) DumpParameters(); if( keycode == ESCAPE_KEY ) exit( 0 ); + if( c == 'W' ) force_white = bDown; + if( c == 'D' && bDown ) show_debug = !show_debug; + if( c == '9' && bDown ) { gKey--; RecalcBaseHz(); } + if( c == '-' && bDown ) { gKey++; RecalcBaseHz(); } + if( c == '0' && bDown ) { gKey = 0; RecalcBaseHz(); } + if( c == 'E' && bDown ) show_debug_basic = !show_debug_basic; + if( c == 'K' && bDown ) DumpParameters(); printf( "Key: %d -> %d\n", keycode, bDown ); KeyHappened( keycode, bDown ); } -//On Android we want a really basic GUI +// On Android we want a really basic GUI void HandleButton( int x, int y, int button, int bDown ) { printf( "Button: %d,%d (%d) -> %d\n", x, y, button, bDown ); - if( bDown ) + if ( bDown ) { - if( y < 800 ) + if ( y < 800 ) { - if( x < screenx/3 ) - { - gKey --; - } - else if( x < (screenx*2/3) ) - { + if ( x < screenx / 3 ) + gKey--; + else if ( x < ( screenx * 2 / 3 ) ) gKey = 0; - } else - { gKey++; - } printf( "KEY: %d\n", gKey ); RecalcBaseHz(); } @@ -233,72 +214,48 @@ void HandleMotion( int x, int y, int mask ) { } -void SoundCB( struct CNFADriver * sd, short * out, short * in, int framesp, int framesr ) +void SoundCB( struct CNFADriver *sd, short *out, short *in, int framesp, int framesr ) { - int channelin = sd->channelsRec; + int channelin = sd->channelsRec; int channelout = sd->channelsPlay; - //*samplesp = 0; -// int process_channels = (MAX_CHANNELS < channelin)?MAX_CHANNELS:channelin; - //Load the samples into a ring buffer. Split the channels from interleved to one per buffer. - - int i; - int j; - - if( in ) + // Load the samples into a ring buffer. Split the channels from interleved to one per buffer. + if ( in ) { - for( i = 0; i < framesr; i++ ) + for ( int i = 0; i < framesr; i++ ) { - if( sample_channel < 0 ) + if ( sample_channel < 0 ) { float fo = 0; - for( j = 0; j < channelin; j++ ) + for ( int j = 0; j < channelin; j++ ) { - float f = in[i*channelin+j] / 32767.; - if( f >= -1 && f <= 1 ) - { + float f = in[ i * channelin + j ] / 32767.; + if ( f >= -1 && f <= 1 ) fo += f; - } else - { - fo += (f>0)?1:-1; - // printf( "Sound fault A %d/%d %d/%d %f\n", j, channelin, i, samplesr, f ); + fo += ( f > 0 ) ? 1 : -1; } - } fo /= channelin; - sound[soundhead] = fo*in_amplitude; - soundhead = (soundhead+1)%SOUNDCBSIZE; + sound[ soundhead ] = fo * in_amplitude; + soundhead = ( soundhead + 1 ) % SOUNDCBSIZE; } else { - float f = in[i*channelin+sample_channel] / 32767.; - - if( f > 1 || f < -1 ) - { - f = (f>0)?1:-1; + float f = in[ i * channelin + sample_channel ] / 32767.; + if ( f > 1 || f < -1 ) f = ( f > 0 ) ? 1 : -1; + sound[ soundhead ] = f * in_amplitude; + soundhead = ( soundhead + 1 ) % SOUNDCBSIZE; } - - - //printf( "Sound fault B %d/%d\n", i, samplesr ); - sound[soundhead] = f*in_amplitude; - soundhead = (soundhead+1)%SOUNDCBSIZE; - - } } SoundEventHappened( framesr, in, 0, channelin ); } - if( out ) + if ( out ) { - for( j = 0; j < framesp * channelout; j++ ) - { - out[j] = 0; - } + memset(out, 0, framesp * channelout); SoundEventHappened( framesp, out, 1, channelout ); } - - } #ifdef ANDROID @@ -315,7 +272,8 @@ void HandleResume() // function for calling initilization functions if we are using TCC #ifdef TCC -void RegisterConstructorFunctions(){ +void RegisterConstructorFunctions() +{ // Basic Window stuff REGISTERheadless(); @@ -336,59 +294,53 @@ void RegisterConstructorFunctions(){ // Video Stuff REGISTERnull(); REGISTERDisplayArray(); - //REGISTERDisplayDMX(); - //REGISTERDisplayFileWrite(); + // REGISTERDisplayDMX(); + // REGISTERDisplayFileWrite(); REGISTERDisplayHIDAPI(); REGISTERDisplayNetwork(); REGISTERDisplayOutDriver(); REGISTERDisplayPie(); - //REGISTERDisplaySHM(); + // REGISTERDisplaySHM(); // Output stuff - //REGISTERDisplayUSB2812(); + // REGISTERDisplayUSB2812(); REGISTEROutputCells(); REGISTEROutputLinear(); REGISTEROutputProminent(); REGISTEROutputVoronoi(); - //REGISTERRecorderPlugin(); - - //void ManuallyRegisterDevices(); - //ManuallyRegisterDevices(); } #endif -int main(int argc, char ** argv) +int main( int argc, char **argv ) { - int i; - #ifdef TCC RegisterConstructorFunctions(); #endif printf( "Output Drivers:\n" ); - for( i = 0; i < MAX_OUT_DRIVERS; i++ ) + for ( int i = 0; i < MAX_OUT_DRIVERS; i++ ) { - if( ODList[i].Name ) printf( "\t%s\n", ODList[i].Name ); + if ( ODList[ i ].Name ) printf( "\t%s\n", ODList[ i ].Name ); } -#if defined(WIN32) || defined(USE_WINDOWS) - //In case something needs network access. +#if defined( WIN32 ) || defined( USE_WINDOWS ) + // In case something needs network access. WSADATA wsaData; - WSAStartup(0x202, &wsaData); + WSAStartup( 0x202, &wsaData ); #elif defined( ANDROID ) int hasperm = AndroidHasPermissions( "READ_EXTERNAL_STORAGE" ); - if( !hasperm ) + if ( !hasperm ) { AndroidRequestAppPermissions( "READ_EXTERNAL_STORAGE" ); } int haspermInternet = AndroidHasPermissions( "INTERNET" ); - if( !haspermInternet ) + if ( !haspermInternet ) { AndroidRequestAppPermissions( "INTERNET" ); } #else - //Linux + // Linux #endif gargc = argc; @@ -396,103 +348,91 @@ int main(int argc, char ** argv) SetupConfigs(); - //Initialize Rawdraw + // Initialize Rawdraw int frames = 0; double ThisTime; - double LastFPSTime = OGGetAbsoluteTime(); + double LastFPSTime = OGGetAbsoluteTime(); double LastFrameTime = OGGetAbsoluteTime(); double SecToWait; - CNFGBGColor = 0x800000; + CNFGBGColor = 0x800000; CNFGDialogColor = 0x444444; - char title[1024]; - char * tp = title; - - memcpy( tp, "ColorChord ", strlen( "ColorChord " ) ); - tp += strlen( "ColorChord " ); - - for( i = 1; i < argc; i++ ) + // Generate the window title + char title[ 1024 ]; + strcpy( title, "Colorchord " ); + for ( int i = 1; i < argc; i++ ) { - memcpy( tp, argv[i], strlen( argv[i] ) ); - tp += strlen( argv[i] ); - *tp = ' '; - tp++; + strcat( title, argv[ i ] ); + strcat( title, " " ); } - *tp = 0; - if( !headless ) - CNFGSetup( title, set_screenx, set_screeny ); + if ( !headless ) CNFGSetup( title, set_screenx, set_screeny ); - char * OutDriverNames = strdup( GetParameterS( "outdrivers", "null" ) ); - char * ThisDriver = OutDriverNames; - char * TDStart; - for( i = 0; i < MAX_OUT_DRIVERS; i++ ) + char *OutDriverNames = strdup( GetParameterS( "outdrivers", "null" ) ); + char *ThisDriver = OutDriverNames; + char *TDStart; + for ( int i = 0; i < MAX_OUT_DRIVERS; i++ ) { - while( *ThisDriver == ' ' || *ThisDriver == '\t' ) ThisDriver++; - if( !*ThisDriver ) break; + while ( *ThisDriver == ' ' || *ThisDriver == '\t' ) ThisDriver++; + if ( !*ThisDriver ) break; TDStart = ThisDriver; - while( *ThisDriver != 0 && *ThisDriver != ',' ) + while ( *ThisDriver != 0 && *ThisDriver != ',' ) { - if( *ThisDriver == '\t' || *ThisDriver == ' ' ) *ThisDriver = 0; + if ( *ThisDriver == '\t' || *ThisDriver == ' ' ) *ThisDriver = 0; ThisDriver++; } - if( *ThisDriver ) + if ( *ThisDriver ) { *ThisDriver = 0; ThisDriver++; } printf( "Loading: %s\n", TDStart ); - outdriver[i] = SetupOutDriver( TDStart ); + outdriver[ i ] = SetupOutDriver( TDStart ); } - free(OutDriverNames); + free( OutDriverNames ); do { - //Initialize Sound - sd = CNFAInit( sound_source, "colorchord", &SoundCB, - GetParameterI( "samplerate", 44100 ), GetParameterI( "samplerate", 44100 ), - GetParameterI( "channels", 2 ), GetParameterI( "channels", 2 ), - GetParameterI( "buffer", 1024 ), + // Initialize Sound + sd = CNFAInit( sound_source, "colorchord", &SoundCB, GetParameterI( "samplerate", 44100 ), + GetParameterI( "samplerate", 44100 ), GetParameterI( "channels", 2 ), + GetParameterI( "channels", 2 ), GetParameterI( "buffer", 1024 ), GetParameterS( "devplay", 0 ), GetParameterS( "devrecord", 0 ), NULL ); - if( sd ) break; + if ( sd ) break; CNFGColor( 0xffffff ); - CNFGPenX = 10; CNFGPenY = 100; + CNFGPenX = 10; + CNFGPenY = 100; CNFGHandleInput(); CNFGClearFrame(); CNFGDrawText( "Colorchord must be used with sound. Sound not available.", 10 ); CNFGSwapBuffers(); - OGSleep(1); - } while( 1 ); - + OGSleep( 1 ); + } while ( 1 ); nf = CreateNoteFinder( sd->spsRec ); - //Once everything was reinitialized, re-read the ini files. + // Once everything was reinitialized, re-read the ini files. SetEnvValues( 1 ); printf( "================================================= Set Up\n" ); Now = OGGetAbsoluteTime(); double Last = Now; - #ifdef ANDROID - while(!bQuitColorChord) - #else - while(!bQuitColorChord) - #endif + while ( !bQuitColorChord ) { - char stt[1024]; - //Handle Rawdraw frame swappign + char stt[ 1024 ]; + // Handle Rawdraw frame swappign Now = OGGetAbsoluteTime(); DeltaFrameTime = Now - Last; - if( !headless ) + if ( !headless ) { CNFGHandleInput(); CNFGClearFrame(); @@ -500,188 +440,192 @@ int main(int argc, char ** argv) CNFGGetDimensions( &screenx, &screeny ); } - RunNoteFinder( nf, sound, (soundhead-1+SOUNDCBSIZE)%SOUNDCBSIZE, SOUNDCBSIZE ); - //Done all ColorChord work. + RunNoteFinder( nf, sound, ( soundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE, SOUNDCBSIZE ); + // Done all ColorChord work. VisTimeStart = OGGetAbsoluteTime(); - for( i = 0; i < MAX_OUT_DRIVERS; i++ ) + // call the output drivers with the updated note finder data + for ( int i = 0; i < MAX_OUT_DRIVERS; i++ ) { - - if( force_white ) - { - memset( OutLEDs, 0x7f, MAX_LEDS*3 ); - } - - if( outdriver[i] ) - outdriver[i]->Func( outdriver[i]->id, nf ); + if ( force_white ) memset( OutLEDs, 0x7f, MAX_LEDS * 3 ); + if ( outdriver[ i ] ) outdriver[ i ]->Func( outdriver[ i ]->id, nf ); } VisTimeEnd = OGGetAbsoluteTime(); - if( !headless ) + if ( !headless ) { - //Handle outputs. + // Handle outputs. int freqbins = nf->freqbins; - int note_peaks = freqbins/2; + int note_peaks = freqbins / 2; int freqs = freqbins * nf->octaves; - //int maxdists = freqbins/2; - //Do a bunch of debugging. - if( show_debug_basic && !is_suspended ) + // Do a bunch of debugging. + if ( show_debug_basic && !is_suspended ) { - //char sttdebug[1024]; - //char * sttend = sttdebug; - - for( i = 0; i < nf->dists_count; i++ ) + for ( int i = 0; i < nf->dists_count; i++ ) { - CNFGPenX = (nf->dists[i].mean + 0.5) / freqbins * screenx; //Move over 0.5 for visual purposes. The means is correct. - CNFGPenY = 400-nf->dists[i].amp * 150.0 / nf->dists[i].sigma; - //printf( "%f %f\n", dists[i].mean, dists[i].amp ); - sprintf( stt, "%f\n%f\n", nf->dists[i].mean, nf->dists[i].amp ); -// sttend += sprintf( sttend, "%f/%f ",nf->dists[i].mean, nf->dists[i].amp ); + // Move over 0.5 for visual purposes. The means is correct. + CNFGPenX = ( nf->dists[ i ].mean + 0.5 ) / freqbins * screenx; + CNFGPenY = 400 - nf->dists[ i ].amp * 150.0 / nf->dists[ i ].sigma; + sprintf( stt, "%f\n%f\n", nf->dists[ i ].mean, nf->dists[ i ].amp ); CNFGDrawText( stt, 2 ); } CNFGColor( 0xffffff ); - //Draw the folded bins - for( i = 0; i < freqbins; i++ ) + // Draw the folded bins + for ( int bin = 0; bin < freqbins; bin++ ) { - float x0 = i / (float)freqbins * (float)screenx; - float x1 = (i+1) / (float)freqbins * (float)screenx; - float amp = nf->folded_bins[i] * 250.0; - CNFGDialogColor = CCtoHEX( ((float)(i+0.5) / freqbins), 1.0, 1.0 ); - CNFGDrawBox( x0, 400-amp, x1, 400 ); + const float x0 = bin / ( float )freqbins * ( float )screenx; + const float x1 = ( bin + 1 ) / ( float )freqbins * ( float )screenx; + const float amp = nf->folded_bins[ bin ] * 250.0; + const float note = ( float )( bin + 0.5 ) / freqbins; + CNFGDialogColor = CCtoHEX( note, 1.0, 1.0 ); + CNFGDrawBox( x0, 400 - amp, x1, 400 ); } CNFGDialogColor = 0xf0f000; - for( i = 0; i < note_peaks; i++ ) + // Draw the note peaks + for ( int peak = 0; peak < note_peaks; peak++ ) { - //printf( "%f %f /", note_positions[i], note_amplitudes[i] ); - if( nf->note_amplitudes_out[i] < 0 ) continue; - float note = (float) nf->note_positions[i] / freqbins; + if ( nf->note_amplitudes_out[ peak ] < 0 ) continue; + float note = ( float )nf->note_positions[ peak ] / freqbins; CNFGDialogColor = CCtoHEX( note, 1.0, 1.0 ); - CNFGDrawBox( ((float)i / note_peaks) * screenx, 480 - nf->note_amplitudes_out[i] * 100, ((float)(i+1) / note_peaks) * screenx, 480 ); - CNFGPenX = ((float)(i+.4) / note_peaks) * screenx; + const int x1 = ( ( float )peak / note_peaks ) * screenx; + const int x2 = ( ( float )( peak + 1 ) / note_peaks ) * screenx; + const int y1 = 480 - nf->note_amplitudes_out[ peak ] * 100; + const int y2 = 480; + CNFGDrawBox( x1, y1, x2, y2 ); + + CNFGPenX = ( ( float )( i + .4 ) / note_peaks ) * screenx; CNFGPenY = screeny - 30; - sprintf( stt, "%d\n%0.0f", nf->enduring_note_id[i], nf->note_amplitudes2[i]*1000.0 ); - //sttend += sprintf( sttend, "%5d/%5.0f ", nf->enduring_note_id[i], nf->note_amplitudes2[i]*1000.0 ); + sprintf( stt, "%d\n%0.0f", nf->enduring_note_id[ i ], + nf->note_amplitudes2[ i ] * 1000.0 ); CNFGDrawText( stt, 2 ); - } - //Let's draw the o-scope. + // Let's draw the o-scope. int thissoundhead = soundhead; - thissoundhead = (thissoundhead-1+SOUNDCBSIZE)%SOUNDCBSIZE; - int lasty = sound[thissoundhead] * 128 + 128; thissoundhead = (thissoundhead-1+SOUNDCBSIZE)%SOUNDCBSIZE; - int thisy = sound[thissoundhead] * 128 + 128; thissoundhead = (thissoundhead-1+SOUNDCBSIZE)%SOUNDCBSIZE; - for( i = 0; i < screenx; i++ ) + thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; + int lasty = sound[ thissoundhead ] * 128 + 128; + thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; + int thisy = sound[ thissoundhead ] * 128 + 128; + thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; + for ( int i = 0; i < screenx; i++ ) { - CNFGTackSegment( i, lasty, i+1, thisy ); + CNFGTackSegment( i, lasty, i + 1, thisy ); lasty = thisy; - thisy = sound[thissoundhead] * 128 + 128; thissoundhead = (thissoundhead-1+SOUNDCBSIZE)%SOUNDCBSIZE; + thisy = sound[ thissoundhead ] * 128 + 128; + thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; } - //puts( sttdebug ); } - //Extra debugging? - if( show_debug && !is_suspended ) + // Extra debugging? + if ( show_debug && !is_suspended ) { - //Draw the histogram + // Draw the histogram float lasthistval; CNFGColor( 0xffffff ); - for( i = -1; i < screenx; i++ ) + for ( int x_val = -1; x_val < screenx; x_val++ ) { - float thishistval = CalcHistAt( (float)i/(float)screenx*freqbins-0.5, nf->freqbins, nf->dists, nf->dists_count ); - if( i >= 0 ) - CNFGTackSegment( i, 400-lasthistval * 250.0, i+1, 400-thishistval * 250.0 ); + // Calculate the value of the histogram at the current screen position + float hist_point = ( float )x_val / ( float )screenx * freqbins - 0.5; + float thishistval = + CalcHistAt( hist_point, nf->freqbins, nf->dists, nf->dists_count ); + + // Display the value on the screen + const short y = 400 - lasthistval * 250.0; + if ( x_val >= 0 ) CNFGTackSegment( x_val, y, x_val + 1, y ); lasthistval = thishistval; } CNFGColor( 0xffffff ); - //Draw the bins - for( i = 0; i < freqs; i++ ) + // Draw the bins + for ( int bin = 0; bin < freqs; i++ ) { - float x0 = i / (float)freqs * (float)screenx; - float x1 = (i+1) / (float)freqs * (float)screenx; - float amp = nf->outbins[i] * 250.0; - CNFGDialogColor = CCtoHEX( ((float)i / freqbins), 1.0, 1.0 ); + float x0 = bin / ( float )freqs * ( float )screenx; + float x1 = ( bin + 1 ) / ( float )freqs * ( float )screenx; + float amp = nf->outbins[ bin ] * 250.0; + float note = ( float )bin / freqbins; + CNFGDialogColor = CCtoHEX( note, 1.0, 1.0 ); CNFGDrawBox( x0, 0, x1, amp ); } CNFGDialogColor = 0x0f0f0f; - char stdebug[1024]; + char stdebug[ 1024 ]; sprintf( stdebug, "DFT:%8.2fms\nFLT:%8.2f\nDEC:%8.2f\nFNL:%8.2f\nDPY:%8.2f", - (nf->DFTTime - nf->StartTime)*1000, - (nf->FilterTime - nf->DFTTime)*1000, - (nf->DecomposeTime - nf->FilterTime)*1000, - (nf->FinalizeTime - nf->DecomposeTime)*1000, - (VisTimeEnd - VisTimeStart)*1000 ); + ( nf->DFTTime - nf->StartTime ) * 1000, ( nf->FilterTime - nf->DFTTime ) * 1000, + ( nf->DecomposeTime - nf->FilterTime ) * 1000, + ( nf->FinalizeTime - nf->DecomposeTime ) * 1000, + ( VisTimeEnd - VisTimeStart ) * 1000 ); CNFGPenX = 50; CNFGPenY = 50; CNFGDrawText( stdebug, 2 ); } - if( !is_suspended ) + if ( !is_suspended ) { - CNFGColor( show_debug?0xffffff:0x000000 ); - CNFGPenX = 0; CNFGPenY = screeny-10; + CNFGColor( show_debug ? 0xffffff : 0x000000 ); + CNFGPenX = 0; + CNFGPenY = screeny - 10; CNFGDrawText( "Extra Debug (D)", 2 ); - CNFGColor( show_debug_basic?0xffffff:0x000000 ); - CNFGPenX = 120; CNFGPenY = screeny-10; + CNFGColor( show_debug_basic ? 0xffffff : 0x000000 ); + CNFGPenX = 120; + CNFGPenY = screeny - 10; CNFGDrawText( "Basic Debug (E)", 2 ); - CNFGColor( show_debug_basic?0xffffff:0x000000 ); - CNFGPenX = 240; CNFGPenY = screeny-10; + CNFGColor( show_debug_basic ? 0xffffff : 0x000000 ); + CNFGPenX = 240; + CNFGPenY = screeny - 10; sprintf( stt, "[9] Key: %d [0] (%3.1f) [-]", gKey, nf->base_hz ); CNFGDrawText( stt, 2 ); CNFGColor( 0xffffff ); - CNFGPenX = 440; CNFGPenY = screeny-10; + CNFGPenX = 440; + CNFGPenY = screeny - 10; sprintf( stt, "FPS: %d", lastfps ); CNFGDrawText( stt, 2 ); #ifdef ANDROID CNFGColor( 0xffffff ); - CNFGPenX = 10; CNFGPenY = 600; + CNFGPenX = 10; + CNFGPenY = 600; CNFGDrawText( genlog, 3 ); #endif CNFGSwapBuffers(); } } - //Finish Rawdraw with FPS counter, and a nice delay loop. + // Finish Rawdraw with FPS counter, and a nice delay loop. frames++; ThisTime = OGGetAbsoluteTime(); - if( ThisTime > LastFPSTime + 1 && showfps ) + if ( ThisTime > LastFPSTime + 1 && showfps ) { #ifndef ANDROID printf( "FPS: %d\n", frames ); #endif lastfps = frames; - frames = 0; - LastFPSTime+=1; + frames = 0; + LastFPSTime += 1; } - if( cpu_autolimit ) + if ( cpu_autolimit ) { SecToWait = cpu_autolimit_interval - ( ThisTime - LastFrameTime ); LastFrameTime += cpu_autolimit_interval; - if( SecToWait < -.1 ) LastFrameTime = ThisTime - .1; - if( SecToWait > 0 ) - OGUSleep( (int)( SecToWait * 1000000 ) ); + if ( SecToWait < -.1 ) LastFrameTime = ThisTime - .1; + if ( SecToWait > 0 ) OGUSleep( ( int )( SecToWait * 1000000 ) ); } - if( !is_suspended ) - SetEnvValues( 0 ); + if ( !is_suspended ) SetEnvValues( 0 ); Last = Now; } - } From 793e72df42257b01b8e73e9c790a3fb2e679e6cd Mon Sep 17 00:00:00 2001 From: Sam Ellicott Date: Sat, 13 Mar 2021 14:02:53 -0500 Subject: [PATCH 3/9] Fix some missed updated variable names --- colorchord2/main.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/colorchord2/main.c b/colorchord2/main.c index ef0fb86..cbf1988 100644 --- a/colorchord2/main.c +++ b/colorchord2/main.c @@ -500,10 +500,10 @@ int main( int argc, char **argv ) const int y2 = 480; CNFGDrawBox( x1, y1, x2, y2 ); - CNFGPenX = ( ( float )( i + .4 ) / note_peaks ) * screenx; + CNFGPenX = ( ( float )( peak + .4 ) / note_peaks ) * screenx; CNFGPenY = screeny - 30; - sprintf( stt, "%d\n%0.0f", nf->enduring_note_id[ i ], - nf->note_amplitudes2[ i ] * 1000.0 ); + sprintf( stt, "%d\n%0.0f", nf->enduring_note_id[ peak ], + nf->note_amplitudes2[ peak ] * 1000.0 ); CNFGDrawText( stt, 2 ); } @@ -546,7 +546,7 @@ int main( int argc, char **argv ) CNFGColor( 0xffffff ); // Draw the bins - for ( int bin = 0; bin < freqs; i++ ) + for ( int bin = 0; bin < freqs; bin++ ) { float x0 = bin / ( float )freqs * ( float )screenx; float x1 = ( bin + 1 ) / ( float )freqs * ( float )screenx; From ad2306697624c7ba776440e4ede930d8ec78cfbc Mon Sep 17 00:00:00 2001 From: Sam Ellicott Date: Sat, 13 Mar 2021 14:12:19 -0500 Subject: [PATCH 4/9] Fix some allignment issues noticed in github --- colorchord2/main.c | 52 ++++++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 29 deletions(-) diff --git a/colorchord2/main.c b/colorchord2/main.c index cbf1988..b409b09 100644 --- a/colorchord2/main.c +++ b/colorchord2/main.c @@ -129,14 +129,14 @@ int lastfps; short screenx, screeny; struct DriverInstances *outdriver[ MAX_OUT_DRIVERS ]; -int headless = 0; REGISTER_PARAM( headless, PAINT ); -int set_screenx = 640; REGISTER_PARAM( set_screenx, PAINT ); -int set_screeny = 480; REGISTER_PARAM( set_screeny, PAINT ); -char sound_source[ 16 ]; REGISTER_PARAM( sound_source, PABUFFER ); -int cpu_autolimit = 1; REGISTER_PARAM( cpu_autolimit, PAINT ); -float cpu_autolimit_interval = 0.016; REGISTER_PARAM( cpu_autolimit_interval, PAFLOAT ); -int sample_channel = -1; REGISTER_PARAM( sample_channel, PAINT ); -int showfps = 1; REGISTER_PARAM( showfps, PAINT ); +int headless = 0; REGISTER_PARAM( headless, PAINT ); +int set_screenx = 640; REGISTER_PARAM( set_screenx, PAINT ); +int set_screeny = 480; REGISTER_PARAM( set_screeny, PAINT ); +char sound_source[ 16 ]; REGISTER_PARAM( sound_source, PABUFFER ); +int cpu_autolimit = 1; REGISTER_PARAM( cpu_autolimit, PAINT ); +float cpu_autolimit_interval = 0.016; REGISTER_PARAM( cpu_autolimit_interval, PAFLOAT ); +int sample_channel = -1; REGISTER_PARAM( sample_channel, PAINT ); +int showfps = 1; REGISTER_PARAM( showfps, PAINT ); #if defined( ANDROID ) || defined( __android__ ) float in_amplitude = 2; @@ -178,7 +178,7 @@ void HandleKey( int keycode, int bDown ) return; } #endif - if( keycode == ESCAPE_KEY ) exit( 0 ); + if( keycode == ESCAPE_KEY ) exit( 0 ); if( c == 'W' ) force_white = bDown; if( c == 'D' && bDown ) show_debug = !show_debug; if( c == '9' && bDown ) { gKey--; RecalcBaseHz(); } @@ -234,7 +234,7 @@ void SoundCB( struct CNFADriver *sd, short *out, short *in, int framesp, int fra fo += f; else fo += ( f > 0 ) ? 1 : -1; - } + } fo /= channelin; sound[ soundhead ] = fo * in_amplitude; soundhead = ( soundhead + 1 ) % SOUNDCBSIZE; @@ -245,7 +245,7 @@ void SoundCB( struct CNFADriver *sd, short *out, short *in, int framesp, int fra if ( f > 1 || f < -1 ) f = ( f > 0 ) ? 1 : -1; sound[ soundhead ] = f * in_amplitude; soundhead = ( soundhead + 1 ) % SOUNDCBSIZE; - } + } } SoundEventHappened( framesr, in, 0, channelin ); } @@ -279,11 +279,11 @@ void RegisterConstructorFunctions() REGISTERheadless(); REGISTERset_screenx(); REGISTERset_screeny(); - REGISTERsound_source(); - REGISTERcpu_autolimit(); - REGISTERcpu_autolimit_interval(); + REGISTERsound_source(); + REGISTERcpu_autolimit(); + REGISTERcpu_autolimit_interval(); REGISTERsample_channel(); - REGISTERshowfps(); + REGISTERshowfps(); REGISTERin_amplitude(); // Audio stuff @@ -326,19 +326,13 @@ int main( int argc, char **argv ) #if defined( WIN32 ) || defined( USE_WINDOWS ) // In case something needs network access. - WSADATA wsaData; + WSADATA wsaData; WSAStartup( 0x202, &wsaData ); #elif defined( ANDROID ) - int hasperm = AndroidHasPermissions( "READ_EXTERNAL_STORAGE" ); - if ( !hasperm ) - { - AndroidRequestAppPermissions( "READ_EXTERNAL_STORAGE" ); - } + int hasperm = AndroidHasPermissions( "READ_EXTERNAL_STORAGE" ); int haspermInternet = AndroidHasPermissions( "INTERNET" ); - if ( !haspermInternet ) - { - AndroidRequestAppPermissions( "INTERNET" ); - } + if ( !hasperm ) AndroidRequestAppPermissions( "READ_EXTERNAL_STORAGE" ); + if ( !haspermInternet ) AndroidRequestAppPermissions( "INTERNET" ); #else // Linux #endif @@ -351,11 +345,11 @@ int main( int argc, char **argv ) // Initialize Rawdraw int frames = 0; double ThisTime; - double LastFPSTime = OGGetAbsoluteTime(); - double LastFrameTime = OGGetAbsoluteTime(); double SecToWait; - CNFGBGColor = 0x800000; - CNFGDialogColor = 0x444444; + double LastFPSTime = OGGetAbsoluteTime(); + double LastFrameTime = OGGetAbsoluteTime(); + CNFGBGColor = 0x800000; + CNFGDialogColor = 0x444444; // Generate the window title char title[ 1024 ]; From cb9b6bc569b9082d697e6d9fe16f052c394315b2 Mon Sep 17 00:00:00 2001 From: Sam Ellicott Date: Sat, 13 Mar 2021 14:23:52 -0500 Subject: [PATCH 5/9] Use spaces for allignment instead of tabs --- .clang-format | 2 +- colorchord2/main.c | 114 ++++++++++++++++++++++----------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/.clang-format b/.clang-format index ecaad8c..d72017b 100644 --- a/.clang-format +++ b/.clang-format @@ -20,7 +20,7 @@ SpacesInContainerLiterals: 'true' SpacesInParentheses: 'true' SpacesInSquareBrackets: 'true' TabWidth: '4' -UseTab: Always +UseTab: AlignWithSpaces FixNamespaceComments: 'true' IndentCaseLabels: 'true' diff --git a/colorchord2/main.c b/colorchord2/main.c index b409b09..d0def45 100644 --- a/colorchord2/main.c +++ b/colorchord2/main.c @@ -58,18 +58,18 @@ void HandleDestroy() #define GENLINEWIDTH 89 -#define GENLINES 67 +#define GENLINES 67 char genlog[ ( GENLINEWIDTH + 1 ) * ( GENLINES + 1 ) + 2 ] = "log"; int genloglen; int genloglines; -int genlinelen = 0; +int genlinelen = 0; int firstnewline = -1; void example_log_function( int readSize, char *buf ) { static og_mutex_t *mt; - if ( !mt ) mt = OGCreateMutex(); + if ( !mt ) mt = OGCreateMutex(); OGLockMutex( mt ); for ( int i = 0; readSize && i <= readSize && buf[ i ]; i++ ) { @@ -80,15 +80,15 @@ void example_log_function( int readSize, char *buf ) genloglines++; if ( genloglines >= GENLINES ) { - genloglen -= firstnewline + 1; - int offset = firstnewline; + genloglen -= firstnewline + 1; + int offset = firstnewline; firstnewline = -1; int k; for ( k = 0; k < genloglen; k++ ) { if ( ( genlog[ k ] = genlog[ k + offset + 1 ] ) == '\n' && firstnewline < 0 ) firstnewline = k; - } + } genlog[ k ] = 0; genloglines--; } @@ -96,12 +96,12 @@ void example_log_function( int readSize, char *buf ) if ( c != '\n' ) { genlog[ genloglen + 1 ] = 0; - genlog[ genloglen++ ] = '\n'; + genlog[ genloglen++ ] = '\n'; } if ( firstnewline < 0 ) firstnewline = genloglen; } genlog[ genloglen + 1 ] = 0; - genlog[ genloglen++ ] = c; + genlog[ genloglen++ ] = c; if ( c != '\n' ) genlinelen++; } @@ -129,14 +129,14 @@ int lastfps; short screenx, screeny; struct DriverInstances *outdriver[ MAX_OUT_DRIVERS ]; -int headless = 0; REGISTER_PARAM( headless, PAINT ); -int set_screenx = 640; REGISTER_PARAM( set_screenx, PAINT ); -int set_screeny = 480; REGISTER_PARAM( set_screeny, PAINT ); -char sound_source[ 16 ]; REGISTER_PARAM( sound_source, PABUFFER ); -int cpu_autolimit = 1; REGISTER_PARAM( cpu_autolimit, PAINT ); -float cpu_autolimit_interval = 0.016; REGISTER_PARAM( cpu_autolimit_interval, PAFLOAT ); -int sample_channel = -1; REGISTER_PARAM( sample_channel, PAINT ); -int showfps = 1; REGISTER_PARAM( showfps, PAINT ); +int headless = 0; REGISTER_PARAM( headless, PAINT ); +int set_screenx = 640; REGISTER_PARAM( set_screenx, PAINT ); +int set_screeny = 480; REGISTER_PARAM( set_screeny, PAINT ); +char sound_source[ 16 ]; REGISTER_PARAM( sound_source, PABUFFER ); +int cpu_autolimit = 1; REGISTER_PARAM( cpu_autolimit, PAINT ); +float cpu_autolimit_interval = 0.016; REGISTER_PARAM( cpu_autolimit_interval, PAFLOAT ); +int sample_channel = -1; REGISTER_PARAM( sample_channel, PAINT ); +int showfps = 1; REGISTER_PARAM( showfps, PAINT ); #if defined( ANDROID ) || defined( __android__ ) float in_amplitude = 2; @@ -148,13 +148,13 @@ REGISTER_PARAM( in_amplitude, PAFLOAT ); struct NoteFinder *nf; // Sound circular buffer -#define SOUNDCBSIZE 8096 +#define SOUNDCBSIZE 8096 #define MAX_CHANNELS 2 double VisTimeEnd, VisTimeStart; float sound[ SOUNDCBSIZE ]; -int soundhead = 0; -int show_debug = 0; +int soundhead = 0; +int show_debug = 0; int show_debug_basic = 1; int gKey = 0; @@ -178,14 +178,14 @@ void HandleKey( int keycode, int bDown ) return; } #endif - if( keycode == ESCAPE_KEY ) exit( 0 ); - if( c == 'W' ) force_white = bDown; - if( c == 'D' && bDown ) show_debug = !show_debug; - if( c == '9' && bDown ) { gKey--; RecalcBaseHz(); } - if( c == '-' && bDown ) { gKey++; RecalcBaseHz(); } - if( c == '0' && bDown ) { gKey = 0; RecalcBaseHz(); } - if( c == 'E' && bDown ) show_debug_basic = !show_debug_basic; - if( c == 'K' && bDown ) DumpParameters(); + if( keycode == ESCAPE_KEY ) exit( 0 ); + if( c == 'W' ) force_white = bDown; + if( c == 'D' && bDown ) show_debug = !show_debug; + if( c == '9' && bDown ) { gKey--; RecalcBaseHz(); } + if( c == '-' && bDown ) { gKey++; RecalcBaseHz(); } + if( c == '0' && bDown ) { gKey = 0; RecalcBaseHz(); } + if( c == 'E' && bDown ) show_debug_basic = !show_debug_basic; + if( c == 'K' && bDown ) DumpParameters(); printf( "Key: %d -> %d\n", keycode, bDown ); KeyHappened( keycode, bDown ); } @@ -237,14 +237,14 @@ void SoundCB( struct CNFADriver *sd, short *out, short *in, int framesp, int fra } fo /= channelin; sound[ soundhead ] = fo * in_amplitude; - soundhead = ( soundhead + 1 ) % SOUNDCBSIZE; + soundhead = ( soundhead + 1 ) % SOUNDCBSIZE; } else { float f = in[ i * channelin + sample_channel ] / 32767.; if ( f > 1 || f < -1 ) f = ( f > 0 ) ? 1 : -1; sound[ soundhead ] = f * in_amplitude; - soundhead = ( soundhead + 1 ) % SOUNDCBSIZE; + soundhead = ( soundhead + 1 ) % SOUNDCBSIZE; } } SoundEventHappened( framesr, in, 0, channelin ); @@ -329,7 +329,7 @@ int main( int argc, char **argv ) WSADATA wsaData; WSAStartup( 0x202, &wsaData ); #elif defined( ANDROID ) - int hasperm = AndroidHasPermissions( "READ_EXTERNAL_STORAGE" ); + int hasperm = AndroidHasPermissions( "READ_EXTERNAL_STORAGE" ); int haspermInternet = AndroidHasPermissions( "INTERNET" ); if ( !hasperm ) AndroidRequestAppPermissions( "READ_EXTERNAL_STORAGE" ); if ( !haspermInternet ) AndroidRequestAppPermissions( "INTERNET" ); @@ -346,10 +346,10 @@ int main( int argc, char **argv ) int frames = 0; double ThisTime; double SecToWait; - double LastFPSTime = OGGetAbsoluteTime(); - double LastFrameTime = OGGetAbsoluteTime(); - CNFGBGColor = 0x800000; - CNFGDialogColor = 0x444444; + double LastFPSTime = OGGetAbsoluteTime(); + double LastFrameTime = OGGetAbsoluteTime(); + CNFGBGColor = 0x800000; + CNFGDialogColor = 0x444444; // Generate the window title char title[ 1024 ]; @@ -453,9 +453,9 @@ int main( int argc, char **argv ) if ( !headless ) { // Handle outputs. - int freqbins = nf->freqbins; + int freqbins = nf->freqbins; int note_peaks = freqbins / 2; - int freqs = freqbins * nf->octaves; + int freqs = freqbins * nf->octaves; // Do a bunch of debugging. if ( show_debug_basic && !is_suspended ) @@ -473,11 +473,11 @@ int main( int argc, char **argv ) // Draw the folded bins for ( int bin = 0; bin < freqbins; bin++ ) { - const float x0 = bin / ( float )freqbins * ( float )screenx; - const float x1 = ( bin + 1 ) / ( float )freqbins * ( float )screenx; - const float amp = nf->folded_bins[ bin ] * 250.0; + const float x0 = bin / ( float )freqbins * ( float )screenx; + const float x1 = ( bin + 1 ) / ( float )freqbins * ( float )screenx; + const float amp = nf->folded_bins[ bin ] * 250.0; const float note = ( float )( bin + 0.5 ) / freqbins; - CNFGDialogColor = CCtoHEX( note, 1.0, 1.0 ); + CNFGDialogColor = CCtoHEX( note, 1.0, 1.0 ); CNFGDrawBox( x0, 400 - amp, x1, 400 ); } CNFGDialogColor = 0xf0f000; @@ -486,12 +486,12 @@ int main( int argc, char **argv ) for ( int peak = 0; peak < note_peaks; peak++ ) { if ( nf->note_amplitudes_out[ peak ] < 0 ) continue; - float note = ( float )nf->note_positions[ peak ] / freqbins; + float note = ( float )nf->note_positions[ peak ] / freqbins; CNFGDialogColor = CCtoHEX( note, 1.0, 1.0 ); - const int x1 = ( ( float )peak / note_peaks ) * screenx; - const int x2 = ( ( float )( peak + 1 ) / note_peaks ) * screenx; - const int y1 = 480 - nf->note_amplitudes_out[ peak ] * 100; - const int y2 = 480; + const int x1 = ( ( float )peak / note_peaks ) * screenx; + const int x2 = ( ( float )( peak + 1 ) / note_peaks ) * screenx; + const int y1 = 480 - nf->note_amplitudes_out[ peak ] * 100; + const int y2 = 480; CNFGDrawBox( x1, y1, x2, y2 ); CNFGPenX = ( ( float )( peak + .4 ) / note_peaks ) * screenx; @@ -503,16 +503,16 @@ int main( int argc, char **argv ) // Let's draw the o-scope. int thissoundhead = soundhead; - thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; - int lasty = sound[ thissoundhead ] * 128 + 128; - thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; - int thisy = sound[ thissoundhead ] * 128 + 128; - thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; + thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; + int lasty = sound[ thissoundhead ] * 128 + 128; + thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; + int thisy = sound[ thissoundhead ] * 128 + 128; + thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; for ( int i = 0; i < screenx; i++ ) { CNFGTackSegment( i, lasty, i + 1, thisy ); - lasty = thisy; - thisy = sound[ thissoundhead ] * 128 + 128; + lasty = thisy; + thisy = sound[ thissoundhead ] * 128 + 128; thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; } } @@ -542,10 +542,10 @@ int main( int argc, char **argv ) // Draw the bins for ( int bin = 0; bin < freqs; bin++ ) { - float x0 = bin / ( float )freqs * ( float )screenx; - float x1 = ( bin + 1 ) / ( float )freqs * ( float )screenx; - float amp = nf->outbins[ bin ] * 250.0; - float note = ( float )bin / freqbins; + float x0 = bin / ( float )freqs * ( float )screenx; + float x1 = ( bin + 1 ) / ( float )freqs * ( float )screenx; + float amp = nf->outbins[ bin ] * 250.0; + float note = ( float )bin / freqbins; CNFGDialogColor = CCtoHEX( note, 1.0, 1.0 ); CNFGDrawBox( x0, 0, x1, amp ); } @@ -606,7 +606,7 @@ int main( int argc, char **argv ) printf( "FPS: %d\n", frames ); #endif lastfps = frames; - frames = 0; + frames = 0; LastFPSTime += 1; } From b6b30394591817814f94bfa556633522cad34c08 Mon Sep 17 00:00:00 2001 From: Sam Ellicott Date: Sat, 13 Mar 2021 15:55:43 -0500 Subject: [PATCH 6/9] Fix allignment issue --- colorchord2/main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/colorchord2/main.c b/colorchord2/main.c index d0def45..b6a01e4 100644 --- a/colorchord2/main.c +++ b/colorchord2/main.c @@ -123,8 +123,8 @@ void HandleDestroy() #endif float DeltaFrameTime = 0; -double Now = 0; -int is_suspended = 0; +double Now = 0; +int is_suspended = 0; int lastfps; short screenx, screeny; From 36ef604bafda5ea80443a76fb71cd973869e60a4 Mon Sep 17 00:00:00 2001 From: Sam Ellicott Date: Sat, 22 May 2021 14:44:59 -0400 Subject: [PATCH 7/9] Update clang-format --- .clang-format | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/.clang-format b/.clang-format index d72017b..7ca072d 100644 --- a/.clang-format +++ b/.clang-format @@ -15,7 +15,8 @@ MaxEmptyLinesToKeep: 2 PointerAlignment: Right SpaceInEmptyParentheses: 'false' SpacesInAngles: 'true' -SpacesInCStyleCastParentheses: 'true' +# this is just atrocious +#SpacesInCStyleCastParentheses: 'true' SpacesInContainerLiterals: 'true' SpacesInParentheses: 'true' SpacesInSquareBrackets: 'true' @@ -26,9 +27,15 @@ IndentCaseLabels: 'true' # Additions by Sam Ellicott ColumnLimit: 100 -AlignConsecutiveAssignments: true -AlignConsecutiveMacros: true -AlignTrailingComments: true +# From general dislike from Charles and Cai, I am turning these off +#AlignConsecutiveAssignments: true +#AlignConsecutiveMacros: true +#AlignTrailingComments: true +#AlignOperands: AlignAfterOperator +# Turn off alignment +AlignConsecutiveAssignments: false +AlignConsecutiveMacros: false +AlignTrailingComments: false AlignEscapedNewlines: Left AlignOperands: AlignAfterOperator AllowShortBlocksOnASingleLine: Always From 08eb40a900c0c7c0509d3bd9b80f0ff81a6e969e Mon Sep 17 00:00:00 2001 From: Sam Ellicott Date: Sat, 22 May 2021 14:45:23 -0400 Subject: [PATCH 8/9] Fix formatting issues --- colorchord2/dft.c | 253 ++++++++++++++++++++++----------------------- colorchord2/main.c | 77 +++++++------- 2 files changed, 161 insertions(+), 169 deletions(-) diff --git a/colorchord2/dft.c b/colorchord2/dft.c index 90c3511..c5209a4 100644 --- a/colorchord2/dft.c +++ b/colorchord2/dft.c @@ -10,24 +10,25 @@ #ifndef CCEMBEDDED -void DoDFT( float * outbins, float * frequencies, int bins, float * databuffer, int place_in_data_buffer, int size_of_data_buffer, float q ) +void DoDFT( float *outbins, float *frequencies, int bins, float *databuffer, + int place_in_data_buffer, int size_of_data_buffer, float q ) { int i, j; - for( i = 0; i < bins; i++ ) + for ( i = 0; i < bins; i++ ) { - float freq = frequencies[i]; + float freq = frequencies[ i ]; float phi = 0; int sampleplace = place_in_data_buffer; - float advance = 3.14159*2.0/freq; + float advance = 3.14159 * 2.0 / freq; float binqtys = 0; float binqtyc = 0; - for( j = 0; j <= freq * q; j++ ) + for ( j = 0; j <= freq * q; j++ ) { - float sample = databuffer[sampleplace]; - sampleplace = (sampleplace-1+size_of_data_buffer)%size_of_data_buffer; -//printf( "%d\n", sampleplace ); + float sample = databuffer[ sampleplace ]; + sampleplace = ( sampleplace - 1 + size_of_data_buffer ) % size_of_data_buffer; + // printf( "%d\n", sampleplace ); float sv = sin( phi ) * sample; float cv = cos( phi ) * sample; @@ -38,36 +39,37 @@ void DoDFT( float * outbins, float * frequencies, int bins, float * databuffer, } float amp = sqrtf( binqtys * binqtys + binqtyc * binqtyc ); - outbins[i] = amp / freq / q; + outbins[ i ] = amp / freq / q; } } -void DoDFTQuick( float * outbins, float * frequencies, int bins, const float * databuffer, int place_in_data_buffer, int size_of_data_buffer, float q, float speedup ) +void DoDFTQuick( float *outbins, float *frequencies, int bins, const float *databuffer, + int place_in_data_buffer, int size_of_data_buffer, float q, float speedup ) { int i, j; - for( i = 0; i < bins; i++ ) + for ( i = 0; i < bins; i++ ) { int flirts = 0; - float freq = frequencies[i]; + float freq = frequencies[ i ]; float phi = 0; - int ftq = freq * q; + int ftq = freq * q; int sampleplace = place_in_data_buffer; - float advance = 3.14159*2.0/freq; + float advance = 3.14159 * 2.0 / freq; float binqtys = 0; float binqtyc = 0; int skip = floor( ftq / speedup ); - if( skip == 0 ) skip = 1; + if ( skip == 0 ) skip = 1; advance *= skip; - for( j = 0; j <= ftq; j += skip ) + for ( j = 0; j <= ftq; j += skip ) { - float sample = databuffer[sampleplace]; - sampleplace = (sampleplace-skip+size_of_data_buffer)%size_of_data_buffer; -//printf( "%d\n", sampleplace ); + float sample = databuffer[ sampleplace ]; + sampleplace = ( sampleplace - skip + size_of_data_buffer ) % size_of_data_buffer; + // printf( "%d\n", sampleplace ); float sv = sinf( phi ) * sample; float cv = cosf( phi ) * sample; @@ -79,25 +81,24 @@ void DoDFTQuick( float * outbins, float * frequencies, int bins, const float * d } float amp = sqrtf( binqtys * binqtys + binqtyc * binqtyc ); - outbins[i] = amp / freq / q * skip; + outbins[ i ] = amp / freq / q * skip; } } - ////////////////////////////DFT Progressive is for embedded systems, primarily. -static float * gbinqtys; -static float * gbinqtyc; -static float * phis; -static float * gfrequencies; -static float * lastbins; -static float * advances; -static float * goutbins; -static int gbins; -static float gq; -static float gspeedup; +static float *gbinqtys; +static float *gbinqtyc; +static float *phis; +static float *gfrequencies; +static float *lastbins; +static float *advances; +static float *goutbins; +static int gbins; +static float gq; +static float gspeedup; #define PROGIIR .005 @@ -105,53 +106,53 @@ void HandleProgressive( float sample ) { int i; - for( i = 0; i < gbins; i++ ) + for ( i = 0; i < gbins; i++ ) { - float thiss = sinf( phis[i] ) * sample; - float thisc = cosf( phis[i] ) * sample; + float thiss = sinf( phis[ i ] ) * sample; + float thisc = cosf( phis[ i ] ) * sample; - float s = gbinqtys[i] = gbinqtys[i] * (1.-PROGIIR) + thiss * PROGIIR; - float c = gbinqtyc[i] = gbinqtyc[i] * (1.-PROGIIR) + thisc * PROGIIR; + float s = gbinqtys[ i ] = gbinqtys[ i ] * ( 1. - PROGIIR ) + thiss * PROGIIR; + float c = gbinqtyc[ i ] = gbinqtyc[ i ] * ( 1. - PROGIIR ) + thisc * PROGIIR; - phis[i] += advances[i]; - if( phis[i] > 6.283 ) phis[i]-=6.283; + phis[ i ] += advances[ i ]; + if ( phis[ i ] > 6.283 ) phis[ i ] -= 6.283; - goutbins[i] = sqrtf( s * s + c * c ); + goutbins[ i ] = sqrtf( s * s + c * c ); } } -void DoDFTProgressive( float * outbins, float * frequencies, int bins, const float * databuffer, int place_in_data_buffer, int size_of_data_buffer, float q, float speedup ) +void DoDFTProgressive( float *outbins, float *frequencies, int bins, const float *databuffer, + int place_in_data_buffer, int size_of_data_buffer, float q, float speedup ) { int i; static int last_place; - if( gbins != bins ) + if ( gbins != bins ) { - if( gbinqtys ) free( gbinqtys ); - if( gbinqtyc ) free( gbinqtyc ); - if( phis ) free( phis ); - if( lastbins ) free( lastbins ); - if( advances ) free( advances ); + if ( gbinqtys ) free( gbinqtys ); + if ( gbinqtyc ) free( gbinqtyc ); + if ( phis ) free( phis ); + if ( lastbins ) free( lastbins ); + if ( advances ) free( advances ); - gbinqtys = malloc( sizeof(float)*bins ); - gbinqtyc = malloc( sizeof(float)*bins ); - phis = malloc( sizeof(float)*bins ); - lastbins = malloc( sizeof(float)*bins ); - advances = malloc( sizeof(float)*bins ); - - memset( gbinqtys, 0, sizeof(float)*bins ); - memset( gbinqtyc, 0, sizeof(float)*bins ); - memset( phis, 0, sizeof(float)*bins ); - memset( lastbins, 0, sizeof(float)*bins ); + gbinqtys = malloc( sizeof( float ) * bins ); + gbinqtyc = malloc( sizeof( float ) * bins ); + phis = malloc( sizeof( float ) * bins ); + lastbins = malloc( sizeof( float ) * bins ); + advances = malloc( sizeof( float ) * bins ); + memset( gbinqtys, 0, sizeof( float ) * bins ); + memset( gbinqtyc, 0, sizeof( float ) * bins ); + memset( phis, 0, sizeof( float ) * bins ); + memset( lastbins, 0, sizeof( float ) * bins ); } - memcpy( outbins, lastbins, sizeof(float)*bins ); + memcpy( outbins, lastbins, sizeof( float ) * bins ); - for( i = 0; i < bins; i++ ) + for ( i = 0; i < bins; i++ ) { - float freq = frequencies[i]; - advances[i] = 3.14159*2.0/freq; + float freq = frequencies[ i ]; + advances[ i ] = 3.14159 * 2.0 / freq; } gbins = bins; @@ -160,36 +161,28 @@ void DoDFTProgressive( float * outbins, float * frequencies, int bins, const flo gspeedup = speedup; gq = q; - place_in_data_buffer = (place_in_data_buffer+1)%size_of_data_buffer; + place_in_data_buffer = ( place_in_data_buffer + 1 ) % size_of_data_buffer; int didrun = 0; - for( i = last_place; i != place_in_data_buffer; i = (i+1)%size_of_data_buffer ) + for ( i = last_place; i != place_in_data_buffer; i = ( i + 1 ) % size_of_data_buffer ) { - float fin = ((float)((int)(databuffer[i] * 127))) / 127.0; //simulate 8-bit input (it looks FINE!) + float fin = ( (float)( (int)( databuffer[ i ] * 127 ) ) ) / + 127.0; // simulate 8-bit input (it looks FINE!) HandleProgressive( fin ); didrun = 1; } last_place = place_in_data_buffer; - if( didrun ) - { - memcpy( lastbins, outbins, sizeof(float)*bins ); - } - -/* for( i = 0; i < bins; i++ ) - { - printf( "%0.2f ", outbins[i]*100 ); - } - printf( "\n" );*/ + if ( didrun ) { memcpy( lastbins, outbins, sizeof( float ) * bins ); } + /* for( i = 0; i < bins; i++ ) + { + printf( "%0.2f ", outbins[i]*100 ); + } + printf( "\n" );*/ } - - - - - /////////////////////////////INTEGER DFT @@ -223,111 +216,111 @@ void HandleProgressiveInt( int8_t sample1, int8_t sample2 ) //Estimated 78 minimum instructions... So for two pairs each... just over 4ksps, theoretical. //Running overall at ~2kHz. With GCC: YUCK! 102 cycles!!! - for( i = 0; i < gbins; i++ ) //Loop, fixed size = 3 + 2 cycles N/A + for( i = 0; i < gbins; i++ ) //Loop, fixed size = 3 + 2 cycles N/A { //12 cycles MIN - adv = *(ds++); //Read, indirect from RAM (and increment) 2+2 cycles 4 - ipl = *(ds++); //Read, indirect from RAM (and increment) 2+2 cycles 4 + adv = *(ds++); //Read, indirect from RAM (and increment) 2+2 cycles 4 + ipl = *(ds++); //Read, indirect from RAM (and increment) 2+2 cycles 4 //13 cycles MIN - ipl += adv; //Advance, 16bit += 16bit, 1 + 1 cycles 2 - localipl = (ipl>>8)<<1; //Select upper 8 bits 1 cycles 1 *** AS/IS: 4 + ipl += adv; //Advance, 16bit += 16bit, 1 + 1 cycles 2 + localipl = (ipl>>8)<<1; //Select upper 8 bits, 1 cycle 1 *** AS/IS: 4 st = &sintable[localipl]; - s1 = *(st++); //Read s1 component out of table. 2+2 cycles 2 - c1 = *st; //Read c1 component out of table. 2 cycles 2 *** AS/IS: 4 + s1 = *(st++); //Read s1 component out of table. 2+2 cycles 2 + c1 = *st; //Read c1 component out of table. 2 cycles 2 *** AS/IS: 4 - ts = (s1 * sample1); // 8 x 8 multiply signed + copy R1 out. zero MSB ts 2 ->Deferred - tc = (c1 * sample1); // 8 x 8 multiply signed + copy R1 out. zero MSB tc 2 ->Deferred + ts = (s1 * sample1); // 8 x 8 multiply signed + copy R1 out. zero MSB ts 2 ->Deferred + tc = (c1 * sample1); // 8 x 8 multiply signed + copy R1 out. zero MSB tc 2 ->Deferred //15 cycles MIN - ipl += adv; //Advance, 16bit += 16bit, 1 + 1 cycles 2 - localipl = (ipl>>8)<<1; //Select upper 8 bits 1 cycles 1 *** AS/IS: 4 + ipl += adv; //Advance, 16bit += 16bit, 1 + 1 cycles 2 + localipl = (ipl>>8)<<1; //Select upper 8 bits 1 cycles 1 *** AS/IS: 4 - // need to load Z with 'sintable' and add localipl 2 + // need to load Z with 'sintable' and add localipl 2 st = &sintable[localipl]; - s1 = *(st++); //Read s1 component out of table. 2 cycles 2 - c1 = *st; //Read c1 component out of table. 2 cycles 2 *** AS/IS: 4 + s1 = *(st++); //Read s1 component out of table. 2 cycles 2 + c1 = *st; //Read c1 component out of table. 2 cycles 2 *** AS/IS: 4 - ts += (s1 * sample2); // 8 x 8 multiply signed + add R1 out. 3 ->Deferred - tc += (c1 * sample2); // 8 x 8 multiply signed + add R1 out. 3 ->Deferred + ts += ( s1 * sample2 ); // 8 x 8 multiply signed + add R1 out. 3 ->Deferred + tc += ( c1 * sample2 ); // 8 x 8 multiply signed + add R1 out. 3 ->Deferred - //Add TS and TC to the datspace stuff. (24 instructions) - tmp1 = (*ds); //Read out, sin component. 4 Accurate. - tmp1 -= tmp1>>7; //Subtract from the MSB (with carry) 2 -> 6 AS/IS: 7+7 = 14 - tmp1 += ts>>7; //Add MSBs with carry 2 -> 6 AS/IS: 6 + // Add TS and TC to the datspace stuff. (24 instructions) + tmp1 = ( *ds ); // Read out, sin component. 4 Accurate + tmp1 -= tmp1 >> 7; // Subtract from the MSB (with carry) 2 -> 6 AS/IS: 7+7 = 14 + tmp1 += ts >> 7; // Add MSBs with carry 2 -> 6 AS/IS: 6 - *(ds++) = tmp1; //Store values back 4 + *( ds++ ) = tmp1; // Store values back 4 - tmp1 = *ds; //Read out, sin component. 4 - tmp1 -= tmp1>>7; //Subtract from the MSB (with carry) 2 -> 6 AS/IS: 7+7 = 14 - tmp1 += tc>>7; //Add MSBs with carry 2 -> 6 AS/IS: 6 + tmp1 = *ds; // Read out, sin component. 4 + tmp1 -= tmp1 >> 7; // Subtract from the MSB (with carry) 2 -> 6 AS/IS: 7+7 = 14 + tmp1 += tc >> 7; // Add MSBs with carry 2 -> 6 AS/IS: 6 - *ds++ = tmp1; //Store values back 4 + *ds++ = tmp1; // Store values back 4 - *(ds-3) = ipl; //Store values back 4 AS/IS: 6 + *( ds - 3 ) = ipl; // Store values back 4 AS/IS: 6 //AS-IS: 8 loop overhead. } } -void DoDFTProgressiveInteger( float * outbins, float * frequencies, int bins, const float * databuffer, int place_in_data_buffer, int size_of_data_buffer, float q, float speedup ) +void DoDFTProgressiveInteger( float *outbins, float *frequencies, int bins, const float *databuffer, + int place_in_data_buffer, int size_of_data_buffer, float q, float speedup ) { int i; static int last_place; - if( !donefirstrun ) + if ( !donefirstrun ) { donefirstrun = 1; - for( i = 0; i < 256; i++ ) + for ( i = 0; i < 256; i++ ) { - sintable[i*2+0] = (int8_t)((sinf( i / 256.0 * 6.283 ) * 127.0)); - sintable[i*2+1] = (int8_t)((cosf( i / 256.0 * 6.283 ) * 127.0)); + sintable[ i * 2 + 0 ] = ( int8_t )( ( sinf( i / 256.0 * 6.283 ) * 127.0 ) ); + sintable[ i * 2 + 1 ] = ( int8_t )( ( cosf( i / 256.0 * 6.283 ) * 127.0 ) ); } } - if( gbins != bins ) + if ( gbins != bins ) { gbins = bins; - if( datspace ) free( datspace ); + if ( datspace ) free( datspace ); datspace = malloc( bins * 2 * 4 ); } - - for( i = 0; i < bins; i++ ) + + for ( i = 0; i < bins; i++ ) { - float freq = frequencies[i]; - datspace[i*4] = 65536.0/freq; + float freq = frequencies[ i ]; + datspace[ i * 4 ] = 65536.0 / freq; } - for( i = last_place; i != ( place_in_data_buffer&0xffffe ); i = (i+2)%size_of_data_buffer ) + for ( i = last_place; i != ( place_in_data_buffer & 0xffffe ); + i = ( i + 2 ) % size_of_data_buffer ) { - int8_t ifr1 = (int8_t)( ((databuffer[i+0]) ) * 127 ); - int8_t ifr2 = (int8_t)( ((databuffer[i+1]) ) * 127 ); -// printf( "%d %d\n", i, place_in_data_buffer&0xffffe ); + int8_t ifr1 = ( int8_t )( ( ( databuffer[ i + 0 ] ) ) * 127 ); + int8_t ifr2 = ( int8_t )( ( ( databuffer[ i + 1 ] ) ) * 127 ); + // printf( "%d %d\n", i, place_in_data_buffer&0xffffe ); HandleProgressiveInt( ifr1, ifr2 ); } - last_place = place_in_data_buffer&0xfffe; + last_place = place_in_data_buffer & 0xfffe; - //Extract bins. - for( i = 0; i < bins; i++ ) + // Extract bins. + for ( i = 0; i < bins; i++ ) { - int16_t isps = datspace[i*4+2]; - int16_t ispc = datspace[i*4+3]; - int16_t mux = ( (isps/256) * (isps/256)) + ((ispc/256) * (ispc/256)); -// printf( "%d (%d %d)\n", mux, isps, ispc ); - outbins[i] = sqrt( mux )/100.0; + int16_t isps = datspace[ i * 4 + 2 ]; + int16_t ispc = datspace[ i * 4 + 3 ]; + int16_t mux = ( ( isps / 256 ) * ( isps / 256 ) ) + ( ( ispc / 256 ) * ( ispc / 256 ) ); + // printf( "%d (%d %d)\n", mux, isps, ispc ); + outbins[ i ] = sqrt( mux ) / 100.0; } -// printf( "\n"); + // printf( "\n"); } - - #endif diff --git a/colorchord2/main.c b/colorchord2/main.c index b6a01e4..57a41e2 100644 --- a/colorchord2/main.c +++ b/colorchord2/main.c @@ -216,7 +216,7 @@ void HandleMotion( int x, int y, int mask ) void SoundCB( struct CNFADriver *sd, short *out, short *in, int framesp, int framesr ) { - int channelin = sd->channelsRec; + int channelin = sd->channelsRec; int channelout = sd->channelsPlay; // Load the samples into a ring buffer. Split the channels from interleved to one per buffer. @@ -237,14 +237,14 @@ void SoundCB( struct CNFADriver *sd, short *out, short *in, int framesp, int fra } fo /= channelin; sound[ soundhead ] = fo * in_amplitude; - soundhead = ( soundhead + 1 ) % SOUNDCBSIZE; + soundhead = ( soundhead + 1 ) % SOUNDCBSIZE; } else { float f = in[ i * channelin + sample_channel ] / 32767.; if ( f > 1 || f < -1 ) f = ( f > 0 ) ? 1 : -1; sound[ soundhead ] = f * in_amplitude; - soundhead = ( soundhead + 1 ) % SOUNDCBSIZE; + soundhead = ( soundhead + 1 ) % SOUNDCBSIZE; } } SoundEventHappened( framesr, in, 0, channelin ); @@ -253,7 +253,7 @@ void SoundCB( struct CNFADriver *sd, short *out, short *in, int framesp, int fra if ( out ) { - memset(out, 0, framesp * channelout); + memset( out, 0, framesp * channelout ); SoundEventHappened( framesp, out, 1, channelout ); } } @@ -329,7 +329,7 @@ int main( int argc, char **argv ) WSADATA wsaData; WSAStartup( 0x202, &wsaData ); #elif defined( ANDROID ) - int hasperm = AndroidHasPermissions( "READ_EXTERNAL_STORAGE" ); + int hasperm = AndroidHasPermissions( "READ_EXTERNAL_STORAGE" ); int haspermInternet = AndroidHasPermissions( "INTERNET" ); if ( !hasperm ) AndroidRequestAppPermissions( "READ_EXTERNAL_STORAGE" ); if ( !haspermInternet ) AndroidRequestAppPermissions( "INTERNET" ); @@ -346,10 +346,10 @@ int main( int argc, char **argv ) int frames = 0; double ThisTime; double SecToWait; - double LastFPSTime = OGGetAbsoluteTime(); + double LastFPSTime = OGGetAbsoluteTime(); double LastFrameTime = OGGetAbsoluteTime(); - CNFGBGColor = 0x800000; - CNFGDialogColor = 0x444444; + CNFGBGColor = 0x800000; + CNFGDialogColor = 0x444444; // Generate the window title char title[ 1024 ]; @@ -383,15 +383,14 @@ int main( int argc, char **argv ) *ThisDriver = 0; ThisDriver++; } - + printf( "Loading: %s\n", TDStart ); outdriver[ i ] = SetupOutDriver( TDStart ); } free( OutDriverNames ); - do - { + do { // Initialize Sound sd = CNFAInit( sound_source, "colorchord", &SoundCB, GetParameterI( "samplerate", 44100 ), GetParameterI( "samplerate", 44100 ), GetParameterI( "channels", 2 ), @@ -399,7 +398,7 @@ int main( int argc, char **argv ) GetParameterS( "devplay", 0 ), GetParameterS( "devrecord", 0 ), NULL ); if ( sd ) break; - + CNFGColor( 0xffffff ); CNFGPenX = 10; CNFGPenY = 100; @@ -453,9 +452,9 @@ int main( int argc, char **argv ) if ( !headless ) { // Handle outputs. - int freqbins = nf->freqbins; + int freqbins = nf->freqbins; int note_peaks = freqbins / 2; - int freqs = freqbins * nf->octaves; + int freqs = freqbins * nf->octaves; // Do a bunch of debugging. if ( show_debug_basic && !is_suspended ) @@ -473,11 +472,11 @@ int main( int argc, char **argv ) // Draw the folded bins for ( int bin = 0; bin < freqbins; bin++ ) { - const float x0 = bin / ( float )freqbins * ( float )screenx; - const float x1 = ( bin + 1 ) / ( float )freqbins * ( float )screenx; - const float amp = nf->folded_bins[ bin ] * 250.0; - const float note = ( float )( bin + 0.5 ) / freqbins; - CNFGDialogColor = CCtoHEX( note, 1.0, 1.0 ); + const float x0 = bin / (float)freqbins * (float)screenx; + const float x1 = ( bin + 1 ) / (float)freqbins * (float)screenx; + const float amp = nf->folded_bins[ bin ] * 250.0; + const float note = (float)( bin + 0.5 ) / freqbins; + CNFGDialogColor = CCtoHEX( note, 1.0, 1.0 ); CNFGDrawBox( x0, 400 - amp, x1, 400 ); } CNFGDialogColor = 0xf0f000; @@ -486,15 +485,15 @@ int main( int argc, char **argv ) for ( int peak = 0; peak < note_peaks; peak++ ) { if ( nf->note_amplitudes_out[ peak ] < 0 ) continue; - float note = ( float )nf->note_positions[ peak ] / freqbins; + float note = (float)nf->note_positions[ peak ] / freqbins; CNFGDialogColor = CCtoHEX( note, 1.0, 1.0 ); - const int x1 = ( ( float )peak / note_peaks ) * screenx; - const int x2 = ( ( float )( peak + 1 ) / note_peaks ) * screenx; - const int y1 = 480 - nf->note_amplitudes_out[ peak ] * 100; - const int y2 = 480; + const int x1 = ( (float)peak / note_peaks ) * screenx; + const int x2 = ( (float)( peak + 1 ) / note_peaks ) * screenx; + const int y1 = 480 - nf->note_amplitudes_out[ peak ] * 100; + const int y2 = 480; CNFGDrawBox( x1, y1, x2, y2 ); - CNFGPenX = ( ( float )( peak + .4 ) / note_peaks ) * screenx; + CNFGPenX = ( (float)( peak + .4 ) / note_peaks ) * screenx; CNFGPenY = screeny - 30; sprintf( stt, "%d\n%0.0f", nf->enduring_note_id[ peak ], nf->note_amplitudes2[ peak ] * 1000.0 ); @@ -503,16 +502,16 @@ int main( int argc, char **argv ) // Let's draw the o-scope. int thissoundhead = soundhead; - thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; - int lasty = sound[ thissoundhead ] * 128 + 128; - thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; - int thisy = sound[ thissoundhead ] * 128 + 128; - thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; + thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; + int lasty = sound[ thissoundhead ] * 128 + 128; + thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; + int thisy = sound[ thissoundhead ] * 128 + 128; + thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; for ( int i = 0; i < screenx; i++ ) { CNFGTackSegment( i, lasty, i + 1, thisy ); - lasty = thisy; - thisy = sound[ thissoundhead ] * 128 + 128; + lasty = thisy; + thisy = sound[ thissoundhead ] * 128 + 128; thissoundhead = ( thissoundhead - 1 + SOUNDCBSIZE ) % SOUNDCBSIZE; } } @@ -527,7 +526,7 @@ int main( int argc, char **argv ) for ( int x_val = -1; x_val < screenx; x_val++ ) { // Calculate the value of the histogram at the current screen position - float hist_point = ( float )x_val / ( float )screenx * freqbins - 0.5; + float hist_point = (float)x_val / (float)screenx * freqbins - 0.5; float thishistval = CalcHistAt( hist_point, nf->freqbins, nf->dists, nf->dists_count ); @@ -542,10 +541,10 @@ int main( int argc, char **argv ) // Draw the bins for ( int bin = 0; bin < freqs; bin++ ) { - float x0 = bin / ( float )freqs * ( float )screenx; - float x1 = ( bin + 1 ) / ( float )freqs * ( float )screenx; - float amp = nf->outbins[ bin ] * 250.0; - float note = ( float )bin / freqbins; + float x0 = bin / (float)freqs * (float)screenx; + float x1 = ( bin + 1 ) / (float)freqs * (float)screenx; + float amp = nf->outbins[ bin ] * 250.0; + float note = (float)bin / freqbins; CNFGDialogColor = CCtoHEX( note, 1.0, 1.0 ); CNFGDrawBox( x0, 0, x1, amp ); } @@ -606,7 +605,7 @@ int main( int argc, char **argv ) printf( "FPS: %d\n", frames ); #endif lastfps = frames; - frames = 0; + frames = 0; LastFPSTime += 1; } @@ -615,7 +614,7 @@ int main( int argc, char **argv ) SecToWait = cpu_autolimit_interval - ( ThisTime - LastFrameTime ); LastFrameTime += cpu_autolimit_interval; if ( SecToWait < -.1 ) LastFrameTime = ThisTime - .1; - if ( SecToWait > 0 ) OGUSleep( ( int )( SecToWait * 1000000 ) ); + if ( SecToWait > 0 ) OGUSleep( (int)( SecToWait * 1000000 ) ); } if ( !is_suspended ) SetEnvValues( 0 ); From e87d16e90586eaee0d98bc29be110e64c5ebd444 Mon Sep 17 00:00:00 2001 From: Sam Ellicott Date: Sat, 22 May 2021 15:47:42 -0400 Subject: [PATCH 9/9] Update Makefile with an opengl option --- colorchord2/Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/colorchord2/Makefile b/colorchord2/Makefile index 76dee80..f0dab15 100644 --- a/colorchord2/Makefile +++ b/colorchord2/Makefile @@ -8,7 +8,7 @@ WINGCCFLAGS:= -g -DICACHE_FLASH_ATTR= -I../embeddedcommon -Icnfa -Irawdraw -I. - WINLDFLAGS:=-lwinmm -lgdi32 -lws2_32 -lsetupapi #CFLAGS:=-g -O1 -flto -Wall -ffast-math -I../embeddedcommon -I. -Icnfa -Irawdraw -DICACHE_FLASH_ATTR= -CFLAGS:=-g -O1 -Wall -ffast-math -I../embeddedcommon -I. -Icnfa -Irawdraw -DICACHE_FLASH_ATTR= +CFLAGS:=-g -O2 -Wall -ffast-math -I../embeddedcommon -I. -Icnfa -Irawdraw -DICACHE_FLASH_ATTR= ifneq ($(OS),Windows_NT) ifneq ($(shell uname),Darwin) @@ -23,6 +23,7 @@ EXTRALIBS+=-ludev EXTRALIBS+=$(shell pkg-config --libs alsa) EXTRALIBS+=$(shell pkg-config --libs libpulse) EXTRALIBS+=$(shell pkg-config --libs libpulse-simple) +OPENGLLIBS=$(shell pkg-config --cflags --libs glut) endif OBJS:=main.o dft.o decompose.o filter.o color.o notefinder.o util.o outdrivers.o $(OUTS) parameters.o chash.o hook.o ../embeddedcommon/DFT32.o configs.o @@ -30,6 +31,9 @@ OBJS:=main.o dft.o decompose.o filter.o color.o notefinder.o util.o outdrivers. colorchord : $(OBJS) $(CC) -o $@ $^ $(EXTRALIBS) $(RAWDRAWLIBS) +colorchord-opengl : $(OBJS) + $(CC) -o $@ $^ -DCNFGOGL $(EXTRALIBS) $(OPENGLLIBS) $(RAWDRAWLIBS) + colorchord.exe : main.c dft.c decompose.c filter.c color.c notefinder.c util.c outdrivers.c parameters.c chash.c OutputVoronoi.c OutputProminent.c DisplayArray.c OutputLinear.c DisplayPie.c DisplayNetwork.c hook.c RecorderPlugin.c ../embeddedcommon/DFT32.c OutputCells.c configs.c hidapi.c DisplayHIDAPI.c $(WINGCC) $(WINGCCFLAGS) -o $@ $^ $(WINLDFLAGS)