// Octave-band Spectrum Analyzer and CPU Heater, // by Perry R. Cook, March 2008 // dressed up a bit in April 2012 BPF b[10]; Gain g[10]; OnePole p[10]; ["20Hz","40Hz","80Hz","160Hz","320Hz", "640Hz","1280Hz","2.5kHz","5kHz","10kHz"] @=> string names[]; MAUI_View myWinder; myWinder.size(200.0,500.0); MAUI_Button exit; exit.name("Exit"); exit.size(70,70); exit.position(0,420); myWinder.addElement(exit); MAUI_Slider vol; vol.position(40,415); vol.size(150,70); vol.name("Input Gain"); vol.range(0.0,20.0); 8.0 => vol.value; myWinder.addElement(vol); MAUI_Slider disp[10]; 1.0 => adc.gain; // global gain adjustments adc => Gain inGain; 5.0 => inGain.gain; 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.9995 => 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(200.0,70); disp[i].position(0.0,41.0*i); disp[i].range(0.0,1.0); disp[i].name(names[i]); myWinder.addElement(disp[i]); } myWinder.display(); while (!exit.state()) { 0.100 :: second => now; vol.value() => inGain.gain; for (0=>int i;i<10;1+=>i) 0.5 * (Math.log10(p[i].last() + 0.01) + 2.0) => disp[i].value; } myWinder.destroy();