feat: single coordinated setTempo
This commit is contained in:
@@ -25,6 +25,15 @@
|
||||
~doMaster !? { ~doMaster.free };
|
||||
~doMasterGroup !? { ~doMasterGroup.free };
|
||||
|
||||
// Setter de tempo unique et coordonne : une seule horloge
|
||||
// (TempoClock.default). Tous les controleurs runtime passent par ici.
|
||||
~setTempo = { |bpm|
|
||||
~bpm = bpm.clip(20, 300);
|
||||
TempoClock.default.tempo = ~bpm / 60;
|
||||
("[tempo] " ++ ~bpm ++ " BPM").postln;
|
||||
~bpm;
|
||||
};
|
||||
|
||||
s.waitForBoot {
|
||||
var rate = s.sampleRate;
|
||||
|
||||
|
||||
+12
-2
@@ -11,7 +11,17 @@
|
||||
// 1. SETUP -- evalue UNE FOIS au demarrage de la session
|
||||
// =====================================================================
|
||||
(
|
||||
s.waitForBoot {
|
||||
// Setter de tempo unique et coordonne : une seule horloge
|
||||
// (TempoClock.default). Tous les controleurs runtime passent par ici.
|
||||
~setTempo = { |bpm|
|
||||
~bpm = bpm.clip(20, 300);
|
||||
TempoClock.default.tempo = ~bpm / 60;
|
||||
("[tempo] " ++ ~bpm ++ " BPM").postln;
|
||||
~bpm;
|
||||
};
|
||||
|
||||
// Protection defensive : evite la propagation si le boot reseau echoue
|
||||
try { s.waitForBoot {
|
||||
|
||||
// ----- Acid 303 -----
|
||||
// Env ADSR sur l'amp avec doneAction:2 -- garanti pas de fuite
|
||||
@@ -294,6 +304,6 @@ s.waitForBoot {
|
||||
// (charges automatiquement par 00_load.scd > CHARGER TOUT)
|
||||
|
||||
"=== setup OK -- lance le bloc PLAY ===".postln;
|
||||
};
|
||||
} } { |e| ("[engine] avertissement boot serveur : " ++ e.errorString).postln };
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
// Headless test for ~setTempo. Run: sclang sound_algo/tests/test_tempo.scd
|
||||
(
|
||||
var ok = true;
|
||||
// minimal: ~setTempo only needs TempoClock.default (always exists)
|
||||
(thisProcess.nowExecutingPath.dirname.dirname ++ "/engine.scd").load;
|
||||
~setTempo.(140);
|
||||
if(~bpm != 140) { ok = false; "FAIL: bpm".postln };
|
||||
if(TempoClock.default.tempo.round(0.0001) != (140/60).round(0.0001)) {
|
||||
ok = false; "FAIL: clock".postln };
|
||||
~setTempo.(9999); // clip high
|
||||
if(~bpm != 300) { ok = false; "FAIL: clip hi".postln };
|
||||
~setTempo.(1); // clip low
|
||||
if(~bpm != 20) { ok = false; "FAIL: clip lo".postln };
|
||||
if(ok) { "PASS test_tempo".postln } { "TESTS FAILED".postln };
|
||||
0.exit;
|
||||
)
|
||||
Reference in New Issue
Block a user