Hi,
I am seeking out some assistance in improving the modeling of a neural network synthesizer.
Its structure is quite similar to what is described in Nathan Ho’s feedback integrator network blog post, and I took some inspiration from it and what is done in a Ugen found in sc3-plugins called Dneuromodule (quite unstable, providing a larger input will make the server crash) to implement a basic version of it, but I don’t fully grasp the math and non linearities and how they should be modeled (for now all I did was put some noise in the inital values and apply a tanh at the outputs of the neurons)
The sound is nothing special though for now, I think I expected something more like a No Input Mixing Board/ Matrix Mixer type of sound. Changing the weights and bias does not change the sound much.
How could one improve the modeling to make it closer to what you can hear in David Tudor’s Neural Synthesis album?
I think feedbacked matrix mixer patches accomplishes that as well, but then what would be the point in an architecture involving neural networks?
Server.default.options.blockSize = 1;
s.reboot;
// interface inspired from Dneuromodule UGen
// theta = bias for each node, x = initial input for each node
(
SynthDef(\nmA_native, { |out = 0,
x0 = 0.1, x1 = 0.3,
w0 = -3, w1 = 2, w2 = -2, w3 = 0|
var y, nxt, sig, env, w, theta;
w = [[w0, w1], [w2, w3]];
theta = [MouseX.kr(-2, 2), MouseY.kr(-2, 2)];
y = LocalIn.ar(2, [x0 + LFNoise1.ar(0.3), x1 + LFNoise1.ar(0.3)]);
nxt = (w.collect { |row, i| (row * y).sum + theta[i] }).tanh;
LocalOut.ar(nxt);
Out.ar(out, Limiter.ar(LeakDC.ar(nxt * 0.1), 0.9));
}).add;
)
a = NodeProxy.audio(s, 2);
a.source = \nmA_native;
a.play;
a.gui;
a.free;