refactor drums into generic factory
authorEugene Petkevich <nasedil.genio.code@gmail.com>
Sat, 30 Dec 2023 14:47:42 +0000 (15:47 +0100)
committerEugene Petkevich <nasedil.genio.code@gmail.com>
Sat, 30 Dec 2023 14:47:42 +0000 (15:47 +0100)
Ка/Камыр-Хыпёдё/Хыпёдё-песня.scd

index 9d95b9a..d368727 100644 (file)
 
 // instrument
 
+(
+~makeSampleSynth = { arg name, sampleArray, sampleIndex, ampMultiplier;
+  SynthDef(name, {|out=0, rate=1, amp=1, pan=0|
+    var sig;
+    var buf = sampleArray[sampleIndex];
+    sig = PlayBuf.ar(2, buf, BufRateScale.kr(buf), doneAction: 2);
+    sig = sig * amp * ampMultiplier;
+    sig = Balance2.ar(sig[0], sig[1], pan);
+    Out.ar(out, sig);
+  }).add;
+};
+)
+
 (
 ~hahomoSamples = Array();
-~hahomoPath = PathName(c.media).pathOnly +/+ "Хахомо";
+~hahomoPath = PathName(c.media +/+ "Хахомо");
 ~hahomoPath.entries.do({
   arg path;
   ~hahomoSamples = ~hahomoSamples.add(Buffer.read(s, path.fullPath));
 });
 )
-
-SynthDef(\bu, {|out=0, rate=1, amp=1, pan=0|
-  var sig;
-  var buf = ~samples[0];
-  sig = PlayBuf.ar(2, buf, BufRateScale.kr(buf), doneAction: 2);
-  sig = sig * amp;
-  sig = Balance2.ar(sig[0], sig[1], pan);
-  Out.ar(out, sig);
-}).add;
-
-SynthDef(\me, {|out=0, rate=1, amp=1, pan=0|
-  var sig;
-  var buf = ~samples[1];
-  sig = PlayBuf.ar(2, buf, BufRateScale.kr(buf), doneAction: 2);
-  sig = sig * amp * 10;
-  sig = Balance2.ar(sig[0], sig[1], pan);
-  Out.ar(out, sig);
-}).add;
-
-SynthDef(\mo, {|out=0, rate=1, amp=1, pan=0|
-  var sig;
-  var buf = ~samples[2];
-  sig = PlayBuf.ar(2, buf, BufRateScale.kr(buf), doneAction: 2);
-  sig = sig * amp * 6;
-  sig = Balance2.ar(sig[0], sig[1], pan);
-  Out.ar(out, sig);
-}).add;
-
-SynthDef(\gy, {|out=0, rate=1, amp=1, pan=0|
-  var sig;
-  var buf = ~samples[3];
-  sig = PlayBuf.ar(2, buf, BufRateScale.kr(buf), doneAction: 2);
-  sig = sig * amp * 5;
-  sig = Balance2.ar(sig[0], sig[1], pan);
-  Out.ar(out, sig);
-}).add;
-
-SynthDef(\da, {|out=0, rate=1, amp=1, pan=0|
-  var sig;
-  var buf = ~samples[4];
-  sig = PlayBuf.ar(2, buf, BufRateScale.kr(buf), doneAction: 2);
-  sig = sig * amp * 4;
-  sig = Balance2.ar(sig[0], sig[1], pan);
-  Out.ar(out, sig);
-}).add;
-
-SynthDef(\do, {|out=0, rate=1, amp=1, pan=0|
-  var sig;
-  var buf = ~samples[5];
-  sig = PlayBuf.ar(2, buf, BufRateScale.kr(buf), doneAction: 2);
-  sig = sig * amp * 3;
-  sig = Balance2.ar(sig[0], sig[1], pan);
-  Out.ar(out, sig);
-}).add;
-
-SynthDef(\tu, {|out=0, rate=1, amp=1, pan=0|
-  var sig;
-  var buf = ~samples[6];
-  sig = PlayBuf.ar(2, buf, BufRateScale.kr(buf), doneAction: 2);
-  sig = sig * amp * 12;
-  sig = Balance2.ar(sig[0], sig[1], pan);
-  Out.ar(out, sig);
-}).add;
-
-SynthDef(\by, {|out=0, rate=1, amp=1, pan=0|
-  var sig;
-  var buf = ~samples[7];
-  sig = PlayBuf.ar(2, buf, BufRateScale.kr(buf), doneAction: 2);
-  sig = sig * amp * 2;
-  sig = Balance2.ar(sig[0], sig[1], pan);
-  Out.ar(out, sig);
-}).add;
-
-SynthDef(\bo, {|out=0, rate=1, amp=1, pan=0|
-  var sig;
-  var buf = ~samples[8];
-  sig = PlayBuf.ar(2, buf, BufRateScale.kr(buf), doneAction: 2);
-  sig = sig * amp * 2;
-  sig = Balance2.ar(sig[0], sig[1], pan);
-  Out.ar(out, sig);
-}).add;
-
-SynthDef(\be, {|out=0, rate=1, amp=1, pan=0|
-  var sig;
-  var buf = ~samples[9];
-  sig = PlayBuf.ar(2, buf, BufRateScale.kr(buf), doneAction: 2);
-  sig = sig * amp * 2;
-  sig = Balance2.ar(sig[0], sig[1], pan);
-  Out.ar(out, sig);
-}).add;
-
-SynthDef(\ma, {|out=0, rate=1, amp=1, pan=0|
-  var sig;
-  var buf = ~samples[10];
-  sig = PlayBuf.ar(2, buf, BufRateScale.kr(buf), doneAction: 2);
-  sig = sig * amp * 1;
-  sig = Balance2.ar(sig[0], sig[1], pan);
-  Out.ar(out, sig);
-}).add;
-
-SynthDef(\nu, {|out=0, rate=1, amp=1, pan=0|
-  var sig;
-  var buf = ~samples[11];
-  sig = PlayBuf.ar(2, buf, BufRateScale.kr(buf), doneAction: 2);
-  sig = sig * amp * 1;
-  sig = Balance2.ar(sig[0], sig[1], pan);
-  Out.ar(out, sig);
-}).add;
+(
+// amplification coefficients for samples
+~hahomo = [(
+  name: \bu,
+  mul: 0.5,
+), (
+  name: \me,
+  mul: 10,
+), (
+  name: \mo,
+  mul: 6,
+), (
+  name: \nu,
+  mul: 3,
+), (
+  name: \da,
+  mul: 3,
+), (
+  name: \do,
+  mul: 2,
+), (
+  name: \tu,
+  mul: 5,
+), (
+  name: \by,
+  mul: 1,
+), (
+  name: \bo,
+  mul: 1.5,
+), (
+  name: \be,
+  mul: 1.5,
+), (
+  name: \ma,
+  mul: 1,
+), (
+  name: \my,
+  mul: 1,
+)];
+~hahomoInstruments = ~hahomo.collect{|i| i.name};
+
+~hahomo.do{|p, i|
+  ~makeSampleSynth.(p.name, ~hahomoSamples, i, p.mul).value;
+}
+)
 
 // test
 
 (
 Pdef(\test, Pbind(*[
-  instrument:
-])).quant_(4).play;
+  instrument: Prand(~hahomoInstruments, inf),
+  db: -6,
+  dur: Prand([1, 2, 3, 4]/4, inf),
+  out: a.h,
+])).quant_(1).play;
 )
\ No newline at end of file