>> 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@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/alsa-user

Reply via email to