Dedicated MIDI controller for Ondes Martenot

RELATED
PRODUCTS

Post

I wasn't sure where to post this since it is partly a hardware integration question, and partly a MIDI specification question. But it does relate directly to the Soniccouture ondes instrument, which I have purchased, so I'm putting it here.

Firstly, yes I have read the manual and I am aware that vibrato can be controlled with aftertouch, volume with a dead key, and ruban effects with various automatic or semi-automatic glide modes on the keyboard.

What I want to do, though, is to build a dedicated ondes MIDI controler and play it like the real instrument, controlling the soniccouture software implementation.

This will be a long posting, sorry.

Easy things first; most of the tiroir is pretty simple. 7 analog sliders for oscillator control (8 N C O G g S), a simple switch for T, four more analog sliders for the three diffusers and line out, three rotaary pots for the filter control (cutoff, res, eg) and another switch for 12dB. That is 14 analog inputs, and 7-bit accuracy should suffice for each one, so wire all those up to a suitable controller board or boards, output MIDI CC and use MIDI mapping in the DAW to connect them to the on-screen GUI controls.

I have a Doepfer wheel electronic board for playing around with, but that only has four analog input plus one switch input, so I would need four of them chained together which gets awkward and expensive. I was considering one of the Eowave interfaces, the Eowave 2 is inexpensive and gives me 16 analog inputs plus 29 switch inputs. The eoweave site seems to indicate that I can get 7 bit or 10 bit CC messages, plus 14 bit but for mapped pitch bend only.

First question - anyone know what the actual ADC resolution is on that board?

Alternatively I could use an Arduino board such as the Arduino Mega 2560, which gives 16 channels of 10-bit ADC from which I can construct the MIDI messages and send them out through an Arduino MIDI sheild. More programming, but probably more flexible.

(For those following along with the manual, I didn't mention the ADSR controls because I don't plan to make dedicated controls for them and, if the rest of the project goes well, I won't need them).

Now it gets a little harder, but not much - the touche d'intensité or volume/expression controller. This is another analog input, I am unsure whether to implement it using a pressure sensor or whether to mount it on an arm and use a flex sensor on the arm - which would seem to give a range of travel more like the real thing. (I should mention that I have not seen or played a real one, just seen pictures and videos, and heard it on CD). But it looks as if there are several centimetres of travel, a pressure sensor would somehow need to move with it while being progressively activated.

Question - anyone built something like that? Its a bit like aftertouch except it is pressure as soon as the key is touched, rather than only starting once it is fully depressed.

On the MIDI side, this could be mapped to CC11 (coarse Expression) as the manual suggests. And the controllers mentioned above have 16 analog inputs of which I used only 14, so one of the two spare ones could work here.

Question - does the sociccouture ondes also respond to CC43 (fine Expression) in case 127 values is insufficient?

Now we come to keyboard vibrato. (Yes, I could use aftertouch to simulate this but I want to control it in the authentic way, with the whole keyboard moving from side to side). The original ondes has smaller than standard keys, and it seems that Korg microkey 61 wouyld work well here - it has micro keys, it is compact and light, and not over-burdened with additional controls. I thought of mounting the entire thing on some sort of sliding rails, spring loaded at each side, then use a displacement sensor or run cord over a wheel for a rotary sensor, run that into my (one remaining, so 16 in total) ADC and send out pitch bend MIDI messages.

(continued)
Last edited by Nantonos on Sat Sep 08, 2012 11:05 am, edited 1 time in total.

Post

Now comes the hard part, where I could really use some advice. Besides keyboard, notes can also be played with the ruban, a sliding ring. This seems to be a lot more than a pitch bend - it is continuously generating notes. This does not fit well into the MIDI scheme of note on and note off.

Also, clearly 7 bits or even 10 bits is insufficient. I'm going to need the full 14 bits that MIDI allows, to get sufficient excpression across the whole 61-note range.

I have been loking through the MIDI specification, and not really finding anything that matches apart from pitch bend.

Question - can I use low-res pitch bend to give the keyboard-shake vibrato, and high-res pitchbend (presumably on a different channel) to produce the continuous, full range pitch effects of the ruban? If so, can the soniccouture ondes implementation cope with responding to MIDSI on two separate channels? Or would I need to run two instances of the instrument (hope not)?

In terms of hardware, the ruban looks fairly easy. Its just some sort of ring, attached to a cord at each side, the cord runs over two pulleys, one at each end of the keyboard and one of the pulleys is connected to a rotary encoder. I was thinking that a 10-turn potentiometer would work well there.

Of course, the various sliders and pots described earlier have used up all 16 analog inputs, and the controllers were only 10 bit anyway. This is going to need 12 or 14 bits, and probably some trimming so the start and end positions of the ring correspond accurately with the key positions on the keyboard.

There is a microcontroller, the Maple, which is like a 32-bit Arduino with 12-bit ADC. Or I could use the Eobody 3 which is also based on a 32bit controller and also has 8 or 16, 12-bit ADC inputs. Maybe less programming since the MIDI part is already built in.

But mainly I am unsure how to map the ruban mechanism to MIDI, and in particular to some MIDI that the soniccouture ondes implementation will understand.
Last edited by Nantonos on Wed Aug 29, 2012 11:53 am, edited 1 time in total.

Post

(reserved so I can sumarise responses and give updates as the project proceeds)

Post

Why not just build an Ondes Martenot?

Post

aMUSEd wrote:Why not just build an Ondes Martenot?
Because, in addition to all the above mechanical issues, that would also require me to have very good cabinet making, metalworking, and valve electronics skills which I don't posess.

The resulting project, if it worked at all, would be time consuming and expensive. Or I could buy one, there is a new instrument called the Ondea being made. I understand there is a waitlist of several years and the price is around 15,000 € which is a little outside what I can afford.

Or I could use the Soniccouture software implementation, which I already have and which only costs 99 €, but play it using a standard MIDI keyboard and the various semi-automatic emulations that are provided to simulate some aspects. Then, if ever faced with a real ondes, I would then be unable to play it as the layout and functionality is all different.

So I would rather make a small MIDI controler to closely simulate the real thing, at a total cost of maybe 2 or 3 hundred €. Besides, it looks like a fun and instructive project, as well as having a useful end result.

(Dedicated, one-knob-per-function controllers seem to be becoming more popular for software synths. This is similar).

Does that answer your question?

Post

Question - does the sociccouture ondes also respond to CC43 (fine Expression) in case 127 values is insufficient?
You can assign CC43 to be volume control if you like, but not at the same time as CC11. Even if we assigned two simultaneous controllers to Volume in Kontakt you wouldn't get 14-bit precision, Kontakt is not able to do that.
Question - can I use low-res pitch bend to give the keyboard-shake vibrato, and high-res pitchbend (presumably on a different channel) to produce the continuous, full range pitch effects of the ruban?
What you would need to do is send a very small amount of pitch bend on the keyboard-shake, and a large amount from the ruban… this could be done on the same channel.

But I think the main problem you're going to run into is the ruban controller. Even though pitch bend is 14 bit, it's not precise enough to cover 4 or 5 octaves with any precision. It's a fundamental problem of MIDI that there is no continuous pitch protocol, and that's what we're up against. It's why we have to use portamento to fake continuous pitch in the MIDI world.

The French Connection (from Analogue Systems) is a professionally built Ondes type controller, similar to want to make, and it has NO MIDI OUTPUT. It doesn't have a MIDI output precisely because of this basic problem, and if anyone could figure out a way to do it in MIDI I'm quite sure Analogue Systems would be the ones to do it.

So I think you're up against a wall with the MIDI spec really. In the future, if OSC or some other protocol picked up where MIDI left off (and Kontakt supported it) it would be much easier to do this kind of thing.

All the best,

Dan
Soniccouture

Post

Dan, many thanks for the responses.

So in summary a tiroir, and a keyboard with vibrato is all doable, and the ruban is not, without updates to the MIDI spec, or an alternate protcol, and Kontact implementing those changes, and your implementation using them.

I think that part of it is still worth pursuing, and wil give it a go.

I may pick up on the longer term spec-related changes, but proably in a new thread. However, I would welcome any further input from you on requirements (by pm or email, if you wish) for such an update.

(Written to the sound of Fête des Belles Eaux, Messiaen, performed by the Ensemble d'Ondes de Montréal)

Post

Yes, I think the tiroir and keyboard with vibrato would work very well with our Ondes instrument. It's just continuous pitch which isn't going to work properly, so I'd rely on portamento for that instead of trying to replicate a ruban.

You may want to experiment with a ribbon controller to get an idea of how it feels. I use the Doepfer one (seen in one of the demo videos) and it works quite well over a small range (up to an octave or so), but beyond that you can't hit an exact pitch reliably.

cheers
Dan

Post

The eowave oem2 controller is still on their site but no longer in their online shop; and I decided that I would prefer the control of coding myself rather than using a prebuilt implementation. So I am basing the tiroir project around an Arduino Mega 2560.

The Arduino is ordered and has arrived, the midi shield is on it's way from the US. I have a dozen 10k lin slide potentiometers, a few 10k lin rotaries, two slide switches; so I can start experimenting and coding. I got the eowave 50cm ribbon and a ten-turn 10k lin pot to experiment with as well.

Noticing that the original Ondes had six pitch bend buttons, I got six momentary press switches to implement that aspect as well. I plan to implement the red/green on/off signalling with bicolor red/green LEDs connected to arduino digital outs.

Arduino dev environment is installed, have done the hello world examples like reading a single analog sensor, sending the result over serial USB to the computer, etc.

Although there are 16 analog inputs there is only one ADC, so the value of the sample and hold capacitor can be inaccurate when switching between inputs rapidly. I have a sketch which reads several sensors, for each one the first reading is discarded and the next four are averaged with a 2ms delay between reads. Experimenting to find the speed/accuracy tradeoffs here.

Here is a rough control layout (PNG export of SVG original). Sliders will be 45mm throw (I have 60mm throw ones, and they are too large to work well).

Image

Post

Realising a couple of things on that layout need explaining. There is a D4 as well as D1..D3 because some Ondes (such as the new Dierstein one) have both the original palme diffuser with twelve tuned strings and also the resonant spring diffuser which replaced it. So I added that to the controller for upwards compatibility, while being aware that the soniccouture ondes implementation will not respond to D4.

I can understand and appreciate that the soniccouture on-screen layout groups all the oscillators together, including S and T. However, the original Ondes Martenot (and the newer Ondea and Dierstein Ondes implementations) put S over on the other side; noise differs from the others as it is not tuned. I followed that layout here.

I also put T (tutti) up beside the diffuser sliders, partly for space reasons and partly because it is not an oscillator itself, it is more of a preset selection of oscillators.

Question: does the soniccouture implementation handle saving the old values of the oscillators when T is enabled, ignoring the controller values for those oscillators, and restoring them when T is disabled? In my Arduino controller I plan to only read the value of the oscillator sliders if T is off.

Lastly, I have a C/B switch over in the bottom right corner for future expansion. Just yesterday I realised what that was, on the photos I have seen: clavier / bague, i.e. switching between the keyboard and the sliding ring. So I added it because I live in hope that this might one day be useful if MIDI improves.

Post

Looking good. This is quite a project, but as far as I can tell everything should work with the SC Ondes. The small "pitch bend" buttons might simply be implemented by adding or subtracting notes from the currently held key (that's how they sound on the real instrument, they're instantaneous)... but then you'd have to run your MIDI to your unit and keep track of the current note as well.

If we could get our hands on a working palme diffuser we could add that to a future edition of Ondes. Plus since the strings can be tuned, we'd have to choose a limited number of tunings while sampling it. But it might be possible eventually.

The Tutti switch on the SC Ondes remembers the non-tutti settings of the faders, so that should work as you expect.

Good luck with your project. You'll have to make a video when you get it all working!

Dan
Soniccouture

Post

soniccouture wrote:
Question - does the sociccouture ondes also respond to CC43 (fine Expression) in case 127 values is insufficient?
You can assign CC43 to be volume control if you like, but not at the same time as CC11. Even if we assigned two simultaneous controllers to Volume in Kontakt you wouldn't get 14-bit precision, Kontakt is not able to do that.
Following up on this, as I may have been unclear. As I'm sure you know, pitch bend is 14 bits and the two 7-bit data bytes are sent one after another, following the 1110nnnn status.

Which you mentioned in passing when explaining why the ruban would be hard with the current state of MIDI:
soniccouture wrote:... Even though pitch bend is 14 bit, it's not precise enough to cover 4 or 5 octaves with any precision.
And also confirmed in the Kontakt manual (p.331 in the Kontakt 5 manual):
Pitch Bend: This kind of MIDI data is usually sent by pitch bend wheels or levers on master keyboards. Unlike normal MIDI controllers, pitch bend data is transmitted in a rather fine resolution of 14 bit, which provides 16,384 value steps. If both your controller and the parameter that you'd like to modulate can work with this resolution, KONTAKT will use it to its full extent.
The other controls seem to have had 14-bit support grafted on later, by treating the original 7-bit CCs as the most significant byte and assigning a whole duplicate set of MIDI CC's for the least significant byte. So for example, looking at the MIDI spec CC 11 is now described as Expression Controller MSB, while C C43 is LSB for Control 11 (Expression Controller). So to send a 14-bit value, a pair of CC messages is sent. That is what I was referring to above.

So the MIDI specification does support 14-bit precision for things other than pitchbend; but if I understand you correctly, Kontakt does not implement that part of the MIDI spec so your implementation is unable to use the feature. Is that right?

Post

soniccouture wrote:The small "pitch bend" buttons might simply be implemented by adding or subtracting notes from the currently held key (that's how they sound on the real instrument, they're instantaneous)... but then you'd have to run your MIDI to your unit and keep track of the current note as well.
I'm going to try protoyyping it that way, and also try simply sending pitchbend messages (as if the wheel instantly jumped from the rest position to the shifted pitch).
soniccouture wrote:If we could get our hands on a working palme diffuser we could add that to a future edition of Ondes. Plus since the strings can be tuned, we'd have to choose a limited number of tunings while sampling it. But it might be possible eventually.
That would be interesting to hear. It seems there are 12 strings, so at least the palme des not need to be re-tuned each time the key changes :) whatever key is selected, there will be a string to resonate with each note in the scale.

However, I understand that the palme was abandoned because it was awkward to use, and unreliable. I imagine though that it sounds quite different from the other diffusers.
soniccouture wrote:The Tutti switch on the SC Ondes remembers the non-tutti settings of the faders, so that should work as you expect.
OK, good.
soniccouture wrote:Good luck with your project. You'll have to make a video when you get it all working!
Thanks for the encouragement and the rapid answers to my queries. I do plan to document it as building progresses.

Post

So the MIDI specification does support 14-bit precision for things other than pitchbend; but if I understand you correctly, Kontakt does not implement that part of the MIDI spec so your implementation is unable to use the feature. Is that right?
True, the MIDI specification does allow you to send multiple controllers, and by using two of them you could theoretically achieve 14 bit precision (or more by using several CCs).

But Kontakt doesn't support this kind of multiple-byte system. If we route two controllers to the same parameter, Kontakt will respond to each of them individually. Either one will have the same result, each replacing the other. There's no way to instruct Kontakt to treat the two controllers as MSB and LSB and map it as 14 bit depth.

As far as I know, very few devices are able to manage two seperate CCs as a single parameter, partly because of synchronization issues. If your MSB and LSB are even slightly out of sync, you'll get garbage. And this is something sequencers are not really equipped to deal with either, otherwise I think we'd see more use of that technique.

cheers
Dan
Soniccouture

Post

Dan, thanks for the reply. I have seen "this is not well supported" comments on this aspect of MIDI, but never "this is poorly supported because of these problems".

I will take this aspect of my inquiries off to other threads or other fora as appropriate (seems like the Midi Manufacturers Association would be the first port of call, then perhaps the Kontakt forums).

(I'm in Zurich on business for two weeks, so construction of the first Arduino prototype will need to wait until my return).

Locked

Return to “Soniccouture”