Midi Program Change (panning Effect Command C2) Behavior

There has been something bugging me about Renoise for a long time that I wanted to get off my chest and to see if it’s dumb or not. The MIDI program change behavior has been annoying me for a long time now because it’s not very “trackery” since it pretty much ignores anything you do from the instrument/sample bank.

Say that I have 2 different instruments that are on the same channel and I want to do a program change. So I make separate instruments for programs 1 and 20 in the instrument bank.

If I change to a different instrument from the instrument column in the pattern editor, it will continue to play the same program. Understandable, this is the way MIDI works and I would need to invoke a program change command (C2 in the panning column). This is where my annoyance begins.

First of all, say I change from program 1 to program 20. I can’t use C2|0020 (Keep in mind you put the C2 in the panning column and the program number in the effect column.) because it’s in hexadecimal, so I have to calculate 20 into decimal (0x14) and put C2 in the panning column and the 0014 in the effect column. I often use the instrument properties panel at the bottom to audition patches. The panel at the bottom displays the program number in decimal, so I must calculate the value into hex if I really want to use it as a program change because I cannot just add an instrument with that program number into the instrument panel and just switch it from the instrument column like everything else in Renoise. For the stuff I am doing this is annoying because I enjoy using a decrepit 8-voice synth and I have to use a lot of program changes to maximize the use of each channel. It would be nice to be able to label and organize my midi instruments from the instrument panel, but I simply cannot do that since the instrument panel does not even really matter when dealing with midi instruments on the same channel.

My solution to this is very, very simple. There is another tracker for windows called ZTracker, and I much prefer the way that it handles program changes. To invoke a program change you would use the pattern effect command Z00 (or maybe it was P00, I haven’t used ztracker in awhile) and it would do a program change to whatever instrument was in the instrument column.

So I propose that the C2 command be used simply to invoke a program change for whatever is being called from the instrument panel and not have the need to specify the program number in the effect column. That would make things so much easier for me, because otherwise it’s like Renoise treats instruments in the instrument column one way and implements MIDI instruments in a completely different way. With a smarter program change command, MIDI instruments would work more like the other instruments in Renoise, and the program would in a small way have a more consistent workflow.

Why don’t you want to use different channels for each instrument? (that is how the MIDI instrument design works in general) It would save you all that trouble.

MIDI has limitations on itself, changing programs on the same channel is usually if you don’t have much midi channels to reserve on your external device.

I don’t think it is impossible to let Renoise send out all current bank and program numbers on instrument toggle, but this also generates a lot of extra midi data transmissions which in its turn is not very effective handling-wise (It may slow down the process or even choke it) since it probably have to be done on each note trigger, while preprogramming this manually, you only do this once at each instrument change.

Another thing where this would byte:If you would play two instruments simultaneously sharing the same channel number, which program should your external device be forced to play?

Not effective and in the latter example prone to user mistakes and only causing more confusion (and more bug reports).

If you want to change a program in any other instrument:just add/change the instrument number in the last notecolumn.
Defaulting to the instruments program when adding a C2 without a figure sounds great, but what if you would like to change to program 00?

By the time I set up a different timbre for percussion and bass, I may not have that many left to work with. But then if I want to change timbres I could do a program change, right? Oh, right.

Also, yeah, I don’t have many midi channels to reserve on my external device. No dynamic voice allocation so I have to be very specific on what plays on what channel. (I am using a Yamaha FB-01)

Yeah, that’s a terrible idea, but I don’t remember mentioning an implementation like that one in my original post. You wouldn’t have a problem with sending too much data if C2 is simply used to invoke a program change. It should send exactly as much data as the current implementation. It’s very simple.

If I wanted to send conflicting MIDI program changes, the current implementation will do that just fine. Renoise doesn’t seem to bug out when I send a two program changes to the same channel anyways.

Would be nice if MIDI program changes used the instrument column

It will change to whatever program is in the instrument you invoke with C2. So if you have an instrument with bank2, program 00, it will switch to bank 2, program 00 when you have it called in the note/instrument column with C2 in the panning column.

@i got no legs -> I agree. Using a single pattern command for midi program changes instead of 2+ is definitely better.

One could even go so far as to add on to the status bar at the bottom of renoise when browsing programs the hex value…

@Vv -> wtf are you on? How is what i got no legs suggested remotely adding more midi clog or whatever you are talking about? The suggestion was simply a restructure of how to do program changes within renoise. The end result is still a simple program change command…just with less commands, easier to setup and organize because it utilizes renoise’ instrument collections. You just went off on some really strange rant.

+1 to OP

I don’t say the ideas are bad, i am just wondering if the other situations have been taken in account as well.

An idea is generated mostly because out of a personal situation, but Renoise is being used in a lot of personal situations. What would be solved for one half group of users, might mess up the workflow of the other half user-group. It is the last thing that is desired by anyone.
If that sounds like ranting, well i’m sorry for that, but the true intentions for those thoughts quite different than you interpret.

Okay, the original suggestion wasn’t any kind of crazyness. It’s actually a very sound idea. If MIDI is implemented into renoise, why not make it work sanely? Either have good MIDI implementation or just simply take it out. Right now, it’s half assed, which is just as good as not being there in most cases.

I wouldn’t go so far as to say that it’s half-assed, it is low latency and seems to play well with everything else. But the ability to use the instrument panel to organize your midi programs is essential. The MIDI system seems fine though, it just needs a few tweaks and not an overhaul.

edit: I have been thinking a lot about what would happen if the C2 behavior was to change. The main thing I would see it breaking is VST program changing. Putting another VST into the instrument panel creates a whole new instance of that VST. A couple of the solutions I thought of was to either keep the current behavior and use the instrument column switch if there is nothing in the effect column like 00xx, or allow VST aliases to have different program values from their parent and do program changing the same way as MIDI devices.

Well, let’s put this thread on hold and continue after the release of the next Beta.
We’re still busy with the alpha’s, a solution is currently being considered regarding this as well.