From 97f0635a111e17bb80724760c758a353dfa62dca Mon Sep 17 00:00:00 2001 From: Jakob Date: Tue, 27 Jun 2023 22:39:35 +0200 Subject: [PATCH] progress on analyzer but now with touchosc --- src/2023-06-21.festl_is/Makefile | 4 +- .../GUI_BUILDER_DATA/gui.ser.4.4 | Bin 0 -> 27605 bytes .../audio_processing_gui/audioAnalysis.pde | 51 +++++++ .../audio_processing_gui.pde | 22 +++ .../audio_processing_gui/data/list_384393 | 10 ++ .../audio_processing_gui/gui.pde | 142 ++++++++++++++++++ .../audio_processing_gui/oscThings.pde | 0 .../audio_processing_gui/user_gui_palette.png | Bin 0 -> 1658 bytes .../audio_processing_with_touchosc/audio.pde | 52 +++++++ .../audio_processing_with_touchosc.pde | 19 +++ .../oscStuff.pde | 35 +++++ src/2023-06-21.festl_is/todo.md | 1 + 12 files changed, 334 insertions(+), 2 deletions(-) create mode 100644 src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/GUI_BUILDER_DATA/gui.ser.4.4 create mode 100644 src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/audioAnalysis.pde create mode 100644 src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/audio_processing_gui.pde create mode 100644 src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/data/list_384393 create mode 100644 src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/gui.pde create mode 100644 src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/oscThings.pde create mode 100644 src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/user_gui_palette.png create mode 100644 src/2023-06-21.festl_is/processing_sketches/audio_processing_with_touchosc/audio.pde create mode 100644 src/2023-06-21.festl_is/processing_sketches/audio_processing_with_touchosc/audio_processing_with_touchosc.pde create mode 100644 src/2023-06-21.festl_is/processing_sketches/audio_processing_with_touchosc/oscStuff.pde diff --git a/src/2023-06-21.festl_is/Makefile b/src/2023-06-21.festl_is/Makefile index 57bcf89..a497bc6 100644 --- a/src/2023-06-21.festl_is/Makefile +++ b/src/2023-06-21.festl_is/Makefile @@ -2,7 +2,7 @@ # glslViewer order matters, single-dash options need to be before doubledashes? (at least for -p) test: - glslViewer main.frag video.mp4 -w 960 -h 540 -p 8881 -e "error_screen,off" --nocursor --fps30 + glslViewer main.frag video.mp4 -w 960 -h 540 -p 4242 -e "error_screen,off" --nocursor --fps30 test-gits: - glslViewer main.frag gits.mp4 -w 960 -h 540 -p 8881 -e "error_screen,off" --nocursor --fps30 + glslViewer main.frag gits.mp4 -w 960 -h 540 -p 4242 -e "error_screen,off" --nocursor --fps30 diff --git a/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/GUI_BUILDER_DATA/gui.ser.4.4 b/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/GUI_BUILDER_DATA/gui.ser.4.4 new file mode 100644 index 0000000000000000000000000000000000000000..7bb8ca85ee6cb5f578e189e66fc5b0340c8c02a2 GIT binary patch literal 27605 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 literal 0 HcmV?d00001 diff --git a/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/audioAnalysis.pde b/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/audioAnalysis.pde new file mode 100644 index 0000000..7546d7f --- /dev/null +++ b/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/audioAnalysis.pde @@ -0,0 +1,51 @@ +import ddf.minim.*; +import ddf.minim.analysis.*; + +Minim minim; +AudioInput myAudio; + +// beat detection with sound energy +BeatDetect myBeat; +int myBeatMax = 20; // sync with gui +int myBeatCurrent = 0; + +FFT myFFT; + +void setupAudioAnalysis() { + minim = new Minim(this); + myAudio = minim.getLineIn(); // Minim.STEREO, bufferSize=1024, sampleRate=44100, int bitDepth=16 + + // beat detection setup + myBeat = new BeatDetect(); + + // fft setup + myFFT = new FFT(myAudio.bufferSize(), myAudio.sampleRate()); + myFFT.logAverages(22, 12); // (22,12) -> 120 averages + myFFT.window(FFT.NONE); + + // debug + println("[debug][audio]: number of fft bins: "+myFFT.avgSize()); +} + +void drawAudioAnalysis() { + // beat detection processing + if(myBeatCurrent > 0) { + myBeatCurrent--; // linear decay + } + myBeat.detect(myAudio.mix); + if(myBeat.isOnset()) { + myBeatCurrent = myBeatMax; + } + // draw beat detection + fill(0);noStroke(); + rect(160,40,40,40); + fill(255); + circle(160+20,40+20,getBeatDetectNormalized()*36); + + // fft processing + +} + +float getBeatDetectNormalized() { + return (myBeatCurrent / float(myBeatMax)); +} diff --git a/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/audio_processing_gui.pde b/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/audio_processing_gui.pde new file mode 100644 index 0000000..dcc921e --- /dev/null +++ b/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/audio_processing_gui.pde @@ -0,0 +1,22 @@ +import g4p_controls.*; + + + +color bgColor = #333344; + +void setup() { + size(900,900); + frameRate(30); + background(bgColor); + + setupAudioAnalysis(); + + createGUI(); +} + +void draw() { + background(bgColor); + + drawAudioAnalysis(); + +} diff --git a/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/data/list_384393 b/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/data/list_384393 new file mode 100644 index 0000000..ad4b5f7 --- /dev/null +++ b/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/data/list_384393 @@ -0,0 +1,10 @@ +none +bartlett +bartletthann +blackmann +cosine +gauss +hammin +hann +lanczos +triangular diff --git a/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/gui.pde b/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/gui.pde new file mode 100644 index 0000000..bfb42c6 --- /dev/null +++ b/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/gui.pde @@ -0,0 +1,142 @@ +/* ========================================================= + * ==== WARNING === + * ========================================================= + * The code in this tab has been generated from the GUI form + * designer and care should be taken when editing this file. + * Only add/edit code inside the event handlers i.e. only + * use lines between the matching comment tags. e.g. + + void myBtnEvents(GButton button) { //_CODE_:button1:12356: + // It is safe to enter your event code here + } //_CODE_:button1:12356: + + * Do not rename this tab! + * ========================================================= + */ + +public void gui_fftWindowing_click(GDropList source, GEvent event) { //_CODE_:gui_fftWindowing:384393: + //println("dropList1 - GDropList >> GEvent." + event + " @ " + millis()); + String selected = source.getSelectedText(); + switch(selected) { + case "bartlett": + myFFT.window(FFT.BARTLETT); + case "bartletthann": + myFFT.window(FFT.BARTLETTHANN); + case "blackmann": + myFFT.window(FFT.BLACKMAN); + case "cosine": + myFFT.window(FFT.COSINE); + case "gauss": + myFFT.window(FFT.GAUSS); + case "hammin": + myFFT.window(FFT.HAMMING); + case "hann": + myFFT.window(FFT.HANN); + case "lanczos": + myFFT.window(FFT.LANCZOS); + case "triangular": + myFFT.window(FFT.TRIANGULAR); + case "none": + default: + myFFT.window(FFT.NONE); + } +} //_CODE_:gui_fftWindowing:384393: + +public void gui_fftAmpBeginFrac_change(GSlider source, GEvent event) { //_CODE_:gui_fftAmpBeginFrac:516902: + println("slider1 - GSlider >> GEvent." + event + " @ " + millis()); +} //_CODE_:gui_fftAmpBeginFrac:516902: + +public void gui_baseAmp_change(GSlider source, GEvent event) { //_CODE_:gui_baseAmp:888464: + println("slider2 - GSlider >> GEvent." + event + " @ " + millis()); +} //_CODE_:gui_baseAmp:888464: + +public void gui_ampStart_change(GSlider source, GEvent event) { //_CODE_:gui_ampStart:865325: + println("slider1 - GSlider >> GEvent." + event + " @ " + millis()); +} //_CODE_:gui_ampStart:865325: + +public void gui_ampStep_change(GSlider source, GEvent event) { //_CODE_:gui_ampStep:498343: + println("slider2 - GSlider >> GEvent." + event + " @ " + millis()); +} //_CODE_:gui_ampStep:498343: + +public void gui_beatDecay_change(GSlider source, GEvent event) { //_CODE_:gui_beatDecay:302227: + println("gui_beatDecay - GSlider >> GEvent." + event + " @ " + millis()); + myBeatMax = source.getValueI(); +} //_CODE_:gui_beatDecay:302227: + + + +// Create all the GUI controls. +// autogenerated do not edit +public void createGUI(){ + G4P.messagesEnabled(false); + G4P.setGlobalColorScheme(GCScheme.CYAN_SCHEME); + G4P.setMouseOverEnabled(false); + GButton.useRoundCorners(false); + surface.setTitle("Sketch Window"); + gui_fftWindowing = new GDropList(this, 100, 110, 100, 220, 10, 10); + gui_fftWindowing.setItems(loadStrings("list_384393"), 0); + gui_fftWindowing.addEventHandler(this, "gui_fftWindowing_click"); + label1 = new GLabel(this, 20, 110, 80, 20); + label1.setText("windowing:"); + label1.setOpaque(true); + label2 = new GLabel(this, 20, 140, 180, 20); + label2.setText("amp begin at bin fraction"); + label2.setOpaque(true); + label3 = new GLabel(this, 20, 210, 180, 20); + label3.setText("base amp"); + label3.setOpaque(true); + label4 = new GLabel(this, 20, 280, 180, 20); + label4.setText("amp start"); + label4.setOpaque(true); + gui_fftAmpBeginFrac = new GSlider(this, 20, 160, 180, 40, 10.0); + gui_fftAmpBeginFrac.setShowValue(true); + gui_fftAmpBeginFrac.setLimits(0.3, 0.0, 1.0); + gui_fftAmpBeginFrac.setNumberFormat(G4P.DECIMAL, 2); + gui_fftAmpBeginFrac.setOpaque(true); + gui_fftAmpBeginFrac.addEventHandler(this, "gui_fftAmpBeginFrac_change"); + gui_baseAmp = new GSlider(this, 20, 230, 180, 40, 10.0); + gui_baseAmp.setShowValue(true); + gui_baseAmp.setLimits(30.0, 1.0, 100.0); + gui_baseAmp.setNumberFormat(G4P.DECIMAL, 2); + gui_baseAmp.setOpaque(true); + gui_baseAmp.addEventHandler(this, "gui_baseAmp_change"); + label5 = new GLabel(this, 20, 350, 180, 20); + label5.setText("amp step"); + label5.setOpaque(true); + gui_ampStart = new GSlider(this, 20, 300, 180, 40, 10.0); + gui_ampStart.setShowValue(true); + gui_ampStart.setLimits(0.05, 0.005, 0.2); + gui_ampStart.setNumberFormat(G4P.DECIMAL, 3); + gui_ampStart.setOpaque(true); + gui_ampStart.addEventHandler(this, "gui_ampStart_change"); + gui_ampStep = new GSlider(this, 20, 370, 180, 40, 10.0); + gui_ampStep.setShowValue(true); + gui_ampStep.setLimits(0.02, 0.005, 0.2); + gui_ampStep.setNumberFormat(G4P.DECIMAL, 3); + gui_ampStep.setOpaque(true); + gui_ampStep.addEventHandler(this, "gui_ampStep_change"); + label6 = new GLabel(this, 20, 20, 180, 20); + label6.setText("simple beat decay"); + label6.setOpaque(true); + gui_beatDecay = new GSlider(this, 20, 40, 140, 40, 10.0); + gui_beatDecay.setShowValue(true); + gui_beatDecay.setLimits(30.0, 1.0, 60.0); + gui_beatDecay.setNumberFormat(G4P.DECIMAL, 2); + gui_beatDecay.setOpaque(true); + gui_beatDecay.addEventHandler(this, "gui_beatDecay_change"); +} + +// Variable declarations +// autogenerated do not edit +GDropList gui_fftWindowing; +GLabel label1; +GLabel label2; +GLabel label3; +GLabel label4; +GSlider gui_fftAmpBeginFrac; +GSlider gui_baseAmp; +GLabel label5; +GSlider gui_ampStart; +GSlider gui_ampStep; +GLabel label6; +GSlider gui_beatDecay; diff --git a/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/oscThings.pde b/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/oscThings.pde new file mode 100644 index 0000000..e69de29 diff --git a/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/user_gui_palette.png b/src/2023-06-21.festl_is/processing_sketches/audio_processing_gui/user_gui_palette.png new file mode 100644 index 0000000000000000000000000000000000000000..01204e582eefa366d430f34c43922ffdfbe664c4 GIT binary patch literal 1658 zcma)+3rtgI6vw{;S{`#H!-dE;Xl9~pQ+c#TfwvTa+xi zbXbWxV8g;@oJ@!49P%i=g*bGMxyw_e_Mru7#=N~eq__2QZ+DGx*%C2)$(M6-k}oI! z-}#^K%a1d+uJ8}>2LP-{PfN)HfJUV>;Oj+&p+HU)71oJT^F+x9cNdBFmI|2JdrNkM zY`&No&0;2siL|Hae2IK9V{X*`PP|jxI{)rqWG*v_KHPFbHFqU8o=Z9@$VkRc{Ix42{N5YJiRM(%G(CpT=?|aC zD#}>VCWJ_DG{_Xelf{Mh-+Gi&Yq1}AAdKO9_uMq91gA&GD}^$|Xj7thzD3G^S+F*Q z)C+@xdWpfYF@d3!Csx@~{kpmyc#&=C8B z+{^16s6~&5DLJP$tx@B3Gj)!dDNXWFJzx8N=|fc-NC^T1J_&4EAopb{07sT@>V!|* zH|stdd6?7dKASA*pWybUjaM>!KH6SmU|f+*D=KD} zAwTxey(TArx6<=sUGd#J+>mR~0l9dZ%r`N3gT<`XgsMI@MHD_c#FAk+j;iPO><>r1 z_wURhaQ%S`IDVGzT!~$~lMcU3=>O$|ghmH6uT32Zz}JRJf}O!nl!xS@4edKjXoGoJ zJ9KJMMqqVi3igNJ^=&%?xHLHtg=Cr;O<^O&jG*NiGRIIIPp47r6wV4HGY4L={g za_syR*)#dw;jl(K9;&x+W?oy=XfOCvt2gB+Xptg2$`t4=1nDRmueOm>XDX2n{_X5C zkL%%p(?mL&ZKNr8pK-2x>j-gmyN!*CMC zQT3>KN;%$!l+W&(ml*8Fi^0!}SnywC0%rdMXufw=woOv_^l);S!CiTY3*%#44{n`n zV`O8OG-4dTa1no`(-G+CMLhWKrgIX50fX%D4XS59rqC3k4btVWwmj7j0I#YEg-DJU zA#vU>P%O%dTFMU{%IkU}64TONu}jZ|fQp3G63%^#vR1w{=U3|*N=i9@=!+L!(*F|r z%?w{}3!AjCUiFPUmjnX&6OQ8h_ZdQTNe*Nm#I7O8u?}oWwh8IL$DGa^CixO@r_D#4 X)L7xZw>q@cXAja-GgB@n?K=7oyR_1E literal 0 HcmV?d00001 diff --git a/src/2023-06-21.festl_is/processing_sketches/audio_processing_with_touchosc/audio.pde b/src/2023-06-21.festl_is/processing_sketches/audio_processing_with_touchosc/audio.pde new file mode 100644 index 0000000..3846696 --- /dev/null +++ b/src/2023-06-21.festl_is/processing_sketches/audio_processing_with_touchosc/audio.pde @@ -0,0 +1,52 @@ +import ddf.minim.*; +import ddf.minim.analysis.*; + +Minim minim; +AudioInput myAudio; + +// beat detection with sound energy +BeatDetect myBeat; +final int BEAT_MAX = 60; +int myBeatMax = 20; // sync with gui +int myBeatCurrent = 0; + +FFT myFFT; + +void setupAudioAnalysis() { + minim = new Minim(this); + myAudio = minim.getLineIn(); // Minim.STEREO, bufferSize=1024, sampleRate=44100, int bitDepth=16 + + // beat detection setup + myBeat = new BeatDetect(); + + // fft setup + myFFT = new FFT(myAudio.bufferSize(), myAudio.sampleRate()); + myFFT.logAverages(22, 12); // (22,12) -> 120 averages + myFFT.window(FFT.NONE); + + // debug + println("[debug][audio]: number of fft bins: "+myFFT.avgSize()); +} + +void drawAudioAnalysis() { + // beat detection processing + if(myBeatCurrent > 0) { + myBeatCurrent--; // linear decay + } + myBeat.detect(myAudio.mix); + if(myBeat.isOnset()) { + myBeatCurrent = myBeatMax; + } + // draw beat detection + fill(0);noStroke(); + rect(20,20,40,40); + fill(255); + circle(20+20,20+20,getBeatDetectNormalized()*36); + + // fft processing + +} + +float getBeatDetectNormalized() { + return constrain((myBeatCurrent / float(myBeatMax)), 0.0f, 1.0f); +} diff --git a/src/2023-06-21.festl_is/processing_sketches/audio_processing_with_touchosc/audio_processing_with_touchosc.pde b/src/2023-06-21.festl_is/processing_sketches/audio_processing_with_touchosc/audio_processing_with_touchosc.pde new file mode 100644 index 0000000..d09cbf3 --- /dev/null +++ b/src/2023-06-21.festl_is/processing_sketches/audio_processing_with_touchosc/audio_processing_with_touchosc.pde @@ -0,0 +1,19 @@ +color bgColor = #333344; + +void setup() { + size(900,900); + frameRate(30); + background(bgColor); + + setupOsc(); + + setupAudioAnalysis(); +} + +void draw() { + background(bgColor); + + drawOsc(); + + drawAudioAnalysis(); +} diff --git a/src/2023-06-21.festl_is/processing_sketches/audio_processing_with_touchosc/oscStuff.pde b/src/2023-06-21.festl_is/processing_sketches/audio_processing_with_touchosc/oscStuff.pde new file mode 100644 index 0000000..3e1f477 --- /dev/null +++ b/src/2023-06-21.festl_is/processing_sketches/audio_processing_with_touchosc/oscStuff.pde @@ -0,0 +1,35 @@ +import oscP5.*; +import netP5.*; + +OscP5 oscObj; +final int RECEIVEPORT = 13337; +final int SENDPORT = 4242; +NetAddress shaderNetAddress; + +// sends osc messages +void setupOsc() { + oscObj = new OscP5(this, RECEIVEPORT); + shaderNetAddress = new NetAddress("127.0.0.1", SENDPORT); +} + +void drawOsc() { + if (frameCount % 5 == 0) { + OscMessage msg = new OscMessage("/osc_beat_val"); + msg.add(getBeatDetectNormalized()); + oscObj.send(msg, shaderNetAddress); + } +} + +// reacts to osc messages +void oscEvent(OscMessage msgIn) { + //print("### received an osc message."); + //print(" addrpattern: "+msgIn.addrPattern()); + //println(" typetag: "+msgIn.typetag()); + if (msgIn.checkAddrPattern("/beat_decay")==true) { + if (msgIn.checkTypetag("f")) { + myBeatMax = max(int(BEAT_MAX*msgIn.get(0).floatValue()), 1); + //println(" myBeatMax: "+myBeatMax+" f: "+msgIn.get(0).floatValue()); + return; + } + } +} diff --git a/src/2023-06-21.festl_is/todo.md b/src/2023-06-21.festl_is/todo.md index bbd292f..fa4e198 100644 --- a/src/2023-06-21.festl_is/todo.md +++ b/src/2023-06-21.festl_is/todo.md @@ -22,6 +22,7 @@ * [X] how does it default if no input is coming? can I adjust from glslViewer cli? -> black or last frame, doesn't matter * glslViewer * [.] passes + * [ ] look at inspiration: https://github.com/butterw/bShaders * [X] brigthness pass * [X] POC * [ ] edge detection pass