// Octave-band Spectrum Analyzer and CPU Heater // by Perry R. Cook, March 2008, updated Jan 2014 adc => Gain inp; BPF b[10]; gain g[10]; gain g2[10]; OnePole p[10]; ["20Hz","40Hz","80Hz","160Hz","320Hz", "640Hz","1280Hz","2.5kHz","5kHz","10kHz"] @=> string names[]; MAUI_View myWinder; myWinder.size(250,470); MAUI_Slider disp[10]; MAUI_Button exit; exit.name("Exit"); exit.position(0,420);exit.size(100,65); MAUI_Slider inGain; inGain.range(0.0,10.0); inGain.size(150,60);inGain.position(90,420); inGain.name("Input gain");inGain.value(1.0); myWinder.addElement(inGain); myWinder.addElement(exit); int i; 20.0 => float basefreq; 10.0 => adc.gain; for (0=>i;i<10;1+=>i) { inp => b[i] => g[i] => g2[i] => p[i] => blackhole; b[i] => g2[i]; // hack to get around 3 => g2[i].op; // multi-patch "feature" 0.9995 => p[i].pole; // smoothing 2.0 => b[i].Q; basefreq => b[i].freq; <<< "Band",i,"= ", basefreq >>>; 2.0 * basefreq => basefreq; disp[i].position(0.0,40.0*i); disp[i].range(0.0,1.0); disp[i].precision(1); disp[i].name(names[i]); myWinder.addElement(disp[i]); } myWinder.display(); while (!exit.state()) { for (0=>i;i<10;1+=>i) { 0.5 * (Math.log10(p[i].last() + 0.01) + 2.0) => disp[i].value; } inGain.value() => inp.gain; 0.100 :: second => now; }