Kalvas, Taneli wrote:
writing to the midi port with snd_rawmidi_write() seems to broken. The function accepts any size of data block and claims to have sent everything. In reality only a part of the message is sent.
My hardware is Miditech Midiface 4x4, a USB midi interface: 1 [MIDI4x4 ]: USB-Audio - MIDI4x4 MIDIPLUS MIDI4x4 at usb-0000:00:14.0-1, full speed
snd_rawmidi_write() never accepts more data than it can handle (in blocking mode, it waits until the buffer is empty enough). The snd-usb-audio driver waits until the device has accepted the data.
Are there any messages in the system log when this happens?
Please show the output of "lsusb -d 1acc:1a0b -v".
I have tested the system by connecting the output port to an input port on the hardware and having another program output the received bytes on stdout. My observations:
- As long as the buffer size is 276 bytes or less it gets sent ok
- Larger buffer sizes cause corruption and roughly 300 bytes of received.
This sounds as if the device has a buffer size of 256 bytes, but does not actually check if the buffer is full, and always accepts more data.
Does later data overwrite data that should have been sent earlier?
Is there a way to connect two programs via a virtual RawMIDI port so that I could test without using the hardware?
Load the snd-virmidi module, and connect two of its ports with aconnect.
Regards, Clemens