Decision to Buy a Hardware Synth for SC

I have a question about hardware synths and SC. I need a little help making my decision. I’m considering a Pittsburgh Taiga (semi-modular) synth, which I’d then control via MIDI using SC. It has its own internal MIDI-to-CV converter. So I can control pitch, gate, velocity, and pitch bend directly via MIDI, plus optionally the mod wheel MIDI OR ONE CC MIDI signal to a CV patchbay for modulation. However, this means only one additional CC can be controlled at a time.

I’m currently studying sound design and patterns/composition in SC very intensively but i’m a beginner (to SC and to music and soundesign). I recently bought the Korg Volca Modular as an affordable way to get started with hardware and try things out a bit. For those familiar with it, it has a built-in sequencer and can only be controlled externally via a CV-in for Note-On and Clock (as far as I know), which I haven’t tried yet. I’d see the Taiga as a quick way to experiment with sounds without having to coding a GUI or SynthDef/Ndef in SC, and directly controlled via SC to MIDI, and it looks very powerful for very different kinds of sound.

The Volca is certainly interesting too. Of course i already have one, but the Taiga would really be more of a sound lab and exactly what I’d envision as my first major synth. It’s semi-modular and has a lot more different kinds of sounds as the volca. I can figure out and learn the various modulations and interactions on my own in another more direkt way instead in SC with coding first. I would see it as a hardware tutor for me, which I can then use in SC itself in a similar way.

Plus, of course, I’d like to incorporate it as an instrument into my SC compositions. But SC will always remain the focus with all my drums, other instruments, my control center, mixer, recording, etc…

What do you think about all this?

Would it be a worthwhile addition? Or would it be more of a distraction from SC, and even a hindrance given my current path?

The price itself isn’t really the problem right now, because I’ve been saving up specifically for future hardware and have about 1k set aside. But I want to use it wisely and only if it really adds value for me in conjunction with SC. The money isn’t there to be wasted on nothing. I’ve been thinking about buying the Taiga for a week now, but I’m holding back with a lot of effort.

Is this an inappropriate question to ask here, or does practically no one here use hardware synths? :sweat_smile: I’d also just like to hear your thoughts on integrating hardware synths into SC.

I think the Behringer Neutron offers exceptional value for its price - you can learn many aspects and applications of analog patching and the oscillators and the filter are really flexible and sound awesome [also the analog delay line has a really unique sound!]. Sync oscillators are also somehow hard in the digital domain, but not as hard in the analog domain. It is probably the <1k$ synth I’d take on an island w/ me.

OOTH, I still don’t get why you want to get a hardware synth? IMO the great thing about SC is that it allows you to “build your own instrument” with some unique results. This is not really feasible in the analog domain.
This allows you to diverge from the orthodox way of playing music, which I think is the sweetspot for SC.

If I find a module/synth interesting, I am more interested in getting the manual and trying to replicate it within SC - this allows me to grow my SC skills and get inspired by implementing it and save money and space.
E.g. I’d really like to explore the Doepfer A196 which is a phase locked loop - but instead of buying it I just spend an evening with the manual and tried replicating it in SC, which allowed me to do go “off-rails” and do things that are not done with the original module

// based on doepfer a196
// https://doepfer.de/A196.htm
Ndef.ar(\x, 2);

Ndef(\x).play;

(
Ndef(\x)[0] = {
	var sig = DynGen.ar(
		numOutputs: 1,
		script: DynGenDef(\pll).compile(#{
			// vco
			~freq = ~p.freq(100.0, spec: \freq) + (~ctrl * ~p.range(200.0, spec: [0, 2000]));
			~phase = (~phase + (~freq / ~srate)).wrap(0.0, 1.0);
			~osc = (~phase < 0.5) * 2.0 - 1.0; // square osc
			~sinOsc = sin(~phase*2*pi); // sin osc

			// pc1: xor phase comparator
			~pc = ((~in0 > 0.0).xor(~osc > 0.0)) * 2.0 - 1.0;
			// alt version: use a or instead of a xor
			//~pc = ((~in0 > 0.0) || (~osc > 0.0)) * 2.0 - 1.0;

			// some basic lpf
			~ctrl = ~ctrl + (~p.alpha(0.01, spec: [0.001, 0.5, \exp]) * (~pc - ~ctrl));

			~out0 = (~in0 > 0.0).ifTrue(~sinOsc, ~phase);
			~out0 = ~sinOsc;
		}).send,
		inputs: [LFSaw.ar(\inFreq.kr(100.0, spec: \freq) * [1.0, 2.0], iphase: [0.0, 0.5])],
		params: \all,
	) * \amp.kr(0.2);
	var env = Env.perc(releaseTime: 0.01, curve: -40.0).kr(gate: \myGate.tr(1.0)) * 4;
	sig = (sig * env) + sig;
	sig;
};
)

(
Ndef(\x)[10] = \pset -> Pbind(
	dur: Pseq([0.1, 0.2], inf),
	degree: Pstutter(5, Pxrand((0..10), inf)),
	range: Pseq((0..15).scramble * 100, inf),
	octave: Pstutter(1, Pseq([7, 5, 4], inf)),
	myGate: 1.0,
	inFreq: Pstutter(13, Pseq([200, 1000, 40], inf)),
)
)

You could also look how you can integrate traditional setups like Ableton or Reaper into SC, which allows you to leverage the best of both worlds in that case. I have also written GitHub - capital-G/EuroCollider: SuperCollider extension for communcation with Eurorack modules · GitHub which is like the cv tools from abelton, but for SuperCollider.

But I am rather biased - I love to have everything in a box and not care about equipment which is often really expensive.

If you want to go for a controller, there are plenty out there - take a look at the fader fox which seems to be a classic choice within SC community :wink:

3 Likes

Absolutely appropriate question! Consider it’s vacation time … but even if not, sometimes it happens that questions just go under.
I’m not a hardware synth person myself but I have seen students of mine successfully using such combos. First, there’s the amazing sequencing capabilities of SC and Patterns in particular. Driving a hardware synth from SC is not only fun, but full of surprising possibilities in terms of rhythms, combinatorics etc. Secondly, processing the audio output of an analog (or digital) device in SC is equally appealing. Then, there’s the option of hardware-SC cross-feedback loops and finally, of combining all of this … a beautiful maze!
From a standpoint of creativity research, it’s an advantage anyway to spur lateral thinking this way. I see no reason to hold back, even more if you have fun with both.

2 Likes

Definitely an appropriate question. I’ve used hardware synths very seldom, however, so I don’t have much to say about the creative workflow. I did use VCV Rack (external MIDI) and Cardinal (VST) before but I didn’t take that very far.

I have worked on the problem of syncing MIDI output for hardware (or software outside of SC processes) and for VSTPlugin. The issue here is that MIDIOut folds latency into the MIDIOut object, but VSTPlugin makes the (valid) argument that latency should be a property of messages, not of the transport object. This means that VSTPluginMIDIProxy is not a drop-in substitute for MIDIOut. To simplify the writing of code that should be able to play on external MIDI or VST interchangeably, I made the ddwMIDIMessageSend quark, where outgoing MIDI messages are implemented by objects, and latency then becomes a property of these message objects. It’s a nice way to work, once you get used to it. One advantage is, for example, that in my Voicer class, note messages set their latency property to the server’s latency (for note sync) while CC message objects set latency to nil, for instant response from controllers. I feel like this is less clumsy than having multiple MIDIOut objects.

// MIDI transport for external MIDI
// '.connect' is Linux style
// see MIDIOut help
MIDIClient.init;
m = MIDISender(0).connect(1);

// or MIDI transport to a VSTPlugin
(
SynthDef(\vst, { |out = 0|
	Out.ar(out, VSTPlugin.ar(numOut: 2));
}).add;
)

a = Synth(\vst);
c = VSTPluginController(a);
c.open("sfizz.vst3");
c.editor;  // and load a sfz instrument

m = VSTPluginMIDISender(c);  // --> plugin controller

// then, same for both output targets
n = MIDINoteMessage(device: m, latency: s.latency);
o = MIDIControlMessage(device: m, latency: nil);

// play middle C w/ velocity = 80, for 2 seconds
// (timed release is a convenient feature missing from MIDIOut,
// once you get used to it, you can't live without it)
n.play(60, 80, 2);

o.play(1, 128.rand);  // set CC1

So then, in my live coding system, I can play notes on Voicer objects (ddwVoicer quark), which target SC synths, or hardware, or VSTPlugins, with zero change to the code interacting with the Voicer(s), and they all cooperate seamlessly.

For note control, my ddwVoicer quark recently added support for MPE output, with automatic translation of frequency (Hz) to midinote + pitch bend for arbitrary microtuning. That is slick and a lot of fun – play 400 Hz and get 400 Hz, even though that’s 35 cents above G above middle C and plain MIDI just can’t. It’s really fun to play a piano in just intonation, or where the same note can change microtonal inflection per note (which is impossible on an acoustic piano). If your device supports MPE, you can deeply mess up equal temperament this way.

That’s not saying anything about what to buy, but, you might consider a look at ddwMIDIMessageSend and ddwVoicer, since the first addresses a problem you might not even realize yet, and the second standardizes the note-playing interface and opens up some creative options you might struggle with otherwise.

hjh

1 Like

Thank you for all the replies. :hugs:

@dscheiba
I mostly want a hardware synth because i ever only had (and have) an korg volca modular and sometimes just want to make music without touching the keyboard for flow and ideas, and then maybe implement it in a track with other instruments playing in SC. And to learn a bit beside SC sounddesign and more performative music making.
My goal isn’t to collect a room full of hardware, just maybe two, maximum three devices total as a supplement. The more this devices diverse from SC’s capabilities, the better i think.

@dkmayer
I’m sorry for my impatience, thanks for your thoughts on this. I think also that, in combination with SC’s pattern and randomness system, interesting things can happen, especially when analog randomness or modulations are added through semimodular synth patching.

@jamshark70
I’m not sure if this is a problem for me, if I understand you correctly. My goal is to control the hardware synthesizer via SC using MIDI notes and some CC commands, but I want all MIDI data to have the same latency and run in sync with SC’s internal synth with the pattern system. I don’t want live control from SC to the hardware synthesizer outside patterns and beside running SC internal synths with patterns! And I won’t be using any hardware to change anything in SC. And if I make a change directly on the hardware, it only affects the hardware synth itself.

At least, that’s how I imagine I’d like to use it.

I’ve been thinking more and more about whether the 0-Coast from Make Noise might be a better fit for me.

Couldn’t agree more about the idea of building your own in SC. Not trying to knock hardware but after getting into SC sold off the hardware I had. Also this A196 inspired project is awesome

3 Likes

If you bought hardware, you’d then be a beginner on that.

IMO, it is better to master something than dabble in many things. SC is unfortunately quite hard to master… but it is very flexible.

2 Likes

@mikecalvert and @jordan
I totally understand your counterarguments, and that’s exactly why I started this thread. Since I don’t really have any hardware yet excepts the volca modular, hardware synths kind of have a magical pull to me. Maybe I just need to dive into it a little to see how I really like it in the long run.

That’s why I now definitely ordered the 0-Coast. :sweat_smile:

Together with the Volca Modular, which I really like so far, I’m going to discover for myself what the pros and cons are.

Of course, I’d love to hear more opinions and see more discussion on this topic.

FWIW, I was just pointing out an alternative, which has some advantages for my use cases. Also FWIW, there are advantages other than latency handling.

E.g., multi-channel expansion. To play a chord for a certain duration, using MIDIOut, you have to do this:

o = MIDIOut(0);
[60, 64, 67].do { |note|
	o.noteOn(0, note, 64);
	thisThread.clock.sched(2, {
		o.noteOff(0, note);
	});
};

Or, assuming n = MIDINoteMessage(device: m, latency: 0.2):

n.play([60, 64, 67], 64, 2);

(And if velocity is an array, the velocities will be matched up positionally with the note numbers, just like in an Event.) … “I’m not going to be playing chords, so I don’t need this” but someday you might.

This also works for setting multiple CCs at the same time.

c = MIDIControlMessage(device: m);

c.play([1, 7, 10], [22, 100, 64]);

MIDIOut works fine at a lower level, so feel free to ignore.

hjh

1 Like

I didn’t mean to imply that your comment is worthless. Tips like these are always helpful. I’m just glad this problem doesn’t occur in my specific use case. At least, I hope so.

And if it does affect me, I’m now aware of the problem and know how it could be solved, thanks to you.

What I’ve found for myself is that one of the most difficult things with SuperCollider is to stop the instrument building process, and to get into the musical space, which the instrument building seems to continuously pull me out of. And building and customizing can simply be much more fun, there and then, so if it takes even just 5 minutes of configuration to get started, I’m already heading in another direction. Having something to dabble with that doesn’t need to be configured, can certainly be a welcome addition.

EDIT: This wasn’t meant to be a reply to jamshark70’s post, but to the thread in general (not sure how to change that)

2 Likes

I usually use Supercollider for my sound producing needs. It sounds great and is more flexible than most commercial synths.

But, years ago I went thru a phase of making music for dance and theater, and I bought a Waldorf Blofeld because 1) it used many of the synthesis techniques I was using in SC at that time 2) it has MIDI CC control over almost every single parameter, and 3) I found I could dial in sounds more quickly during rehearsals (i.e. workflow was faster).

I also didn’t have to troubleshoot that much.

In my case I made a controller with a Behringer BCR-2000 and mapped a knob for pretty much ever parameter. I believe the Blofeld has 128 CC parameters. You could access those CC messages thru Supercollider, and utilize SC’s extensive pattern capabilities to do something unique.

1 Like

Another interpretation of if this is an appropriate question could be that it’s actually a very personal question. I came to SC from my love of synthesizers and by using SC discovered that I really like synthesis more than actual music making. Creating the actual sound and knowing how the sound is constructed was the hook for me. I had some very nice old gear that had got long ago and it become very valuable so I decided to sell it. That decision was very freeing actually. I do not feel the allure of hardware anymore, but I fully understand it is exciting and fun to use etc but SC in terms of what you can create your own is pretty hard to beat. And thats the part that makes me want to open it.

1 Like