mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [BUG] 2.6.16-rc4 git, ALSA USB-MIDI does not give NOTEOFF event for M-Audio Keystation 88es, but NOTEON with velocity=0
@ 2006-02-26 15:42 Junichi Uekawa
  2006-02-27 12:13 ` [Alsa-devel] " Takashi Iwai
  0 siblings, 1 reply; 3+ messages in thread
From: Junichi Uekawa @ 2006-02-26 15:42 UTC (permalink / raw)
  To: alsa-devel; +Cc: linux-kernel

Hi,

I'm seeing that USB MIDI keyboard (M-Audio Keystation 88es) is
generating note-on events on both note-on and note-off. The difference
being that note-off is generating an note-on event with velocity '0'.

The following code in seq_midi_emul.c(snd_midi_process_event) looks
suspiciously like what's needed for this device:

        /* Make sure that we don't have a note on that should really be
         * a note off */
        if (ev->type == SNDRV_SEQ_EVENT_NOTEON && ev->data.note.velocity == 0)
                ev->type = SNDRV_SEQ_EVENT_NOTEOFF;


I'm not sure if this is something hardware-specific or not.

$ uname -a 
Linux dancer64 2.6.16-rc4dancer-g9e956c2d-dirty #1 Thu Feb 23 22:06:47 JST 2006 x86_64 GNU/Linux


$ ./seqdump.c # this program is attached the end of the mail.
noteon 0 3c 4e
noteon 0 3c 0
noteon 0 3e 4d
noteon 0 3e 0
noteon 0 40 54
noteon 0 40 0
noteon 0 41 4f
noteon 0 41 0
noteon 0 45 4c
noteon 0 45 0
noteon 0 43 4f
noteon 0 43 0
noteon 0 41 56
noteon 0 41 0
noteon 0 40 4f
noteon 0 40 0
noteon 0 3e 4c
noteon 0 3e 0

$ lsusb -s3:7 -v

Bus 003 Device 007: ID 0763:0192 Midiman 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0763 Midiman
  idProduct          0x0192 
  bcdDevice            1.25
  iManufacturer           1 M-Audio
  iProduct                2 USB Keystation 88es
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          101
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          3 Audio Class
    bmAttributes         0xc0
      Self Powered
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      1 Control Device
      bInterfaceProtocol      0 
      iInterface              0 
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdADC               1.00
        wTotalLength            9
        bInCollection           1
        baInterfaceNr( 0)       1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         1 Audio
      bInterfaceSubClass      3 MIDI Streaming
      bInterfaceProtocol      0 
      iInterface              0 
      MIDIStreaming Interface Descriptor:
        bLength                 7
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdADC               1.00
        wTotalLength           65
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                 1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                 2
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                 3
        bNrInputPins            1
        baSourceID( 0)          2
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                 4
        bNrInputPins            1
        baSourceID( 0)          1
        BaSourcePin( 0)         1
        iJack                   0 
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
        bRefresh                0
        bSynchAddress           0
        MIDIStreaming Endpoint Descriptor:
          bLength                 5
          bDescriptorType        37
          bDescriptorSubtype      1 (GENERAL)
          bNumEmbMIDIJack         1
          baAssocJackID( 0)       3
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
        bRefresh                0
        bSynchAddress           0
        MIDIStreaming Endpoint Descriptor:
          bLength                 5
          bDescriptorType        37
          bDescriptorSubtype      1 (GENERAL)
          bNumEmbMIDIJack         1
          baAssocJackID( 0)       1
Device Status:     0x0000
  (Bus Powered)


$ lsmod
Module                  Size  Used by
snd_usb_audio          89280  0 
snd_usb_lib            17856  1 snd_usb_audio
snd_hwdep              11720  1 snd_usb_audio
snd_seq_dummy           4484  0 
snd_seq_oss            36260  0 
snd_seq_midi            9920  0 
snd_rawmidi            28768  2 snd_usb_lib,snd_seq_midi
snd_seq_midi_event      8384  2 snd_seq_oss,snd_seq_midi
snd_seq                56600  9 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_seq_midi_event
snd_seq_device         10320  5 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_rawmidi,snd_seq
ipt_recent             11736  2 
ip_nat_irc              3200  0 
ip_nat_ftp              4352  0 
ip_conntrack_irc        7840  1 ip_nat_irc
ip_conntrack_ftp        8872  1 ip_nat_ftp
xt_state                2560  3 
ipt_MASQUERADE          3904  1 
ipt_LOG                 7296  7 
iptable_mangle          3392  0 
ipt_TCPMSS              4800  0 
xt_tcpmss               3072  0 
xt_tcpudp               3968  2 
iptable_filter          3584  1 
iptable_nat             9412  1 
ip_nat                 19576  4 ip_nat_irc,ip_nat_ftp,ipt_MASQUERADE,iptable_nat
ip_tables              13728  3 iptable_mangle,iptable_filter,iptable_nat
ip_conntrack           55368  8 ip_nat_irc,ip_nat_ftp,ip_conntrack_irc,ip_conntrack_ftp,xt_state,ipt_MASQUERADE,iptable_nat,ip_nat
x_tables               15176  9 ipt_recent,xt_state,ipt_MASQUERADE,ipt_LOG,ipt_TCPMSS,xt_tcpmss,xt_tcpudp,iptable_nat,ip_tables
pppoe                  15936  2 
pppox                   4432  1 pppoe
af_packet              23756  4 
tsdev                   9280  0 
pcspkr                  3848  0 
tuner                  57644  0 
bttv                  207164  0 
video_buf              25156  1 bttv
compat_ioctl32          9856  1 bttv
v4l2_common             9984  3 tuner,bttv,compat_ioctl32
btcx_risc               5768  1 bttv
ir_common              11076  1 bttv
tveeprom               18064  1 bttv
videodev               12096  1 bttv
snd_atiixp             21592  0 
snd_ac97_codec        108668  1 snd_atiixp
snd_ac97_bus            2944  1 snd_ac97_codec
snd_pcm_oss            57056  0 
snd_mixer_oss          19328  1 snd_pcm_oss
snd_pcm                98060  4 snd_usb_audio,snd_atiixp,snd_ac97_codec,snd_pcm_oss
snd_timer              25736  2 snd_seq,snd_pcm
snd                    64384  15 snd_usb_audio,snd_usb_lib,snd_hwdep,snd_seq_dummy,snd_seq_oss,snd_rawmidi,snd_seq,snd_seq_device,snd_atiixp,snd_ac97_codec,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer
snd_page_alloc         12240  2 snd_atiixp,snd_pcm
generic                 5764  0 [permanent]
shpchp                 49216  0 
pci_hotplug            12548  1 shpchp
ide_scsi               18244  0 
psmouse                42376  0 
rtc                    14392  0 
unix                   31096  419 




regards,
	junichi
-- 
dancer@{debian.org,netfort.gr.jp}   Debian Project

===File ~/cvscheckout/whole/danceraudiotools/seqmidi/seqdump.c===
/*BINFMTC: -lasound


Connects to ALSA sequencer port and dumps NOTE ON and NOTE OFF events.

 */

#include <stdio.h>
#include <alsa/asoundlib.h>


int main(int argc, char **argv)
{
  snd_seq_t *seq;
  int err;
  int port;
  snd_seq_event_t *ev;  
  
  err=snd_seq_open(&seq, "default", SND_SEQ_OPEN_INPUT, 0);
  if (err < 0)
    {
      fprintf(stderr, "Cannot open default sequencer port\n");
      return 1;
    }
  snd_seq_set_client_name(seq, "Dancer Midi Seqdump");  
  port = snd_seq_create_simple_port(seq, "input port1",
				    SND_SEQ_PORT_CAP_WRITE|SND_SEQ_PORT_CAP_SUBS_WRITE,
				    SND_SEQ_PORT_TYPE_APPLICATION);
  if (port < 0)
    {
      fprintf(stderr, "Cannot open port\n");
      return 1;
    }

  while (snd_seq_event_input(seq, &ev) >= 0)
    {
      switch (ev->type)
	{
	case SND_SEQ_EVENT_NOTEON:
	  printf("noteon %x %x %x\n", ev->data.note.channel, ev->data.note.note, ev->data.note.velocity);
	  break;
	  
	case SND_SEQ_EVENT_NOTEOFF:
	  printf("noteoff %x %x %x\n", ev->data.note.channel, ev->data.note.note, ev->data.note.velocity);
	  break;
	}
    }
}
============================================================

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Alsa-devel] [BUG] 2.6.16-rc4 git, ALSA USB-MIDI does not give NOTEOFF event for M-Audio Keystation 88es, but NOTEON with velocity=0
  2006-02-26 15:42 [BUG] 2.6.16-rc4 git, ALSA USB-MIDI does not give NOTEOFF event for M-Audio Keystation 88es, but NOTEON with velocity=0 Junichi Uekawa
@ 2006-02-27 12:13 ` Takashi Iwai
  2006-02-27 13:52   ` Junichi Uekawa
  0 siblings, 1 reply; 3+ messages in thread
From: Takashi Iwai @ 2006-02-27 12:13 UTC (permalink / raw)
  To: Junichi Uekawa; +Cc: alsa-devel, linux-kernel

At Mon, 27 Feb 2006 00:42:38 +0900,
Junichi Uekawa wrote:
> 
> Hi,
> 
> I'm seeing that USB MIDI keyboard (M-Audio Keystation 88es) is
> generating note-on events on both note-on and note-off. The difference
> being that note-off is generating an note-on event with velocity '0'.
> 
> The following code in seq_midi_emul.c(snd_midi_process_event) looks
> suspiciously like what's needed for this device:
> 
>         /* Make sure that we don't have a note on that should really be
>          * a note off */
>         if (ev->type == SNDRV_SEQ_EVENT_NOTEON && ev->data.note.velocity == 0)
>                 ev->type = SNDRV_SEQ_EVENT_NOTEOFF;

This code is irrelevant.  This is for MIDI emulation like emu10k1
WaveTable, not for the real MIDI device.

Basically the given behavior is not a bug.  The sequencer handles
note-on with velocity 0 as it is.  As a strict definition, note-off
and note-on with zero velocity are different although they are used
widely as identical in order to save bytes.


Takashi

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Alsa-devel] [BUG] 2.6.16-rc4 git, ALSA USB-MIDI does not give NOTEOFF event for M-Audio Keystation 88es, but NOTEON with velocity=0
  2006-02-27 12:13 ` [Alsa-devel] " Takashi Iwai
@ 2006-02-27 13:52   ` Junichi Uekawa
  0 siblings, 0 replies; 3+ messages in thread
From: Junichi Uekawa @ 2006-02-27 13:52 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: Junichi Uekawa, alsa-devel, linux-kernel

Hi,

> > I'm seeing that USB MIDI keyboard (M-Audio Keystation 88es) is
> > generating note-on events on both note-on and note-off. The difference
> > being that note-off is generating an note-on event with velocity '0'.
> > 
> > The following code in seq_midi_emul.c(snd_midi_process_event) looks
> > suspiciously like what's needed for this device:
> > 
> >         /* Make sure that we don't have a note on that should really be
> >          * a note off */
> >         if (ev->type == SNDRV_SEQ_EVENT_NOTEON && ev->data.note.velocity == 0)
> >                 ev->type = SNDRV_SEQ_EVENT_NOTEOFF;
> 
> This code is irrelevant.  This is for MIDI emulation like emu10k1
> WaveTable, not for the real MIDI device.
> 
> Basically the given behavior is not a bug.  The sequencer handles
> note-on with velocity 0 as it is.  As a strict definition, note-off
> and note-on with zero velocity are different although they are used
> widely as identical in order to save bytes.

Thanks; I've looked into MIDI specs, and it was documented everywhere;
it was just not obvious when I was looking into ALSA docs.

regards,
	junichi
-- 
dancer@{debian.org,netfort.gr.jp}   Debian Project

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-02-27 13:52 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-02-26 15:42 [BUG] 2.6.16-rc4 git, ALSA USB-MIDI does not give NOTEOFF event for M-Audio Keystation 88es, but NOTEON with velocity=0 Junichi Uekawa
2006-02-27 12:13 ` [Alsa-devel] " Takashi Iwai
2006-02-27 13:52   ` Junichi Uekawa

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome