import ddf.minim.analysis.*;
Minim minim; AudioInput in; FFT fftLin;
{6, 61.74, 82.407, 110.00, 146.83, 185.00, 246.94, 0},
{6, 82.407, 110.00, 146.83, 196.00, 246.94, 329.63, 0},
{6, 73.416, 110.00, 146.83, 196.00, 246.94, 329.63, 0},
{4, 392.00, 261.63, 329.63, 440.00, 0, 0, 0},
{7, 61.74, 82.407, 110.00, 146.83, 196.00, 246.94, 329.63}};
{"Baritone Tuning" , "B", "E", "A", "D", "F#", "B", " "},
{"Standard Tuning" , "E", "A", "D", "G", "B", "E", " " },
{"Drop D Tuning" , "D", "A", "D", "G", "B", "E", " " },
{"Ukelele C6 Tuning" , "G", "C", "E", "A", " ", " ", " " },
{"7-String Guitar Tuning", "B", "E", "A", "D", "G", "B", "E" }};
in = minim.getLineIn(Minim.MONO, 4096, 44100);
int peakmax=0; float peakvalue=0;
for(int i = 0; i < in.bufferSize()-1; i++) {
if ( (in.mix.get(i))>(peakvalue) ) {
if ( abs(in.mix.get(i))<.02 ) {
peakvalue=in.mix.get(i)*.02/abs(in.mix.get(i))*2;
if ( i<in.bufferSize()/3 ) {
float freq = 0; int delay=0; float decay = 1.01; int space = -(height/16); int interval= 1; float viewscale; float wide=2*width/3;
float point1; float point2; float point3; float point4;
float wavesize=height/18; float smallwavesize=wavesize/2; float num_strings = Scales[scale_select][0];
fill(255,255,255); textSize(16);
text(Names[scale_select][0], 10,15);
for (int n=0; n<num_strings; n++) {
freq = Scales[scale_select][n+1];
space += height/(num_strings+.2);
text(Names[scale_select][n+1], 10, space);
delay = round(44100/freq); interval = delay; viewscale = wide/interval;
for (int i = 0; i < interval; i++) {
point1 = in.mix.get(i+peakmax)/peakvalue; point2 = in.mix.get(i+peakmax+1)/peakvalue;
point3 = in.mix.get(i+peakmax+delay)/peakvalue; point4 = in.mix.get(i+peakmax+delay+1)/peakvalue;
line( i*(viewscale)+30, space + point1*wavesize, (i+1)*(viewscale)+30, space + point2*wavesize );
line( i*(viewscale)+30, space + point3*wavesize*decay, (i+1)*(viewscale)+30, space + point4*wavesize*decay );
if (freq>200){ fftLin = new FFT( 4096, 44100 ); }
else { fftLin = new FFT( 4096, 22050 ); }
strokeWeight(4); stroke(150,150,150);
int startfreq = 2*width/3 + width/10;
line(startfreq, space, startfreq, space-fftLin.getFreq(freq*.84)*.5);
line(startfreq+5, space, startfreq+5, space-fftLin.getFreq(freq*.88)*.5);
line(startfreq+10, space, startfreq+10, space-fftLin.getFreq(freq*.92)*.5);
line(startfreq+15, space, startfreq+15, space-fftLin.getFreq(freq*.96)*.5);
line(startfreq+20, space, startfreq+20, space-fftLin.getFreq(freq)*.5);
line(startfreq+25, space, startfreq+25, space-fftLin.getFreq(freq*1.04)*.5);
line(startfreq+30, space, startfreq+30, space-fftLin.getFreq(freq*1.08)*.5);
line(startfreq+35, space, startfreq+35, space-fftLin.getFreq(freq*1.12)*.5);
line(startfreq+40, space, startfreq+40, space-fftLin.getFreq(freq*1.16)*.5);
int shift = 11*width/12; float circlesize = 3*wavesize/8; space = -height/18;
for (int n=0; n<num_strings; n++) {
freq = Scales[scale_select][n+1]; space += height/(num_strings+.2);
delay = round(44100/freq); interval = delay*2; viewscale = 2*PI/interval;
for (int i = 0; i < interval; i++) {
point1 = in.mix.get(i+peakmax)/peakvalue; point2 = in.mix.get(i+peakmax+1)/peakvalue;
point3 = in.mix.get(i+peakmax+delay)/peakvalue; point4 = in.mix.get(i+peakmax+delay+1)/peakvalue;
line(shift + (point1-point3)*circlesize*cos(i*viewscale), space + (point1-point3)*circlesize*sin(i*viewscale), shift + (point2-point4)*circlesize*cos(i*viewscale), space + (point2-point4)*circlesize*sin(i*viewscale));