I missed a week last week, due to being quite busy...
# two-minute-week
c
I missed a week last week, due to being quite busy, and being stuck on a few things. Hopefully I can be forgiven the extra minute that this week's update contains. In the video I cover the LFO operators, and a new mode of FM synthesis.
😎 1
👍 2
i
This is sounding super nice, as ever. Did you fix the audio glitch from the previous video? Also — is 2 LFOs always going to be the limit? It seems like the current UI for LFOs wouldn't really scale up to more. I'm curious to see if that's just a temporary situation, or if you're actually comfortable with this as (say) a creative constraint and plan to keep it that way.
m
Very cool progress! Your sound palette is really growing, very nice! Are you planning to make the graph editable either by live coding or visually editing it?
c
By way of partial explanation, my code dumps a GraphViz output so I can visualize the graph.
In the image you can see the LFO connected up to (so far) 3 generators and the bitcrush effect.
So to answer @Ivan Reese question, there is no constraint with LFO's, except in how you wire them. You could add more LFO nodes, and hook them into units as you see fit. I suppose there is the limitation that, for example, the Oscillator pitch can only be modified by 2 (3 if you include the combination) LFO waves. I could certainly make the Oscillator take 'n' waves I guess - since I have the ability for pins that grow like arrays. I just thought that this was probably enough for now.
@Maikel Scripting/Live coding is the goal. You can think of this as the visual result of your live code script. But I haven't discounted the option of editing the graph. You can see in one of my earlier videos that the canvas can be zoomed/panned - so I'm thinking about this for the future. This week I'm hoping to try some scripting.
@Ivan Reese Regarding the audio glitch, it hasn't totally gone away, but I believe I know what it is; it comes down to memory allocations happening when they shouldn't. I will fix it soon.
🍰 1
m
That graphviz output is a nice feature. Is your graph currently already read from a file so that the needed node objects are created dynamically or is it being compiled beforehand?
c
GraphViz is really trivial to output; I wrote an old post about it here: https://chrismaughan.com/blog/coding/2019_07_01_graphviz/ Currently there is simple c-like API to the graph, intended to be driven by a script. Currently I just call it from C++, but I am adding a scheme layer to script it at the moment. So creating it from a file will probably be more like running a script from a file; but it wouldn't be hard to do a file format too.
(synth_def 'S1'
(node :instrument 'Instrument')
(node :pan 'Stereo')
(node :delay 'Delay')
(node :reverb 'Reverb')
(node :phaser 'Phaser')
(node :master 'Master')
(node :analyser 'Analyser')
(node :mixer 'DownMix')
(node :bitcrush 'Bitcrush')
(node :fm_osc 'Modulator')
(node :fm_osc 'Carrier')
(node :fm_osc 'Modulator')
(node :fm_osc 'Carrier')
(node :fm_osc 'Modulator')
(node :fm_osc 'Carrier')
(control 'Instrument' 'Modulator')
(control 'Instrument' 'Modulator')
(control 'Instrument' 'Carrier')
(control 'Instrument' 'Modulator')
(control 'Instrument' 'Carrier')
(control 'Instrument' 'Carrier')
(flow 'Stereo' 'Phaser')
(flow 'Delay' 'Reverb')
(flow 'Reverb' 'Master')
(flow 'Phaser' 'Delay')
(flow 'Master' 'Analyser')
(flow 'DownMix' 'Bitcrush')
(flow 'Bitcrush' 'Stereo')
)
Oh, and I actually dump a scheme-like data structure in the debugger for how the graph looks.. There it is ^