>> Try running only "amidi --dump -p virtual", and then connecting the hardware sequencer port to the virtual on It works fine when amidi connects to it. Shows 3 bytes for each key on/key off. >> When the sequencer converts the messages back to raw MIDI bytes, it uses running status by default. This is not an error. I'm aware of running status, but I don't think that's the problem. This is what I get for a single key press if I log each byte I read: 90 4B 80 00 This is multiple presses and releases of the same key at different velocities: 90 3C 80 00 90 3D 80 00 90 3C 80 00 90 43 80 00 90 01 80 00 As you can see, there's a key on, and then a second byte (which seems to be the velocity), but no byte to indicate which key is being pressed! I'm reading the data byte per byte, from a blocking port: byte byteVal; int err; if ((err = snd_rawmidi_read(m_inHandle, &byteVal, sizeof(byteVal))) < 0) { std::cout << "Can't read MIDI input: " << snd_strerror(err) << std::endl; throw BadInput(); } std::cout << charToHex(byteVal) << std::endl; I'm at a loss to see what I'm doing wrong. There's nothing fancy going on in my reading loop. - Maxime ------------------------------------------------------------------------------ The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE: Pinpoint memory and threading errors before they happen. Find and fix more than 250 security defects in the development cycle. Locate bottlenecks in serial and parallel code that limit performance. http://p.sf.net/sfu/intel-dev2devfeb _______________________________________________ Alsa-user mailing list Alsa-user@xxxxxxxxxxxxxxxxxxxxx https://lists.sourceforge.net/lists/listinfo/alsa-user