Untitled
unknown
plain_text
9 months ago
2.9 kB
8
Indexable
// 🌱 Setup iniziale
s.waitForBoot({
~buffers = Array.fill(10, { Buffer.alloc(s, 10 * s.sampleRate, 1) });
"Setup completato: 10 buffer pronti per la registrazione.".postln;
});
// 🎙️ Synth per registrare
SynthDef(\recorder, { |buf, amp = 1|
var input = SoundIn.ar(0) * amp;
RecordBuf.ar(input, buf, loop: 0, doneAction: 2);
}).add;
// ▶️ Synth per riprodurre una volta
SynthDef(\player, { |buf, rate = 1|
var sig = PlayBuf.ar(1, buf, rate, doneAction: 2);
Out.ar(0, sig ! 2);
}).add;
// 🌀 Synth per loop con velocità crescente
SynthDef(\speedLooper, { |buf, rateStart = 1.0, rateEnd = 8.0, dur = 10|
var rate = Line.kr(rateStart, rateEnd, dur);
var sig = PlayBuf.ar(1, buf, rate, loop: 1);
Out.ar(0, sig ! 2);
}).add;
// 🖼️ GUI TENAGER completa
(
var window, plots;
~loopSynths = Array.newClear(10);
plots = List.new;
window = Window("🎺 TENAGER GUI", Rect(100, 100, 650, 560));
window.background = Color.grey;
10.do { |i|
var yPos = 10 + (i * 50);
// 🔴 Record (resetta buffer prima)
Button(window, Rect(10, yPos, 90, 30))
.states_([["🔴 Record " ++ i, Color.white, Color.red]])
.action_({
Routine({
~buffers[i].zero;
"Registrazione del gesto % inizia in 0.5s...".format(i).postln;
0.5.wait;
Synth(\recorder, [\buf, ~buffers[i].bufnum]);
}).play;
});
// ▶️ Play singolo
Button(window, Rect(110, yPos, 80, 30))
.states_([["▶️ Play " ++ i, Color.black, Color.green]])
.action_({
Synth(\player, [\buf, ~buffers[i].bufnum]);
});
// 🌀 Loop con velocità crescente
Button(window, Rect(200, yPos, 100, 30))
.states_([["🌀 Loop " ++ i, Color.black, Color.cyan]])
.action_({
~loopSynths[i].notNil.if { ~loopSynths[i].free };
~loopSynths[i] = Synth(\speedLooper, [
\buf, ~buffers[i].bufnum,
\rateStart, 1.0,
\rateEnd, 8.0,
\dur, 10
]);
});
// ⏹ Stop loop
Button(window, Rect(310, yPos, 80, 30))
.states_([["⏹ Stop", Color.white, Color.gray]])
.action_({
~loopSynths[i].notNil.if {
~loopSynths[i].free;
~loopSynths[i] = nil;
"Loop % fermato.".format(i).postln;
};
});
// 🌊 Forma d’onda
plots.add(
SoundFileView(window, Rect(400, yPos, 230, 30))
.background_(Color.black)
.waveColors_([Color.cyan])
.gridOn_(false)
);
// 🔁 Aggiornamento forma d’onda
Routine({
loop {
2.wait;
plots[i].setBuffer(~buffers[i]);
}
}).play(AppClock);
};
window.front;
)
Editor is loading...
Leave a Comment