multiple identical USB devices on a Mac, can Arduino help??
for a special project I'm doing I bought 6 identical midi keyboards to be used in a same patch, only to discover that the keyboard only shows up once in my mac midi configuration screen.
IOW they all work within my patch but I need to be able to select between them as I have multiple notein objects (one for each midi keyboard).
I tried renaming the keyboard in the mac midi configuration screen, and then plugging in a second keyboard, but they all are recognized as the same device, no matter how I name it.
Does someone have a solution for this? All help is extremely welcome..
Is it possible to set the keyboards to different MIDI transmit channels? Then you can select the specific channel inputs in your patch. The only other solution I can think of is a multi-port MIDI interface and set individual port inputs in your patch.
Maybe there's a setting on the keyboard somewhere that sets an ID and they're all currently set to a default same value? The Novation Launchpad has a feature like this but I don't know what keyboard you have.
there are no buttons on the midi keyboards, no options, multi-port midi interface is also not possible as the keyboard works with usb
what's the keyboard you're using?
miditech garagekey mini
they just work by plugging in a usb cable, no drivers exist..
maybe this is the solution, but I can't make it work..some objects do no load...the demo-video is also not longer available.
Ok given the info so far I can only think of one thing but that depends on how your keyboards behave. When they're all plugged in do they all transmit MIDI (with the computer just treating them all as one device) or does only one of them actually send information, blocking the other ones?
If they all transmit MIDI then it would seem to me that you could use the octave buttons on the device to set them all to control separate sets of octaves, since each keyboard has 3 octaves worth of keys and you have 10 octaves in the MIDI 0-127 range you can set up 3 keyboards mapped to 3 sets of 3 octaves and offset their notes appropriately after they've been differentiated. That would take care of 3 of your 6 keyboards and for the other 3 you could use a separate computer doing the same thing and sending the data to your main computer via LAN or Wireless network?
no keyboards are blocked, they all work. I already use the octave-position-idea, which indeed
almost solves the problem for 3 keyboards. The problem is that I don't want to reset the octave-knobs each time I use the patch because my mail goal is to make a big keyboard of 9 octaves. (in fact 2 big keybaords of 9 octaves, I will need to cut keys and stuff..) Everything should work on a single computer.
I really can't believe this problem exists. There are so many people using 2 midi keyboards to use
for organ samples, many of them must have bought identical keyboards..
^^Separate MIDI transmit channels from the keyboards
Is "separate midi" a software? I don't understand you I'm afraid. There are no options on the keyboard itself.
how do I separate the MIDI transmit channels from the keyboards?
That's the problem with the particular keyboard you have chosen. More sophisticated keyboards allow you to set the MIDI transmit channel to one of 16 channels. Then, the receiving device recognizes the keyboard based on the channel message that is transmitted along with the MIDI note info. That's how people typically use multiple keyboards at the same time with MIDI devices.
So there is no hope?
With the keyboards you have, probably not. Sorry :-( You will need keyboards that can set their output MIDI channel. Another--hybrid--option is to use some of the larger keyboards that let you split the keyboard into separate zones each with a unique MIDI channel.
I need keyboards of 9 octaves with small keys, this seemed like my only option.
will have to use 6 computer now...anno 2013...
thanks for your help :) but the oxygen 25 doesn't have mini keys.
I just thought of a possible, but very very weird solution:
the keyboard-patch I'm working on doesn't have to be velocity-sensitive,...but the garagekey midikeyboards are...
maybe I can make a hardware adjustment so that one of the keyboards for example will always output
very low velocity values, and another one very high. Using the keys of the midikeyboard in combination with another controller, like a knob or in this example velocity-values I could differentiate between the different keyboards by using multiple conditions (if object)...
...
Interesting... If you make that work, please come back and post how you did it. I think a lot of us would find that quite valuable information.
this is a demo patch using only 1 octave, but giving 6 octaves of pitches depending of velocity,
volume on the other hand is not affected by velocity, although that would be very easy to make.
As my midi keyboards all work on the same channel, they would all effect the kslider, but if they have different velocity-output I can still differentiate between them this way..
(velocity will be very difficult to tweak, it will be a lot easier to use big toggles/touchpads that are activated when a particular keyboard is used resulting in a midi transpose, I could even use a camera for this, with position tracking...)
Unfortunately it would seem to me that this is what you get for buying such a simple looking keyboard that's obviously geared towards the average amateur mac user hooked on the "less is more" ideology. Even so though it's astonishing that the manufacturer didn't think anyone would want to use 2 together...
It seems like your velocity idea could work, the challenge is in getting individual keyboards to always output a certain velocity. Maybe you could put some long object in the space at the front between the underside of the keys and the chassis, varying the thickness for each keyboard, so the keys can only be pushed down a certain amount on each, limiting the velocity range. Your keyboard in particular seems to be more ideal that others for something like this..
I'm very curious. If you run the MIDI Monitor (free app from Snoize.com) and play your different keyboards, does it display the same port name for MIDI events coming from different keyboards?
I ran Midi Monitor, but I can nowhere see a difference between the midi keyboards. The source is always the same: "Garagekey mini". I didn't find the specific term "port name"..
But, if I check system information on my mac, and go to "usb" I can see 2 Garage minikeys! (2 are hooked up at the moment). There even is a difference between them: location ID.
one has: Oxfd144100 / 11, the other has: Oxfd144300 / 12 (rest is the same, even the serial)
IOW the computer "knows" all usb ports, 2 of them found a garagekey mini.
shouldn't there be a way to exploit this?
I may have found the solution in another topic, I hope I'm allowed to do a copy/paste (see below). In my country, Belgium, the location "ID" is called location "code" that's why I didn't immediately realize they were talking about the same thing. I will try this when I get home tonight, would be awesome if it works...
Important reply by "MEXX":
Hi there,
Sorry for the necromancy, but in case this is still an issue for anyone, I just wanted to mention that I wrote a replacement for the hi object which offers a lot more flexibility. In particular, it allows identifying devices by location ID. Give it a try:
I was going to suggest [hi] as well, the thing is that afaik MIDI USB devices aren't typically recognised by the hi object - still its worth a try...
I'm afraid it won't work with hi.
With 5 Kenton MIDI USB Hosts and a MIDI interface with 5 ports, you should get what you want. But it's probably cheaper to buy other keyboards (BTW, it's clearly stated in the manual that the mini use MIDI channel 1 - it reminds me our good old JLCooper CS10…).
There may be other USB CC to MIDI interfaces available (you could even build them with Arduinos!).
Or maybe something from iConnectivity.
it's good to know that 5 Kenton MIDI USB Hosts will solve the problem anyway (will it still power the keyboards?). expensive, but it beats my 6 computer idea :) There are no other keyboards on the market that are of any interest to me (read posts above). So I will have to make it work. I'm off for some testing with hi!
I have to say I'm completely new to HID...this patch is rather difficult for me to fully understand. But as Patrick already mentioned it will probably not work because USB MIDI controllers
are MIDI and not HID...sounds logical I guess. But I think I found a MIDI to HID program, maybe this might be the solution..
I've made my decision, I'm not going to use differences in velocity nor any external USB MIDI host devices. I will keep the keys of all my keyboards but use regular computer keyboards underneath them. Using multiple computer keyboards (some with shift-locks depressed etc., using tape) I will be able to have enough ASCII values (key~) in total for all midinotes of all 6 keyboards.
basic idea:
It's a shame it had to come to that but thanks for reporting
...are there people on this forum who have experience with arduino?
Wouldn't it be possible to connect each of my keyboards to an arduino, and make the arduino add a midi-channel, or modify the velocity (constant note-on velocity-value) so that my computer/Max detects differences between my USB MIDI keyboards?
Not sure if Arduino can still power my usb keyboards, normally the computer does this using the same USB cable which is used for midi-data transfer..could I use a usb split cable to send the USB MIDI keyboard to the computer or a power adapter for a usb-hub (for powering) AND to arduino (for futher processing)?
To me it sounds like you're trying to patch up things without tackling the fundamental problem. I think you're much better off replacing your keyboards with something that does let you set midi channels. Will likely cost you less than hiring someone to solve it with convoluted workarounds, which you're calling for in the other thread.
I agree. The fundamental problem - duplicate note-numbers - will prevail no matter what method/platform you use. I thought your idea of differentiating between differentvelocity ranges sounded promising; did you pursue this? I really don't think Arduino is the way to go, for this particular problem; and as dtr says: the keyboards are the problem.
Did anyone suggest reading the data from [midiparse]? There's an old thread here somewhere about a similar issue, i'll try and find it . . . .
[edit]. . . . here it is
https://cycling74.com/forums/twice-the-same-midi-controller/
Brendan
Even though it's "somewhat nuts", I'm going to come out in defense of OP. Sometimes you fall in love with a form factor, a price point, a feel...
But yes, it does seem like we're at kill-your-darlings time.
if the arduinos (each connected to a USB MIDI keyboard) put all midi-data on a specific midi channel, all problems are solved.
alternative velocity-idea:
-"arduino 1" receives midi data from "USB MIDI keyboard 1" and changes the velocity-value of all note-ins to 1 and the velocity-value of all note-off to 2
-"arduino 2" receives midi data from "USB MIDI keyboard 2" and changes the velocity-value of all note-ins to 3 and the velocity-value of all note-off to 4
-"arduino 3" receives midi data from "USB MIDI keyboard 3" and changes the velocity-value of all note-ins to 5 and the velocity-value of all note-off to 6
-"arduino 4" receives midi data from "USB MIDI keyboard 4" and changes the velocity-value of all note-ins to 7 and the velocity-value of all note-off to 8
-"arduino 5" receives midi data from "USB MIDI keyboard 5" and changes the velocity-value of all note-ins to 9 and the velocity-value of all note-off to 10
-"arduino 6" receives midi data from "USB MIDI keyboard 6" and changes the velocity-value of all note-ins to 11 and the velocity-value of all note-off to 12
If I play the lowest note on "USB MIDI keyboard 4" (=midinote 12) then velocity will be 7.
In max: if velocity = 7 then add for example 36 to the midinote number (12 + 36 = 48) 48 is the same note (C) but 3 octaves higher.
When I let go of this note ("USB MIDI keyboard 4") then velocity will be 8
In max: if velocity = 8, then make a note-off (vel. 0) for that midinote number +36 (12 + 36 = 48) midinote 48 will receive a note-off and be silenced.
This is one of my purposes, I have other uses as well, I can route midinumbers to specific position within the patch, instead of using multiple note-in objects.
.
Sounds nice, in theory. Though how are you going to decode the USB communication on the arduino? Or perhaps you want to hack into the keyboards and route the analog signals to the arduino before they're digitalized? Those are engineering issues that become whole projects in themselves. Sorry to demotivate you but you won't be playing your keyboards anytime soon...
Btw, if really wanting to go the microcontroller/tiny system way, I'd go for Raspberry PI's. Those can at least connect the keyboards via USB, modify the MIDI channel in software and send out MIDI/OSC/... Though you need 1 for each keyboard = pricey
arduino has models which can connect to USB MIDI keyboards. Why would it be so difficult to change the midi data? Arduino's software is limitless. Many people did it before me. I think I will be playing my keyboards sooner than you think : )
I don't know why you didn't try the velocity idea, all you would need to do, I imagine, is to jam something under the keys that limits how far they can be pressed. At least give it a try before buying another 6 pieces of hardware...
Sure, USB on arduino can be done but you'll need an extra USB host shield and deciphering of the hex or binary data that's being sent.
No I don't need anything extra, the USB host is included in this model: http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=198
Well what are you waiting for then? Spend your 6 x €49+VAT and let us know how you fare ;)
you still make it sound like I'm crazy ...thank you for the compliment : )
seems like the solution is a lready posted online : )
http://forum.arduino.cc/index.php?topic=119362.0
"deciphering of the hex or binary data" is quite trivial. But the communication over the USB port is not.
There may be interesting stuff here:
http://hunt.net.nz/users/darran/weblog/5b7f8/Arduino_UNO_USB_MIDI_firmware.html
p
I forgot this https://github.com/YuuichiAkagawa/USBH_MIDI
It may even work with a hub and multiple devices…
Not crazy, it 's just not the way I would go about this.
I briefly tested Yuuichi Akagawa's library with a Duo and a USB host shield. Almost plug'n'play!
I plugged a bcf2000 and a nanoKontrol on a USB hub and received both MIDI streams in the arduino. Then it's easy to change the channels, merge the streams and send the result to a serial output and a MIDI plug.
Knowing which USB port relates to a MIDI stream may be difficult if all keyboards are powered on at the same time.
Reliablity may be an issue too! Especially with 6 streams.
Good luck!
p
thank you for your reply. Of course the nanoKontrol is mentioned in the list of working devices. I have the feeling Korg is more reliable than my Miditech stuff :)
If I continue my ideas I would use an arduino for each midikeyboard, so no stream-problems I guess?
Each arduino should put a midichannel on the data, so that my computer receives 6 streams but each stream will have a different midi channel. Still problematic?
Do you have any experience in adjusting sketches for arduino? I'm still looking for programmers..
The bcf2000 is not mentioned and does work. I suppose it does work with every class compliant devices.
My worries are more related to chords played on the keyboards.
Looking for programmers? Oh, I just discovered your other thread!
It's still not possible to PM from this forum, but you should find my email address quite easily if you click on my name and look around…
As I leave in Belgium, it could be easy to test your keyboard in our studio. Belgium is not that big, we may even be neighbours ;-)
p
chord playing...my patch is monophonic does that change anything?
It's nice to meet a fellow-countryman on the forum! :) (I'm from Antwerp)
Will send you a PM!
(+1 Belgian, living in NL though...)
from what city are you? : )