You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
3.3 KiB
Plaintext
150 lines
3.3 KiB
Plaintext
MIDIClient.init;
|
|
MIDIIn.connectAll;
|
|
|
|
MIDIdef.noteOn(\noteOnTest, {"key down".postln});
|
|
|
|
|
|
// Print MIDI debug info
|
|
|
|
(
|
|
MIDIdef.noteOn(\noteOnTest, {
|
|
arg nn, chan, src;
|
|
[nn, chan, src].postln;
|
|
});
|
|
|
|
|
|
MIDIdef.cc(\ccTest, {
|
|
arg val, num, chan, src;
|
|
["CC:", num, "Value:", val, "Channel:", chan, "Source:", src].postln;
|
|
});
|
|
)
|
|
|
|
|
|
// Load samples
|
|
|
|
(
|
|
~sampleDir = PathName("/Users/eli/Desktop/2025-04-26.Basic_City_Brewery (Copy)/trax/01-borrowed flesh/seq/808/").fullPath;
|
|
|
|
~samples = Dictionary.newFrom(
|
|
(
|
|
42: "ch.wav", 46: "oh.wav", 39: "cp.wav", 38: "sd.wav", 36: "bd.wav"
|
|
).collect { |file, key|
|
|
key -> Buffer.read(s, ~sampleDir +/+ file)
|
|
}
|
|
);
|
|
)
|
|
|
|
~samples.class
|
|
~samples[39].class
|
|
|
|
(
|
|
~sampleDir = PathName("/Users/eli/Desktop/2025-04-26.Basic_City_Brewery (Copy)/trax/01-borrowed flesh/seq/808/");
|
|
~sample = ();
|
|
~sampleDir.entries.do({ |pn|
|
|
var sym;
|
|
sym = pn.fileNameWithoutExtension.asSymbol;
|
|
~sample[sym] = Buffer.read(s, pn.fullPath);
|
|
});
|
|
)
|
|
|
|
(
|
|
// Define the Synth for sample triggering (if not defined already)
|
|
SynthDef(\sampleTrigger, { |buf, ampin = 0|
|
|
var sound, amp;
|
|
amp = In.kr(ampin, 1).lag(0.01);
|
|
sound = PlayBuf.ar(1, buf, BufRateScale.ir(buf), doneAction: 2); // doneAction: 2 will free the synth when it's done
|
|
sound = sound * amp;
|
|
Out.ar(0, sound); // Send to audio output
|
|
}).add;
|
|
)
|
|
|
|
(
|
|
s.newBusAllocators;
|
|
~bdampbus = Bus.control(s, 1).value_(0.5);
|
|
~sdampbus = Bus.control(s, 1).value_(0.5);
|
|
~cpampbus = Bus.control(s, 1).value_(0.5);
|
|
~champbus = Bus.control(s, 1).value_(0.5);
|
|
~ohampbus = Bus.control(s, 1).value_(0.5);
|
|
MIDIIn.connectAll;
|
|
MIDIdef.noteOn('808trig', { |vel, nn|
|
|
nn.postln;
|
|
switch(nn)
|
|
{36} {
|
|
Synth(\sampleTrigger, [buf: ~sample.bd, ampin: ~bdampbus]);
|
|
}
|
|
{38} {
|
|
Synth(\sampleTrigger, [buf: ~sample.sd, ampin: ~sdampbus]);
|
|
}
|
|
{39} {
|
|
Synth(\sampleTrigger, [buf: ~sample.cp, ampin: ~cpampbus]);
|
|
}
|
|
{42} {
|
|
Synth(\sampleTrigger, [buf: ~sample.ch, ampin: ~champbus]);
|
|
}
|
|
{46} {
|
|
Synth(\sampleTrigger, [buf: ~sample.oh, ampin: ~ohampbus]);
|
|
}
|
|
}, noteNum: [36, 38, 39, 42, 46], chan: [0]);
|
|
|
|
MIDIdef.cc('808amp', { |val, num|
|
|
switch(num)
|
|
{22} {~bdampbus.value = val / 127}
|
|
{23} {~sdampbus.value = val / 127}
|
|
{61} {~cpampbus.value = val / 127}
|
|
{24} {~champbus.value = val / 127}
|
|
{26} {~ohampbus.value = val / 127};
|
|
|
|
}, ccNum: [22, 23, 61, 24, 26], chan: [0]);
|
|
)
|
|
MIDIFunc.trace(false)
|
|
|
|
s.scope;
|
|
|
|
|
|
|
|
|
|
|
|
// Testing ~samples
|
|
|
|
|
|
|
|
(
|
|
// For some reason, nn and vel are swapped on the tr-08 MIDIIn
|
|
// if vel isn't in the enclosure, then nn doesn't work
|
|
// still figuring out how to do polyphony
|
|
// set it to if == 9 when everything else is working
|
|
MIDIdef.noteOn(\noteOnTest, {|vel, nn|
|
|
[nn].postln;
|
|
|
|
Synth(\sampleTrigger, [\buf, ~samples[nn]]);
|
|
});
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(
|
|
// Define the Synth for sample triggering (if not defined already)
|
|
SynthDef(\sampleTrigger, { |buf|
|
|
var sound;
|
|
sound = PlayBuf.ar(1, buf, doneAction: 2); // doneAction: 2 will free the synth when it's done
|
|
Out.ar(0, sound); // Send to audio output
|
|
}).add;
|
|
)
|
|
|
|
|
|
|
|
// Manually trigger a sample for note number 42
|
|
(
|
|
var noteNumber = 39; // The MIDI note number to play
|
|
if (~samples.includesKey(noteNumber), {
|
|
("Triggering sample for note: " + noteNumber).postln;
|
|
Synth(\sampleTrigger, [\buf, ~samples[noteNumber]]);
|
|
}, {
|
|
("No sample found for note: " + noteNumber).postln;
|
|
});
|
|
) |