A DIY musical Transformer
With my Axis-49 I need to:
- Translate (remap) an Axis-49 note “harmonic axis” value to a “folded-scale” (Wicki-Hayden) layout
- See what is coming in from the Axis
- Know how hard I had hit the key
- Double-check the note value – e.g. did I really hit a G#?
-
Max/MSP: a cute little graphical development system
Signals travel along the little wires (black lines) connecting boxes. The boxes do things to the signals, the top is input, the bottom output.
Here’s the flow sequence:
Notein a
Gets the next midi note coming in, splits it into to 3 outputs:
- the midi note value (an integer) e.g 61 = middle C, this is what we need to translate
- the midi note velocity (also an integer, 0 = off, 1-127 = ppp to fff)
- the midi channel number
You can double-click on the notein box to pop up list of the midi input devices and select one.
The signals then travel along the connections (wires) to be translated. The note velocity and the channel number go straight to the noteout box unchanged. The note pitch goes to the coll object to be translated.
coll axis49-wick
In this case the coll (collection) defined in table Axis49-wick.txt serves as a look-up table, the table is a series of paired numbers, with the input value matched to the left of the pair, the output value is the right pair value. Thus, with pair 84, 78; an input value of 84 (musically a C-5 gets mapped to a 78 (an F# ),
This table is easily edited in MS Notepad. When Max/MSP starts up, it will read this table. If like it, the Status box will show “coll; finished, 70 lines”. If not, it will show an error message.
Input “number box”
Display (shows “C-2” ) – shows the key hit by you in terms of what the Axis-49 sent out, as a note.
Subtraction
After I wrote the table, I wanted to shift the notes down an octave, so I added a little box that takes a number in the top, minuses it (see the little “-“ (minus) sign?) by 12 and puts it out the bottom
The 12 subtracted from the note value lowers it by an octave (12 semitones), I display the value in the little number box, but also pass it on two ways, one way goes to stripnote which strips out the note-off values – other wise the velocity would be zero when the note is lifted- and I pass the note on to the big yellow note display boxes.
The switch box
In the center is a little switch box, which allows me to turn on or off the translation
- click the mouse on it and the little switch changes to take direct input from “notein a”.
- Click on it again to switch it back to reading the translated values from the "coll" box.
The little “value box”
This shows the midi note value as a number, not a note, for debugging. Shows (0)
stripnote
Stripnote strips out the note-off values, so they persist on the display after the finger lets up.
2 big yellow “value boxes”
I made these big displays (shows “C-2” and 0) to show the last note had hit.
noteout a
Read the 3 midi input values: outputs:
- the midi note value (an integer)
- the midi note velocity
- the midi channel number
You can double click on the notein box to pop up list of the midi input devices and select one.
That’s all it does – pretty simple, once you understand it.
I have many things that would be very cool to do to elaborate on this basic template:
- a note display and translate note-combinations into chords.
This would really help when demonstrating the thing to people. - Take a midi input file and show which keys to play on the Axis, and/or also show a music score. with
- Create some musically simplified special notes that would train the novice musician’s ear much faster than normal. The normal piano sound is hugely complex – learning from it is like trying to first learn to drive on a 7-axle tanker-truck.
Is anyone game to have some "fun"?
I know what needs to be done, but don't have time to do it.
Ken
------------------------------
Axis49-wick.txt contains
84, 78; 80, 73; 77, 80; 73, 75; 70, 82; 66, 77; 63, 84; 59, 79;
56, 86; 52, 81; 49, 88; 45, 83; 42, 90; 38, 85; 83, 66; 79, 61;
76, 68; 72, 63; 69, 70; 65, 65; 62, 72; 58, 67; 55, 74; 51, 69;
48, 76; 44, 71; 41, 78; 37, 73; 82, 54; 78, 49; 75, 56; 71, 51;
68, 58; 64, 53; 61, 60; 57, 55; 54, 62; 50, 57; 47, 64; 43, 59;
40, 66; 36, 61; 81, 42; 77, 37; 74, 44; 70, 39; 67, 46; 63, 41;
60, 48; 56, 43; 53, 50; 49, 45; 46, 52; 42, 47; 39, 54; 35, 49;
80, 30; 76, 25; 73, 32; 69, 27; 66, 34;
Comments
Best regards,
can one choose to send the output data to a usb midi inter phase and then use it outside of the computer with a tone generator or synthesizer?
I don't see why not. In fact, I'll commit some time to developing a better version of my translator this summer. Adding an option like this is simple and won't be hard to debug, nor will it harm anything. Other options will be PC/Mac keyboard input and/or dual Axis-49 inputs. I also want to add a simple tone generator, for my own nefarious purposes. ;)
is the the axis-49 is fully wicki/hayden/thummer/folded scale? Since the axis-49 with its harmonic table layout has doubled notes that transmit (I would have thought) the same midi value, would that not make it impossible to tell it to play a different note depending on which (say) middle C was hit?
Currently, the Axis-49 keyboard map both banks to the same midi notes, so I get 2 banks of 49 keys with the same notes. Ask the powers-that be in C-Thru Music to please fix this. If this is holding you back from buying, left them know.
Ken
Reset your Axis - press both the octave shift buttons at once. Then to check it out, press C1 (the note in the very middle of the bottom row), starting on the bottom row, then go up pressing the next 3 rows above that - you should hear Cs in ascending octaves.
The remapping software table only works in one octave setting, the default. It's really easy to touch an octave shift button and foul up the notes.
The version I posted should work with the default setting. I had an old version tha worked with the Axis shifted up 1 or 2 octaves. I do not think you would have gotten that version.
Note - Max-MSP does not like to have the midi device connected and then disconnected - it locks up. The easiest way to fix this is to unload and reload the program with the Axis-49 connected.
The software I'll start to work on tomorrow night, when my axis comes in.
Ken.