Video Tutorials on MIDI based music production with Supercollider, jackd and DAW

Hi guys! These are the first 2:

Introduction and setup:

MIDI controlled Ndef Instrument with FX Cascade and GUI:

6 Likes

Epic!

The mididef + ndef combo is brilliant
(also your discussion of the importance of interfaces and hearing)

2 Likes

hey, ive tried out the setup and SC receives MIDI from my Faderfox EC4.


MIDI: device 0 5 -297297504  (Microsoft GS Wavetable Synth)
MIDI: device 1 6 -297297496  (MOTU Pro Audio Midi Out)
MIDI: device 2 7 -297297488  (Ableton to SC)
MIDI: device 3 8 -297297480  (Faderfox EC4)
MIDI Sources:
	MIDIEndPoint("MOTU Pro Audio Midi In", "MOTU Pro Audio Midi In")
	MIDIEndPoint("MOTU Pro Audio LTC Sync In", "MOTU Pro Audio LTC Sync In")
	MIDIEndPoint("Ableton to SC", "Ableton to SC")
	MIDIEndPoint("Faderfox EC4", "Faderfox EC4")
MIDI Destinations:
	MIDIEndPoint("Microsoft GS Wavetable Synth", "Microsoft GS Wavetable Synth")
	MIDIEndPoint("MOTU Pro Audio Midi Out", "MOTU Pro Audio Midi Out")
	MIDIEndPoint("Ableton to SC", "Ableton to SC")
	MIDIEndPoint("Faderfox EC4", "Faderfox EC4")
MIDI Message Received:
	type: control
	src: 3
	chan: 0
	num: 0
	val: 13

But im not able to control the Faders from the Ndef. Already set srcID: 3 in the MIDIdef.cc. Do you have an idea whats wrong?. thanks for theses fantastic videos :slight_smile:

Hi! Could you post the code of MIDIdef?

вт, 20 июл. 2021 г., 20:23 dietcv via scsynth <noreply@m.scsynth.org>:

sure :slight_smile:

(
MIDIdef.noteOn(
	( ~grainsin_pulsar[\name] ++ "_On").asSymbol,
	{ |vel, note, chan|
		Ndef(~grainsin_pulsar[\name]).put(
			note,
			Ndef(~grainsin_pulsar[\name]).source,
			0,
			[\freq, note.midicps, \gt, 1, \lev, vel/127]
		);
		\on.postln;
	},
	chan: ~grainsin_pulsar[\midiChannel],
	//srcID:8388608
).fix;



MIDIdef.noteOff(
	( ~grainsin_pulsar[\name] ++ "_Off" ).asSymbol,
	{ |vel, note, chan|
		Ndef( ~grainsin_pulsar[\name] ).removeAt( note );
	},
	chan: ~grainsin_pulsar[\midiChannel],
).fix;


~ccControlled = Order.newFromIndices(
	[
		\lev, \freq, \formantA, \formantB, \overlapA, \overlapB, \levA, \levB,
	], (21..28)
);


// Ndef( ~grainsin_pulsar[\name] ).getSpec(\freq).map(1)

MIDIdef.cc(
	( ~grainsin_pulsar[\name] ++ "_CC" ).asSymbol,
	{arg val, num;
		var control = ~ccControlled[ num ];

		Ndef(~grainsin_pulsar[\name]).set(
			control,
			Ndef( ~grainsin_pulsar[\name] ).getSpec(control).map(val/127)
		)

		// Ndef( ~grainsin_pulsar[\name] ).softSet(
		// 	control,
		// 	Ndef( ~grainsin_pulsar[\name] ).getSpec(control).map(val/127),
		// 	mapped: true,
		// 	spec: Ndef( ~grainsin_pulsar[\name] ).getSpec( control )
		// )

	},
	ccNum: ~ccControlled.indices,
	chan: ~grainsin_pulsar.midiChannel,
	//srcID: 3
).fix;
)

The knob (or slider) that sends this message has value num equal to 0. But the MIDIdef.cc is filtering out everything but (21…28) range (those are the ones my controller sends). So changing that array to array of nums from your controller should do it

perfect! its working, thanks alot! :slight_smile:

Im sending MIDI from Ableton into SC playing a SynthDef, using the Midicontroller to change the different parameters and routing multichannel Audio back into Ableton for further processing. this is really awesome :slight_smile:

1 Like

I know that feeling )))

1 Like

Wow. Ndefs are awesome!!

Thanks for the videos. Your explanations are great, and a nice view into your process.

1 Like