[alsa-devel] RawMIDI behaviour with MidiFace 4x4

Clemens Ladisch clemens at ladisch.de
Mon Mar 9 09:43:56 CET 2015


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


More information about the Alsa-devel mailing list