Reader Mitsushi Abe let us know about this fantastic DIY project – an Ondes Martenot MIDI Controller.
Abe, who describes himself as “an amateur geek living in Tokyo”, loves to make DIY instruments. He used an Arduino to control the Korg Legacy Collection Mono/Poly software synth.
At the end of this video, he plays Saint-Saens’ The Swan on the Ondes Martenot MIDI Controller.
Outstanding. The guy not only built the instrument, which is impressive enough, but he’s also invested the time required to play it well. That’s a two-fer. I prefer the sound of a Martenot to that of a Theremin. Its very subjective, but the former sounds more like the player is digging in, somehow. Three thumbs up for building it, playing it well and showing its easy integration with the modern world. I’m sure I’m not the only one who can envision a commercial version of this being well-embraced.
Brilliant!…thanks for sharing…highly appreciate it
Wonderful!! It sounds fantastic,and the build quality is superb.I love the way you made it
tidy,yet still allowed the guts to be visible.absolutely exquisite!! Well done,old boy!!
wow, awesome work ! And very nice sounds !
I’d have really no idea about how to make this !
Man, that is something! Outstanding build, and really outstanding playing. Just a beautiful sound.
if i’m calculating it correctly, the 10bit ADC on the arduino when covering 4 octaves would mean that there is only 20 steps per semitone. that also assumes zero noise on the ADC, if there’s even 1 bit of noise, that goes down to 10 steps per semitone. that seems quite big, and I’m surprised that the pitch is so smooth in the video.. is there any smoothing going on here in software? maybe a very very slight amount of portamento/glide being dialed in on the softsynth?
Thanks very much, guys!
i wOULD lOVE tO tALK tO tHIS mAN i WANT TO BUILD tHIS INSTURMENT hOW cOULD i gET a RECENT sCHEMATIC aND A cODE tHAT wORKS wITH uno tHANKS dAVE
here it is:-) mitsushi
////////////////////////////////////////////////////////////
// Ondes Martenot MIDI controller for Arduino UNO v0.0 (plus cutoff version)
// Mitsushi “Galliano” Abe 2012
// http://gam.boo.jp/blog
////////////////////////////////////////////////////////////
// Connect the Pressure sensor to A0, the Switch to D7 and the Hemipod to A1
// Connect Mac>>USB-MIDI(IN)>>Arduino
////////////////////////////////////////////////////////////
#include
#define SWITCH 7
int PITCH_RANGE = 24;
#define PITCHINPUT 1 // Connect the Hemipod to A1
int CUTOFF = 2; // Connect the pod to A2
int sensorPin = 0; // the Pressure sensor connected to A0
int sensorValue1;
int sensorValue2;
int midiValue = 0; // Volume Value
int old_midiValue;
int cutoffValue = 0; // Cutoff Value
int old_cutoffValue;
int midiCh = 1;
int cc = 7; // Main Volume for MIDI Control change
int notecounter = 0; // Counter used to avoid refrainig note on
int val = 0;
int MIDI_ROOT_NOTE = 60; //C4
byte lowerBits; // Pitchbend value LSB
byte upperBits; // Pitchbend value MSB
int iCounter = 0; // Counter used to reduce the sample rate
byte noteOnToggle = HIGH; // Used to hold the state of the beam
float MIDIPITCHSCALE = 0.03815;
void SendMIDI(char cmd, char data1, char data2)
{
Serial.write(byte(cmd));
Serial.write(byte(data1));
Serial.write(byte(data2));
}
void control(){
val = digitalRead(SWITCH);
if(val == HIGH)
{
notecounter = notecounter + 1;
if(notecounter == 1)
{
SendMIDI(0x90, MIDI_ROOT_NOTE, 127); // Send the root note
}
}
else
{
// NOTE OFF
SendMIDI(0x80, MIDI_ROOT_NOTE, 127); // Silence the note
notecounter = 0; // Reset the counter
}
}
void volume(){
sensorValue1 = analogRead(sensorPin);
midiValue = sensorValue1 / 7.6;
if(midiValue>127){midiValue=127;}
if(midiValue != old_midiValue)
{
SendMIDI(0xB0, cc, midiValue); //
}
old_midiValue = midiValue;
}
void cutoff(){
sensorValue2 = analogRead(2);
cutoffValue = map(sensorValue2, 0, 1023, 0, 127);
if(cutoffValue>127){cutoffValue=127;}
if(cutoffValue != old_cutoffValue)
{
MIDI.sendControlChange(74,cutoffValue,midiCh); // 74 is the number of CUTOFF for KORG
}
old_cutoffValue = cutoffValue;
}
void ProcessAnalogValue(byte i)
{
// get a value for the GP sensor on pin i
float _x = Z(i);
// 0 – 16383 is the full 14 bit pitchbend range
int _converted = (int)((_x-294)/ MIDIPITCHSCALE);
// Convert this 14 bit range value to LSB and MSB bytes
lowerBits = (byte)(_converted & 0x7F);
_converted >>= 7;
upperBits = (byte)(_converted & 0x7F);
// Now output the message
SendMIDI(0xe0, lowerBits, upperBits);
}
float Z(byte pin)
{
int tmp;
int data = 0;
int summary = 0; // summary of input data
int h;
// get average data from analogpin0
for(h=0;h<20;h++){
data = analogRead(pin);
summary = summary + data;
}
tmp = summary/20;
return (float)tmp;
}
void setup(){
MIDI.begin(1);
Serial.begin(31250); // Set MIDI baud rate:
SendMIDI(0xB0, 0x65, 0);
SendMIDI(0xB0, 0x64, 0);
SendMIDI(0xB0, 0x06, PITCH_RANGE); // Set pitchbend range
pinMode(SWITCH, INPUT);
}
void loop(){
volume();
cutoff();
control();
ProcessAnalogValue(PITCHINPUT);
delay(1);
}
I would make this arrangement but the scheme is not sufficiently clear and complete it someone could send me the diagram
thanking you in advance
and to continue the expresssion is more significant with this system or rubbon ?
excuse me my English is not very good 🙁
Thank you