DIY Audio Reactive Visual Synth/Generator in a Raspberry Pi

I’ve read and watch a lot about Andrei Jay and realise that what I’m looking for is a as cheap as possible DIY Audio Reactive Visual Synth/Generator in a Raspberry Pi that I can hook up to my Elektron gears (Audio IN + MIDI) and a projector (HDMI). So when I compose+play, I can get some inspiring visuals auto-created. :nerd_face: :boom: :exploding_head: :partying_face: :robot:

So I started digging!

:face_with_monocle: So far I found:

It is difficult to find such projects actually. Looked at Github, Etsy, Scanlinesxyz… a really didn’t found anything. There are a lot of content on Audio Reactive LED Stripes with a Raspberry Pi but I’m not really interested in that kind of creative process.
And also, these projects are pretty pricey in the end… Modular gears are not that far (like the Structure for example).

:telescope:Gonna continue digging!

Do you folks know other product in this category > DIY Audio Reactive Visual Generator in a Raspberry Pi?

2 Likes

not all is audio reactive but if you havnt seen already this is quite agood guide to some existing rpi video-art making projects:

some of these are open source and if not already audio reactive would prob not be too hard to add the features you wnt to them

just to clarify - are you looking for an existing product to buy that does this ? or looking to build or create (diy) something ?

because cost wise a custom solution would be cheaper - basically the cost of the pi and whatever cheap usb soundcard you can get working should do <$40 for sure if you resourceful. (a few of us here could prob give you pointers on where to start too down this path) but custom solutions also take a lot of time !

2 Likes

Awesome! :smiley: :boom: :boom:
I’m gonna check out all those links!!!

Thanks :pray:

1 Like

you can hook audio and midi into a computer into hydra I believe

here is a list of some other great software tools

2 Likes

hydra is a lil tricky on the pi, chromium takes up a lot of resources and to run from atom would require translating webgl to esgl (i think?). pi4 might be beefy enuf to do sd resolutions from chromium tho! id recommend taking a look at the autowaaaves code, working thru a couple of of examples on the pi and see what u can do from there. u could just literally copy and paste the entire audio reactive 2 parameters sections and rig up yr own visuals generator, or bypass my whole frequency spectrum thing and just do a straight rms volume to impact kind of thing like the critternguitari things do.
if using elektron gear tho a faster and more flexible option would be to bypass audioreactivity and just use midi sequencing for both internal and external parameters. use the same lfo for a filter sweep as for brightness on waaave pool, same envelope for a kick drum as for lumekey etc.

2 Likes

Interesting…

I’m testing a setup with these gears at the moment:

  • Elektron Analog Four mkii
  • Elektron Analog Heat
  • Akai MidiMix Midi Controller controlling the Elektron Analog Four mkii
  • A RaspberryPi MidiHub dealing with the MIDI signal

I want all these gears to “reactively” MIDI-controls

  • Waaave Pool / Auto Waaave (RPi1)
  • Super Haeckel Adventures 64 (RPi2) (btw the beta synth is amazing!!!)

So I started a sheet with all the CCs needed—>

CC Elektron Analog Four 4 mkii Parameters Elektron AnalogHeat Parameters Waaave Pool Parameters
1 Modwheel
2 Breath Controller
3 Performance A
4 Performance B
5 OSC COMMON Slide Time
7 AMP Volume Preset Volume 7
8 Performance C Dry/wet Mix 8
9 Performance D EQLow 9
10 AMP Pan EQ High 10
11 Performance E Wet Level 11
12 Drive 12
13 VCF Dirt 13
14 ENV to Filter 14
15 LFO to Filter 15
16 OSC1 Pitch ENV Threshold 16 Luma key
17 OSC2 Pitch ENV Base 17 Mix
18 Filter1 Frequency ENV Width 18 Hue_x
19 Filter2 Frequency ENV Mode 19 Sat_x
20 EnvF Depth A ENV Depth 20 Bright_x
21 EnvF Depth B ENV Depth 2 21 Temporal filter mix
22 Env2 Depth A LFO Speed 22 Temp filter Q
23 Env2 Depth B LFO Multiplier 23 Input boost
24 LFO1 Depth A LFO Fade 24
25 LFO1 Depth B LFO Mode 25
26 LFO2 Depth A LFO Start Phase 26
27 LFO2 Depth B LFO Depth 27
28 LFO Depth 2 28
29
30
31
32
33
34
35
36
37
38
39 motion recording on/off
40
41 H mirror
42 hue invert
43 bright invert
44 saturation invert
45 V mirror
46 Toroidal Universe
58 framebuffer reset
59 parameter reset/motion recording clear
60 luma key swap b/w
64 Performance F
65 Performance G
66 Performance H
67 Performance I
68 Performance J
69 OSC1 Level
70 OSC1 Waveform Circuit Select
71 OSC1 Sub Oscillator VCF Resonance feedback/feedforward mode switch
72 OSC1 Pulsewidth ENV Release
73 OSC1 PWM Speed ENV Attack
74 OSC1 PWM Depth VCF Frequency
75 Noise S&H ENV Destination
76 Noise Fade ENV Destination 2
77 Noise Level LFO Destination
78 OSC2 Level LFO Destination 2
79 OSC2 Waveform VCF Frequency Pan
80 OSC2 Sub Oscillator VCF Mode
81 OSC2 Pulsewidth
82 OSC2 PWM Speed
83 OSC2 PWM Depth LFO Waveform
84 OSC COMMON Sync Amount
85 OSC COMMON Bend Amount CV A Destination
86 Filter Overdrive CV A Depth
87 Vibrato Speed Expr. A Destination
88 Vibrato Depth Expr. A Depth
89 Filter1 Resonance CV B Destination
90 Filter2 Resonance CV B Depth
91 AMP Chorus Send Level Expr. B Destination
92 AMP Delay Send Level Expr. B Depth
93 AMP Reverb Send Level
94 Track Mute
95 Track Level
102 Filter1 Envelope Amount
103 Filter2 Envelope Amount
104 AMP EnvA Attack Time
105 AMP EnvA Decay Time
106 AMP EnvA Sustain Level
107 AMP EnvA Release Time
108 EnvF Attack Time
109 EnvF Decay Time
110 EnvF Sustain Level
111 EnvF Release Time
112 Env2 Attack Time
113 Env2 Decay Time
114 Env2 Sustain Level
115 Env2 Release Time
116 LFO1 Speed
117 LFO1 Speed Multiplier
118 LFO2 Speed
119 LFO2 Speed Multiplier
120 X displace
121 Y displace
122 Z displace
123 Rotate
124 Chaotic hue mod
125 Chaotic hue lfo
126 Chaotic hue offset
127 Delay time

I also checked the manuals of other Elektron gears:
-Elektron Analog Rythm mkii
-Elektron Octactrack mkii
-Elektron Digitakt
-Elektron Digitone

:pizza::pizza:TAKE AWAY​:pizza::pizza:

  1. By default, CC Maps are pretty different between gears so a remapping is necessary
  2. Every Elektron gear has its own Midi CC implementation (duh).
  3. Gonna update that spreadsheet with more gears (later)

:face_with_monocle::face_with_monocle: So, here are some open questions:

  • Did I get the CC Waaave Pool Parameters right? I found that in the manual but did I miss some parameters?

  • Since all the Elektron gears have different CCs parameters, is it possible to remap the CC parameters of Waaave Pool / Auto Waaave / Super Haeckel Adventures 64?

  • If Yes, how? (or where in the code?)

  • If No, what are the options? A sort of RPi MIDI bridge? But with all those different gears, would it mess up the Global signal? What about this one? MIDI Solutions Event Processor; 10 Event MIDI Event Processor

  • Have you folks experience similar setups & issues?

So many questions :exploding_head: :exploding_head: :exploding_head:

Peace :dizzy: :dizzy: :dizzy:

1 Like

press escape in the app to get to the desktop
go to the openframeworks folder on your rpi
find the app your are wanting to modify
go into the src folder
open ofApp.cpp

find the MIDI section
if you can’t find it use the search function

you will see something like

                if(message.control==33){
					if(message.value==127){
						y_2=TRUE;
					}
					
					if(message.value==0){
						y_2=FALSE;
					}
                }

message.control==33
33 is the CC #
change that to whatever CC you want
rinse and repeat until done

3 Likes

Alright! That simple… Gonna try that out!
Thanks :pray: :pray:

Putting this here for other noobs like me :hear_no_evil:

ofApp.cpp file
(waaaave_pool/ofApp.cpp at master · ex-zee-ex/waaaave_pool · GitHub)

LINE 875
//How to Midi Map
//uncomment the line that says cout<<message control etc
//run the code and look down in the console
//when u move a knob on yr controller keep track of the number that shows up
//that is the cc value of the knob
//then go down to the part labled ‘MIDIMAPZONE’
//and change the numbers for each if message.control== statement to the values
//on yr controller
// cout << “message.control”<< message.control<< endl;
// cout << “message.value”<< message.value<< endl;
//MIDIMAPZONE
//these are mostly all set to output bipolor controls at this moment (ranging from -1.0 to 1.0)
//if u uncomment the second line on each of these if statements that will switch thems to unipolor
//controls (ranging from 0.0to 1.0) if you prefer

…of course Andrei Jay thought about it :facepunch: :ok_hand: :+1: :+1: :muscle:

4 Likes

reading through the code is always a good practice even if you aren’t a programmer as there tends to be lots of good info tucked away in there

I know when I put Scrawl together I added a bunch of commented out lines explaining what was going on

1 Like