how do I nrpn?
nrpns have got me mighty confused. I feel like I’ve read a lot about them but I don’t know where to start/what to do in any practical sense. I’ve been trying to find a video or an explanation of what it is I’m actually supposed to do with NRPNs but so far I haven’t got anything that’s helped me actually do it.
I would like to use the knobs on my MPD32 to control parameters on my MoPho using NRPN increment/decrement. The MoPho can receive them and the Akai can send them. I’ve set the MoPho up so midi parameter send and receive are on NRPN. Midi control is on.
I have a knob on my Akai set to:
MIDI CH CC
NRPN MSB 127
NRPN LSB 127
Midi Ch 1A
From the MoPho manual:
0 – 120
Oscillator 1 Freq
Upon someone else’s (admittedly inexpert) advice, I changed the MSB on the Akai editor to 0 and the LSB to 120, but it didn’t seem to work. I didn’t think it would, because it didn’t make much sense to put the range as the LSB…. but it’s all I’ve heard so far.
The Akai is putting out a stream of numbers like this:
176 99 0
176 98 120
176 96 1
176 99 127
176 98 127
I parsed them that way. In the Max window it was just a stream of numbers… I did midiin – print
Isn’t an NRPN supposed to be 4 sets of numbers, not five?
What is the data that’s actually being sent here?
And what is the data that the MoPho wants?
99, 98 and 96 are all NRPN controller numbers, so those seem to make sense… or at least I recognize them.
the 96 would indicate that it is "incrementing"… but it’s unclear where that’s being sent to. It changes to 97 when I go c-clockwise, so that would make sense for "decrementing"…
Also, is 96 an RPN? The mopho doesn’t use those, but the Manual does say it can do increment/decrement.
Where did the 176 come from? What does it mean?
For that matter, where did the 127 come from? or the 1?
The MoPho has an NRPN 176 (one of the steps of the sequencer) and the knob is not affecting it, so it doesn’t look to me like the first number is where it’s going…
A different knob assigned to +/- NRPN puts out the same stream of numbers when moved… starting with 176 again. I didn’t see a 176 anywhere on the Akai editor. The only difference in the printed midi data from the first knob and the others is that the first knob has a 0 and 120 in keeping with what I set the LSB and MSB to. The others just have 127 in those places, which is what they are set to when you first assign the knob to NRPN.
What do I do now? Where do I go with this?
Any help or guidance at all would be super duper appreciated.
MoPho manual is here:
Midi is page 30 onward
I have Trond Lossius’ midi tools, but I don’t know where to begin with those either.
I thought it would be cool if the Akai could send the right messages to the MoPho on its own, but I am also interested in using a Max patch to translate data from the Akai into NRPN to send to the MoPho… I just don’t know how to go about doing that because I don’t practically understand why numbers need to go where for it to work.
i may have just figured out how it works..
I think it should be:
176 99 0 (parameter # MSB)
176 98 0 (parameter # LSB)
176 6 XX (where XX is value MSB, 0-127)
176 38 0 (optional 4th message, value LSB, if you need 14-bit precision)
Assuming you want channel 1. If not, add (channel – 1) to that 176.
Ok, that makes some sense. I’ve got the knobs working to control some things on the MoPho.
I want to make a Max patch to control the mopho more completely. I’m going to start on that tomorrow.
I’m still wondering where the 176 is coming from though..
I would suggest grabbing yourself a copy of a MIDI Message Table from the net somewhere – that should explain things. .
Basically the 176 is decimal for 1011 0000 a ControlChange on Channel 1
This is the status byte – 1011 is Control change & 0000=Channel 1
The other numbers are the data bytes – number of which varies . . .
99 =NRPN MSB(0-127), 98 = NRPN LSB(0-127) ,
101 = RPN MSB(0-127), 100 =RPN LSB(0-127)
These are usually followed by 6 =Data Entry MSB(0-127) & 38 Data Entry LSB(0-127)
96 = Data increment 97 = Data decrement – but do not have a third byte usually.
The 127′s in there are ‘Nulls’ to close the transfer so nothing else complicates things
Ahh just had a look at the docementation for the Mopho and you have heaps of info there.
Unfortunately the NRPN120 is Sequence Track 1 step 1.
I would try something more basic like 29 Voice Volume. or 14 nOise level – something easily noticed
Also make sure you have it set for recieving NRPN – AndMaybe sending standard CC’s back to Max from the Mopho would be easier than dealing with the NRPN’s in Max
Re-read all the MIDI stuff and grab a binary to decimal calculator to help make sense of the numbers
hey, thanks! Macciza, you have easily been most informative for me thus far. I figured out MSB and LSB last night but you helped me understand the status byte for sure.
I had set it to 120 because someone had suggested that number had to do with the range, which I now know is definitely not the case. I realized MSB and LSB refer to which "option" of the 16384 NRPN combinations there are, and that they (can) work like co-ordinates on a grid (at least that’s how I’m thinking of it). I got it working last night sending increment and decrement and that works
So I’m understanding what the status bytes are, but I am unclear on how are they sent. Is it sent in binary or as a decimal/nrpn (which is how it appears to be in the Max window)? Or, how do I send it out of Max? Where does it come from and where does it go, so to speak?
ps – I realize that the Trond Lossius midi tools do this, but I would like to understand what it’s doing.
is there a simple way to get nrpns into max?
but still am unsure how the status byte is transmitted.
If you’re using [ctlout] the status byte will be sent for you according to the midi channel you have set for the object. You don’t need to worry too much about it.
Status bytes are sent in binary, but if you need to send one yourself in max you send decimal to [midiout].
MSB/LSB are not like coordinates on a grid, they just use two values together to represent a much higher value. Because MIDI values are 7-bit (0-127 decimal or 0000000-1111111 binary), two of those together can represent a 14-bit number (0-16384). So it’s (MSB x 128) + LSB = value.
In decimal, you could think of the numbers from 1-99 as MSB/LSB, using two messages with the values 0-9 – the first digit is MSB, the second is LSB, and you’d send those as 2 messages: 7 then 9 = 79. (7 x 10) + 9. See?
So NRPN can use just 4 CC messages to address up to 16384 different parameters, each of which can have a value of 0-127 (no LSB or LSB is ignored) or 0-16384 (using the LSB).
I have an NRPN-decode patch somewhere, I’ll see if I can find that.
----------begin_max5_patcher---------- 1402.3oc0ZlzbaaCFF9rzuhug8fOTkLDaboStzjqsIcR5MOY5PKAIwFIPMjT 1VIS9uWrPYyXSaRCPgndvhhq3kO3aExea5jfqJtkWE.+FbILYx2lNYh9PpCL oY+IAaytc9lrJ8kELuX6VtnNXl4b07aq0GOeIbnX+EkbnPr4.jKp4k7pZ9B4 Wg2+w+58vxxhsP857JnpXe4bt55g4YBX95LwJt7T7J4mEvk0P3mmAWtJqlCH 42gLwBnjus3Z8UA5STHzeuLe056TylbAedwdgVRzlCtrPTWk+Ut5XH7qCaNr X+1bwFds90B0bvcRMKe6xpyKD+SIedsAMznP48A33H0lvlOfOe+ipXe8wm0w AHegFLEW8uuhQCZIFQ1VsXB98x7rMGOytr54qyEqZMrjXyvxRUaPIL0lHrZj U2y2mNU8wLGm49yO8V3VIYRBFOfQhURkjRsjWDq3ULQMRTRhZSC6BGYZ82JC X8XC4UhKpgc7xkRE.uBxqA4cueKuRaZeSg5zR0wyk1sYhCf7LUYqjmdYQI7t 2AooyfzD4TJH2mjHsmyjOBoKjnP9byJqghkPlw6o4d6zRmLlV5ZaMLEY4LG1 pYNbRpYpyXuqMzoIi7T2G93HZgyBwZsFEaInPVAplf.HrwACcRrw+fLvpx.s ZD4E0DKfYqgEM1tPnI5oIlV0Pra7RJxq3kiHThPwCGJ3Nfhc4UnLZKnDQtGJ M2iYTqOriatgfbkUBDbkLQcv4A5hCSbCcLqPGy33wP5gMh5CzwuQJ3G4jpKB BC3NYJpalhedlhiL9Gl7nVvTKC9iziGITO5ME6j9bLUAzfQMjmNGqLkqTyxB WgeYDsTQo5P1LayTPsKSgI2.yvVDhbRxTbc1l87QjU3jH2XUncVfogsfEM77 JKQiAD01PcjT6J0fF48rDcGp6WGwXbHScHDSAm8.STGvL1EX1zHIKt+XbJXN lP7MuAhOAbbPdpcwwDm3noGOR5ojiV6G2uGYjcgovn1dj9n3imJv+wFcUcJv unBx1bS1A4F3O9za8UupXSupDDytjED6JAjZL7M0PmdZZU8p8qVcPsDWEaVH KGQdOv07xJ46e0L4dGfpuju6t0SvcaztnikEykhZ0fJNMxsbocGKadszl5kD Lq62ZRGu01UrElDYdqMMkfGVXoY+vlwDPayWjKqlsh6NjheLjv1UPACceO3H Tz.Kyu4uGyqSD1FCCqtx2E5.yLU9wh7eUCU2jsylpF5MEnc9YIjVAWhouH2r wDK6E6xl+EHDBc2XoC3fc.NoI+jYS8KaMIFrGDxtnNDSQhXroAFh+8gPt6.0 ANvV1payZfhMUwf8ONbYgq52yA4RaEdYIndpHs7MPZpz8Eh.Rh6dPrNfC1ES FjYsYRFPuq59Ml8za+4u5.86dQboEs+G1me+Dg5DQLcraVaM+Rj6SVONIroc vFlSqlgogdDwp9FNAov+5FXUYw9c.8zDjNxofzled3HhMAo0WqdEIdv+0K5w Sc7ejVl+UUZdbGmoAzcC4BdUctPuxDstH0hD15hVmuXAWztOaYiF6JjyZMh3 Il6FplTUFAg8nI0ONSqKpWMQnIulo9AtSL0KfuaOenVUdbqTqI9hzD43dNpV UYViNawIgZ8Eiay1XreT6KksGUqYAGuisT2UKZ.9Rpei6WhZcTS5oxd0DyqZ ZPXB60PNjyPMoJuEn8noGD84jqIzPbHi7t4zfhQ3YyoyMMEO.MQ7r4DaHZJw qZ5AC2yTQjG4DYHZxutcCJjIF6WNoLew8oI+hoAUBimc6THfzmlB8ulvmgZB cloI1Pl6H9uRkvyKNcNFcZ.Rxu0DfoCYhi3eC7dCDP89LW3.l47nhhFxLmK8 0I246S+O.bP8THA -----------end_max5_patcher-----------
In fact it makes the job. I use it to totally control my prophet ’08.
Viceversa I can use my ’08 as a midi controller… but parsimoniously,
since synth can’t manage lists… and the external in question
has difficulty to receive many CC’s or send many CC’s at once,
it seems to backlog also in low priority.
----------begin_max5_patcher---------- 671.3ocwW1sihBCEG+Z7ofP1KcM8Ksvb29Nr2sYhAgpVCTLPMi6NYd2WZKFX bpBLB3ESmzSqs+6ud54b38YNdaxNyJ7bew8OtNNuOywQaRYvopuiWZ34njvB 8z7DmR2vx8laFhGqMls4vOQWrsMSHEgoL8H+JmGlzbjB9+zi.QK.UlKWRtHg I0a.r1X1I4EqnJqGCkQ64hcqyYQRirQ9jxUxEtT0hopVDXAv80pehYUj+8Hy LeOtP5M20aSnXmm6qpI8wrYpl4OJBfOKDnNvSKBXuUdfubnjryZk3Ey1xxSx dyFaHfdRGPenCrU5DncSH9ZR4eO578PRJqnHbG6KLASc+AzBPHVwwu2mI1bJ maiHA1ABp2.w7hg.qcWfzoCH2hGTvyiHFWjJhfVrbbHxMd0jxi4ayxSCk1vB AMTXg1Wr.CvZmCjlKPfIJSPaQVFZ1TtIVACdn.i8PJf1AiIZBAWykg6jenvE UtMh7ih0xr0QQKNTXECjwECs+rYkIDB.0t6wf6abLLufYKci+pwLcC8N9FKq Ckb4Iy8S2Lu9upDye8eCcJIHhZiZX7SKF7JbcV5kfoOoDcoEfPW87xIQp4w3 kj9NOs3BK.A6+zh1XdXUUj6poOUjNfLxDPdKOQxxsGQFSGWDcmODffpiGGP6 P334W62nmqWBWb8WEp2Mk8OCthrS4QWVtpOCzsdGiYERtHTxyDMlC4SyYOON lIZlwsz66XV40WkDtwkXWUDrKJRU74DpIcUcsqJUINSIoHfNoJk1QSGqncSU 8zqBgBT04Wl1orsQmG9lkzA0dMoGcFNJDL.OFDTW5VC+K6pUEkcBAnd6fscq pJepwrZUTPCz70sP.9RmgPrsccqJsoOZ8Q0jeWdVnu5+t2pkc9X1+4t6HKE -----------end_max5_patcher-----------
Hey, thanks to everyone who posted stuff! I know it’s coming a bit late, but that’s how life went.
particularly thanks to johnpitcairn – you really helped me figure out what was going on, and that nrpn-decode patch is awesome.
"MSB/LSB are not like coordinates on a grid, they just use two values together to represent a much higher value… etc"
that’s totally what I meant by grid, down to your decimal example! I thought of it as like ‘counting in base-128′ though. when I was in early elementary school I always had a picture in my mind of rows and columns of ten when i counted up to one hundred, so I guess that kind of stuck, and that’s what I meant by grid. I suppose graph would be more apt. I’m definitely not a a mathy person, I kind of have to visualize it in some way or something.
Forums > MaxMSP