Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751222AbWBZPml (ORCPT ); Sun, 26 Feb 2006 10:42:41 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751234AbWBZPml (ORCPT ); Sun, 26 Feb 2006 10:42:41 -0500 Received: from 219-75-232-131.eonet.ne.jp ([219.75.232.131]:51984 "HELO viper2.netfort.gr.jp") by vger.kernel.org with SMTP id S1751222AbWBZPmk (ORCPT ); Sun, 26 Feb 2006 10:42:40 -0500 Date: Mon, 27 Feb 2006 00:42:38 +0900 Message-ID: <87vev2w2hd.dancerj%dancer@netfort.gr.jp> From: Junichi Uekawa To: alsa-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [BUG] 2.6.16-rc4 git, ALSA USB-MIDI does not give NOTEOFF event for M-Audio Keystation 88es, but NOTEON with velocity=0 User-Agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (=?ISO-8859-4?Q?Shij=F2?=) APEL/10.6 Emacs/21.4 (x86_64-pc-linux-gnu) MULE/5.0 (SAKAKI) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 10109 Lines: 301 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 #include 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; } } } ============================================================ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/