// Octave-band Spectrum Analyzer and CPU Heater, // by Perry R. Cook, April 2008, updated Jan 2014 BPF b[10]; Gain g[10]; OnePole p[10]; MAUI_View myWinder; myWinder.size(230.0,180.0); MAUI_Button disp[10]; MAUI_Button exit; exit.name("Exit"); exit.size(70,65); exit.position(0,115); myWinder.addElement(exit); MAUI_Slider vol; vol.position(60,110); vol.size(170,70); vol.name("Input Gain"); vol.range(0.0,50.0); 8.0 => vol.value; myWinder.addElement(vol); 1.0 => adc.gain; // global gain control adc => Gain inGain; for (0=>int i;i<10;1+=>i) { inGain => b[i] => g[i] => p[i] => blackhole; b[i] => g[i]; // make a 3 => g[i].op; // squarer 0.999 => p[i].pole; // and smoothing filter 2.0 => b[i].Q; 20.0 * Math.pow(2.0,i) => b[i].freq; // octave bands disp[i].size(56.0,30.0); disp[i].position(20.0*i,80.0); myWinder.addElement(disp[i]); } myWinder.display(); float temp; while (!exit.state()) { 0.10 :: second => now; vol.value() => inGain.gain; for (0=>int i;i<10;1+=>i) { 100.0 * (0.5 * (Math.log10(p[i].last() + 0.01) + 2.0)) => temp; if (temp > 100) 100 => temp; disp[i].size(56.0,temp+42.0); 100.0 - temp => temp; disp[i].position(20.0*i,temp); myWinder.addElement(disp[i]); } } myWinder.destroy();