I am a live performing musician and slowly transforming to 100% softsynth (playing vsts from my notebook only). I don't have any actual midi controllers, just keyboards with a midi output so I thought I would make my own midi controller with arduino - buttons, potentiometers and a small LCD that would show what song / preset is selected in my DAW on my notebook.
However I only have 1 midi-to-usb adapter for one of my keyboards, so I would need to buy a second one. The big problem here is that those keyboards can only send on channel 1 so midi mergers are out of the question. I need to distinguish those 2 keyboards. 2 adapters + arduino controller = 3 usb cables alerady. So I got the idea I could use the arduino as a midi to usb device, which should give me the possibility to change the channels. And it is of course cheaper.
After some days of researching how this would work, I went from "I don't think this can work" to "There are so many possibilities that I am completely lost now".
Everytime I found a solution I also got a problem, so I am just going to be straightforward and ask what should I do/use.
I want the arduino to:
Have buttons and potentiometers that it will read and send midi CCs to the computer
Serve as a 5-DIN to USB midi adapter (2 input cables), reading the midi data from both keyboards and forwarding it to my PC, while changing the channel of at least one of the keyboards. (NoteOn, NoteOff, Aftertouch, PitchBend, ControlChange)
Have an LCD display - nothing spectacular, BUT - be able to receive data from software on my notebook, that reads the memory of my DAW and sends a string with the session name so the LCD would show it. =not midi data.
Except the last part, I know that this is possible, but is it possible without any latency issues? Is it possible to do this without software serial to midi solutions?
My idea for the midi-to-usb is that I would use the arduino midi library, open 2 midi instances, here it should be pretty easy, but I would try to make my code as fast as possible - but when going through the library source code it seems like using my own code and different usb to midi methods would end up being quicker. (Perhaps even buying a teensy? - currently I am planning with the Mega, because it has more analog pins and 4 UARTs so I dont need to use SoftwareSerial)
I have found projects that either did the midi to usb part or the midi controller part (which is very simple on its own), but I never saw something that would do both. I have a general idea of how this would work but I can only guess the total latency of this. And also I don't know if I can send the string for the LCD if it acts as a midi device. (I could theretically go around this by using midi SysEx messages or other). Also I can skip the channel changing part if I only connect 1 keyboard to arduino and use the one usb-midi adapter I have.
A lot of questions, I know. But any help would be greatly appreciated.
You need to make your microcontroller to speak the USB MIDI protocol. This requires a microcontroller that actually supports USB directly (not with a separate chip that cannot easily be reprogrammed), so you would need a Teensy.