-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Simultaneous MIDI BLE notes not played. #2
Comments
Oh, I didn't realize it was difficult to implement this. Maybe referencing the Arduino Bluefruit MIDI implementation might provide some insight: |
The Arduino implementation doesn't merge midi messages into a single packet so I'm not sure why it works there. Maybe because it always inserts timestamps? Here is what I was looking at for the Arduino implementation: https://github.com/adafruit/Adafruit_nRF52_Arduino/blob/master/libraries/Bluefruit52Lib/src/services/BLEMidi.cpp I'm going to reopen in case someone else wants to fix it. |
Just wondering if anyone has an interest in fixing this issue. My project is stalled without the ability of this code to handle MIDI 'Running Status' messages. I wish I could work on the code myself, but it is beyond my abilities. ...I'm certainly willing to test and provide feedback! |
This is a major roadblock for me as well. My project is dead in the water. |
best bet is to send individual note on/off's for now |
Wish I could. It was supposed to read MIDI notes out of the Synesthesia Game piano app. I am unable to change the way the app sends out MIDI. I sold the BLE 33 Nano board and am going with MIDI USB via an Arduino Micro board instead. |
I'm still hoping someone might fix this issue. I don't have control over the source MIDI material. My MIDI source uses running status messages. |
I found a way to send multiple messages in one packet, but it feels like a hack to me. First off, this code on the adafruit site straight up doesn't work:
The problem is that synths expect a timestamp in between each event. So what I did was fake a timestamp by putting an EE in there, like this:
I have a MIDI controller that needs to stop and start multiple notes simultaneously, so I wrote up this monstrosity:
Whenever print formats HEX, it doesn't always print two digits, which is why there's that if (lastNote <=15) stuff in there. It's ugly, but it works. If there's a better and fast way to do this, I'd love to see it. What would be ideal would be if it could be structured something like this:
|
When a MIDI file contains simultaneous notes (like a chord), only one of the notes is played. I suspect this has something to do with MIDI 'running status' not being implemented in the BLE MIDI Library.
Note that the circuitpython MIDI library (MIDI over USB) handles simultaneous notes correctly.
I've attached a test file that plays 4 G chords:
G chord test (short).zip
The text was updated successfully, but these errors were encountered: