Comments (3)
All - discovered why I am having this issue and wanted to feed back. No change in RtMidi is required, but an update to documentation may be good.
Basis: Most USB MIDI Class Compliant devices use USB 1.1 Full Speed connections. In USB Full Speed, the bulk packet size can be 8, 16, 32 or 64 bytes in size. However in High Speed USB 2.0, all bulk packets are 512 bytes in size.
Now when initiating RtMidiIn, as with most, I just used default constructor. After further debugging of code I found the issue with the buffering and management, causing corrupted packets being sent up to my routines - connected to the queueSizeLimit default of 100 bytes. In our case we have messages up to 128 bytes, so I needed to instantiate RtMidi with following instead:
#define RTMIDI_INPUT_QUEUE_SIZE 128
try {
pMIDIIn = new RtMidiIn(RtMidi::UNSPECIFIED, "HAL Input Client", RTMIDI_INPUT_QUEUE_SIZE);
}
catch ( RtMidiError &error ) {
error.printMessage();
exit( EXIT_FAILURE );
}
Now my routines work as expected.
Note: this works for us cause we also manage our SYSEX commands such that only one can be issued at any one time to our device - this is to prevent too much MIDI blocking by SYSEX - un undesirable operation. However if we did allow more SYSEX commands to operate at the same time, our RTMIDI_INPUT_QUEUE_SIZE I suspect would need to be a multiple of the number of allowed simultaneous SYSEX commands.
Anyhow, hope this helps someone.
from rtmidi.
I don't understand this, as RTMIDI_INPUT_QUEUE_SIZE refers to the number of messages that will be stored in the queue, not the size (in bytes) of those messages.
from rtmidi.
Yup, something is weird about this analysis. I wonder if it is not actually related to queue threading issues instead. Large message copies might have different timing characteristics and lead to more contention for access collisions on the FIFO ring. I'll mark this as possibly related to #51. It's almost a year old unfortunately so if @MikeLoh can test more, please re-open.
from rtmidi.
Related Issues (20)
- Need help on the RtMidi library implementation in Visual Studio Code HOT 1
- Question: how do I add WEB_MIDI_API to my cmake subfolder file?
- RtMidi cannot create ports past a certain limit HOT 10
- iOS status and how-to HOT 4
- Central List of Wrapper Libraries / Projects Using RtMidi?
- Does rtmidi support midi 2.0? HOT 16
- How to detect, that a MIDI-IN is already used by another app? HOT 4
- Compilation error HOT 1
- Checksum change for rtmidi-6.0.0.tar.gz HOT 2
- rtmidi doesn't find jack in a non standard path. (Or the default pipewire path)
- Note On with velocity 0 is sent as Note Off on macOS HOT 9
- Has the uploaded release been changed intentionally? HOT 1
- MidiInWinMM :: closePort might return without calling LeaveCriticalSection HOT 2
- Cmake version requirement
- Can't send over RTMIDI_API_WINDOWS_MM HOT 2
- Needs Better Install Tutorial HOT 3
- configure: error: No known system type found for MIDI support!
- are Virtual Ports supported under Windows HOT 4
- midiOutUnprepareHeader intermittently hangs on Windows during repeated large sysex sends HOT 1
- Different MIDI device names on different platforms HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rtmidi.