ForumsHardware ← Soundplane and Reaktor

I'd love to be able to control Reaktor using the Soundplane and OSC but I can't figure out how to tell the t3d messages where to go once inside Reaktor. Has anyone managed to do this? I've tried looking on forums but this seems much more advanced than just mapping an ipad touchOSC parameter to amplitude, which is what most of the internet seems to want to do with OSC...

Does it have to converted to some other kind of data in Max first?

this is an area I hope to be experimenting with soon (though Ive quite a few soundplane projects, so may take some time :))

what are you trying to do?

  • use for control? e.g. mapping to sliders?

  • use for note input?


should be pretty much the same, as doing with touchOSC
basically you will need to set up a zone file, which contains X or Y sliders,
then the messages are
/t3d/zonename value

note input

much more effort, and tricker that mapping :)
first most ensembles are build around midi, so you have to find the appropriate midi inputs, and replace them with osc.
one of the difficulties, is t3d is touch focused, whereas midi is note focused.
(this is a problem with the note-off message in particular, as t3d does not sent the note value)
its actual possible to make it work nicely, I experimented with this in the past with the eigenharp, the touchId can be used to drive the poly
(in fairness, its quite a task to get it working, and many parts will be instrument specific)

as i said, ive not got my soundplane yet... but when I do, I will be experimenting.
probably simple control first, and then note input much later.

Randy: perhaps the final touch message should contain the note (but zero x,y,z etc) this means a trivial conversion to midi would be possible, which ignores touchId.
(usually this is not best practice, but for some applications is 'good enough')

I was hoping to play notes in instruments and maybe map x,y,z to other parameters. I don't know how to break down the t3d messages appropriately. Would it be done using the osc array object?

I've also never really made my own reaktor patch so it's a bit of guess work here

yeah, Im not an expert either, as Ive only built very small things too, really to try to understand reaktor

as far as I've played with it, there are two things you can do with OSC

  • osc learn
    this basically allows you to take one of the parameters from the messages (using an index), as far as i can tell this has to be 0.0 - 1.0 and then is automatically scaled by the control
    this is easy to do :)

  • OscReceive / Osc Receive Array

the first is trivial to use, just give it a pattern and specify the number of parameters (=ports) - but its limited to 10 outputs

the second, is standard array semantics in Reaktor, Ive not used but I assume it can do greater than 10 parameters... but t3d always has less than 10, so just use OSC receive :)

ok, playing notes into instruments, this is where it gets kind of tricky :)

you have to do 2 things:

  • you have to go through you instrument and find all the midi objects and replace them with an osc receive. e.g note pitch. (actually, you'd probably be best using an OSC recieve than then sending this thru the internal messaging of reaktor, as you will find many midi objects are repeated e.g. you might find a note pitch connected to the oscillator AND to the filter (to do key tracking) )

for simple instruments, its straightforward enough, for more complex, it be be quite difficult to find all the midi objects,
partly because there not prefixed with 'midi' or anything, just called note pitch, pb

there are a couple of things i find problematic with the t3d spec when using with reaktor:

  • the note off, does not send the pitch, this means you need to look it up in some kind of voice array
  • reaktor expects fixed patterns /t3d/tch* is not working, so you need to put a pattern in for N voices, which is a bit of a pain

ok, once you get over that it should work...

the next step brings 'extra fun'
you want to do per note expression, e.g. pitch bend on individual fingers,
this is something as i said, Ive looked into, its possible, but means you need to be tracking voices, and then only affecting the correct voice... this is possible in Reaktor as is has a pretty good poly system, but its not trivial.
(note: also you may have to redesign part of the instrument depending on how its using the poly mapping)

personally, my idea, is to probably build a simple synth of my own first, get used to doing the above
and only then looking a retro fitting existing instruments, which will be much more complicated.

I think its a rich avenue of investigation for sure, my only issue is time... as Im also wanting to do similar things in Max/Msp
which currently has my focus.

hope the above helps a bit.

Hi Mark,

The Soundplane is a continuous controller first and foremost, not a keyboard. So the protocol reflects this. The touch number is the only thing that two ongoing touches cannot share. It's fine for them to be on the same note. Or for a touch to start on one note and end on another. So we don't want to be comparing notes to tell touches apart in any case.

I tried to make t3d useful in any environment that can receive OSC controllers and treat them as control signals. The idea would be to have a controller /t3d/tch1/z for touch 1 amplitude and so on. I don't know if Reaktor makes it easy to build things at this level. I know that Max/MSP does.

Ah, I think i may have misread (or not looked closely enough) the t3d code, and assumed the note number was the starting note, not that it was continually changing.
(such is the problem with reading code, without being able to run it :))

EDIT: actually just looked at my code, i also did continuous pitch, so just 'forgot' this temporarily :)

that alters the approach a little, when converting existing reaktor instruments
(since they follow a midi model, note on w/ pitch, then pitchbend ), but still possible,
you just need to track the voices(=touches) as mentioned.

my plans are more around building my own instruments, so not an issue, as these don't need to follow the same midi model.

yeah the tchN comment, was not that it would be better the other way, just its a bit of a pain in Reaktor, as it is unable to match partial paths or even process the path. so you have to be explicit.
there are of course some use-cases where being able to match a particular voice is useful.

hi there, i dont know how to connect reaktor with the soundplane over osc, i tried everything but i failed. but i found something that might be interesting for all reaktor users with soundplane:

its a macro and some example synths from a guy called mark smart that he made for the continuum, but it works fine with the soundplane over midi. you just have to insert his continuum controller makro in a reaktor synth and connect some cables and you are ready to play that synth with your soundplane, i use it all the time! i hope that can help.

thanks @timoka those are really good examples.
they could be very easily adapted to use OSC, I might give that a go in next few days.
if so I will share
(Ive emailed Mark Smart, to see if he minds me sharing 'derivative' products)

here you go... not 1 but 2 T3D reaktor based synths

included is the t3d macro which replaces Marks 'continuum front end' and is pin compatible.
I then updated two of his synth NanoWave and Matrix using this macro.
(whole thing took less than 5 minutes)

you can easily do his other synths, by simply downloading his ensembles and then replacing the front end, with the macro.. just be careful to wire the correct things up.
(tip: import the t3d macro, and wire up one by one, as you attach the t3d wires the continuum front end wires will disappear, so you know whats left to do... and only delete the continuum front end once you have done all the wires)

thanks to Mark Smart for sharing the originals, and I hope others here find these useful and instructive
p.s. I checked with mark and he was fine with me sharing.

(another!) Mark

EDIT: ok, Ive noticed there are issues with Reaktor and T3D OSC,
a) note stuck, there appears to be a bug in Reaktor, when alot of osc data is sent quickly, it is present to the application out of order. this is most noticeable when the last couple of pressure values get reversed, so we 'miss' the note-off, so we get a stuck note.

possibly this could be circumvented, by watching frame messages, and if we haven't had an update since N ms, then turn the note off.

b) continuous event streams in osc
these should be sent at a continuous rate as specified in the soundplane app (in Hz),
but I'm seeing quite a variation in this, e.g. at 250hz i see between 175 and 375 hz,
in fairness I see the same behaviour in MaxMsp.
BUT the issue with reaktor is there seems to be a 'ceiling' at around 300hz, over this, and I still see that data at similar rates to 250hz.
THIS is not the case in Max, so its a Reaktor issue.

Im checking on the NI forums to see if its a known issue.
really (a) is a problem, I could work around it, but its not nice...
its a pity we don't have a timestamp/seq on the individual messages as this would make a workaround trivial.
(I know the time is on the OSC bundle, but Reaktor does not expose this)
perhaps an OSC option, which enables a seq on the tch messages... let efficient, useful for some hosts.

being sent over UDP, t3d messages can theoretically arrive out of order. I have never seen this happen myself however.

possibly this could be circumvented, by watching frame messages, and if we haven't had an update since N ms, then turn the note off.

I think this is the best solution, since for most applications receiving OSC it doesn't seem to be a problem. We could also add an optional "resend touch off" to the Soundplane app.

I have more work to do on timing, and plan to use the bundle timestamps to remove the jitter you are seeing. Practically, it doesn't seem to be a big issue for the continuous data. I find that a slower rate like 100 Hz or even less is enough to transmit anything my fingers can put out.

yeah, though... I think its reaktor... as exactly the same tests work on Max/Msp and also on a C++ app I'm writing, on the same machine.

yeah, the frame message idea should work, and given the speed of NI fixes, I think is probably the only realistic solution for now.

touch off wont help in this scenario, as it would still look like a touch-off followed by a 'a new touch on' ... really timestamps/sequencing is the only real solution.
and I totally agree, really its Reaktor that should provide us with access to the bundle timestamp.

my only 'concern' over using the bundle though, is I think there are a few apps that don't explicitly support osc bundles and their timestamps e.g. Numerology also doesnt(though Jim may be willing to add it)

wow lots to look over here, thanks everyone!

ah cool, thank you very much @ thetechnobear!

ok, Im getting a bit more in to Reaktor so Ive updated this Macro :)

as I mentioned, the issue is Reaktor does not keep the OSC messages in order... (its a known bug in Reaktor). This would cause 'stuck notes' with the previous macro.

In this newer version, I look for frame messages, and if I receive a frame, but no touches then I know the note is 'off' (as touches are continuous, so if your not receiving a tch its because its no longer active)
Ive played with it a bit, and seems to be working fine.

here it is Reakor t3d it contains the macro, and again the 2 demo ensembles from Mark Smart, converterd to use it.

oh so very very useful!! thank you very much for the new macros @thetechnobear, i now convert all my favorite reaktor ensembles to receive osc from the soundplane, nice!

your welcome, enjoy :)

Useful to me too! Thanks! Can't wait to get home and try it.

These technical things always put a big roadblock in the ol' creativity. I'm waiting for Absynth to be able to use the Soundplane.

@morgang - I don't have Reaktor, but I assume that it would be easier to support the Soundplane via MIDI. In the MIDI world, each touch would be a separate MIDI Channel, and then Note On/Off, Pitch Bend, Aftertouch, and Continuous Controllers would allow the Soundplane to control a lot of parameters in Reaktor without as much effort on your part.

The issue with OSC is that there is no standard way to connect a controller with a sound-generating device. In the monome world, there are a set of 2D messages, but they do not support pressure or the other dimensions of the Soundplane. Randy's t3d protocol is not specific to the Soundplane, but I don't see Reaktor supporting this natively without some work.

Granted, MIDI doesn't fully support a non-keyboard controller like the Soundplane without requiring a few settings to be tweaked (primarily, making sure the Pitch Bend range is set high enough to allow a Soundplane touch to extend across most of the surface), but I've been able to get vintage synths to do everything I need (except bend beyond 2 octaves).