Raw MIDI input/output is not working in ALSA 0.9.0rc3 on a
Soundblaster AWE64 Gold ISA and external MIDI instruments.
Everything else works fine including MIDI file playback on
the synth.  Playback on external MIDI gives total silence.
For comparison, raw MIDI input works perfectly on the very
same hardware on OSS/Linux 2.0.x [MIDI output was never
implemented in OSS/2.0.x].   In detail:

1) Every MIDI file recording from external MIDI instruments
   contains invalid time values in each MIDI event,
   meaning the file can't be played back.  The recorded
   MIDI files do contain note-on and note-off events but
   the files are useless without correct time values.
   An example invalid MIDI files is in the attachment.
   The recording was made in the Rosegarden sequencer
   (it works ok on OSS/Linux 2.0.x)

   Is anyone working on a patch for rawmidi.c?

2) Valid MIDI files won't playback to external MIDI
   instruments -- there is no sound output.

3) make install didn't install the ALSA headers
   /usr/include/alsa/* like it did with old ALSA betas.
   Is this new behaviour correct?  How do you get a
   complete set of ALSA headers installed automatically?
   rm -rf existing headers doesn't trigger a re-install.

4) BTW, is anyone working on MIDI RESET for ALSA 1.0.0?
   alsa-kernel/core/rawmidi.c says MIDI reset is in the
   TODO stage. I have instruments that sometimes need
   MIDI reset.  OSS/Linux 2.0.x had a handy seq_reset()
   in drivers/sound/sequencer.c which mostly worked well.

Thanks,

Will
-------------------------------

Attachment: recording.mid
Description: MIDI audio

I want to make external MIDI instruments work with ALSA.
I don't mean just being able to play MIDI files on the
soundcard using soundfont samples.  I want to play external
MIDI instruments and have the PC be able to record the
MIDI events into a MIDI file.  I also want the PC to be
able to play MIDI files on an external MIDI keyboard.
Is anyone else successfully using ALSA to record the
playing of MIDI instruments or playing MIDI files on
external MIDI instruments?

I'm using an ISA SoundBlaster AWE64 Gold card and ALSA
sound driver 0.9.0rc2 as well as a patched ALSA using
Clemens Ladisch' patch to rawmidi.c  ALSA compiles fine
with 2.4.x kernels/devfsd and apparently installs fine
(lsmod output in attachment).  The ALSA config looks fine
(see attachments) apart from what might be one odd feature
(see below after next paragraph).

I'm using the excellent Rosegarden MIDI software v2.1
(www.all-day-breakfast.com/rosegarden/) to read the MIDI
events into a MIDI file and to create musical scores.
Without Clemens' patch I don't get any MIDI sequencer
input from the MIDI instruments.  The recorded MIDI files
are empty with no MIDI events.  With Clemens' patch the
recorded MIDI files are non-empty but have invalid time
values making them unplayable.  This is odd because MIDI
input works perfectly when I play the same MIDI instruments
connected to a PC with an old 2.0.x kernel, OSS and an old
ISA SoundBlaster 16 (CreativeTech original).  I get valid
MIDI files as recordings.  I want to do the same with ALSA.

One difference in the OSS /dev/sndstat outputs (full
outputs in attachments) is that "Card config:" is missing
the MPU registration which you do get in OSS/Linux 2.0.x
but maybe that's simply because ALSA uses /dev/sndstat
differently -- in fact, the MPU401 port is in /proc/ioports
(see attachment).

ALSA/Linux 2.4.x:

   [...]
   Card config:
   Sound Blaster 16 at 0x220, irq 5, dma 1&5
>>>[ MPU is not mentioned here ]

   [...]
   Midi devices:
   0: MPU-401 (UART)

   [...]

OSS/Linux 2.0.x:

   [...]
   Card config:
   Sound Blaster at 0x220 irq 5 drq 1,5
>>>SB MPU-401 at 0x300 irq 5
   OPL-2/OPL-3 FM at 0x388 drq 0

   [...]
   Midi devices:
   0: Sound Blaster 16

   [...]

lsmod output shows I've got the usual ALSA SnowStorm(R)
of 10^2 loaded modules:-) including snd-mpu401-uart
together with snd-seq-oss, snd-seq-device, snd-rawmidi,
snd-seq-midi, snd-seq-virmidi, and snd-seq-midi-emul.

BTW, what is the minimum correct modules.conf to use with ALSA?
Is something wrong with my modules.conf?  Any ideas?
Thanks,

Will

Sound Driver:3.8.1a-980706 (ALSA v0.9.0rc2 emulation code)
Kernel: Linux alsatest 2.4.19 #5 Wed Aug 14 17:10:26 BST 2002 i686
Config options: 0

Installed drivers: 
Type 10: ALSA emulation

Card config: 
Sound Blaster 16 at 0x220, irq 5, dma 1&5

Audio devices:
0: DSP v4.16 (DUPLEX)

Synth devices:
0: OPL3 FM

Midi devices:
0: MPU-401 (UART)

Timers:
7: system timer

Mixers:
0: mixer00
Sound Driver:3.5.4-960630 (Fri Dec 15 14:42:06 GMT 2000 will,
Linux osstest 2.0.39 #6 Thu Dec 14 19:01:13 GMT 2000 i686)
Kernel: Linux osstest 2.0.39 #8 Fri Dec 15 08:21:13 GMT 2000 i686
Config options: 0

Installed drivers: 
Type 1: OPL-2/OPL-3 FM
Type 2: Sound Blaster
Type 7: SB MPU-401

Card config: 
Sound Blaster at 0x220 irq 5 drq 1,5
SB MPU-401 at 0x300 irq 5
OPL-2/OPL-3 FM at 0x388 drq 0

Audio devices:
0: Sound Blaster 16 (4.13)

Synth devices:
0: Yamaha OPL-3

Midi devices:
0: Sound Blaster 16

Timers:
0: System clock

Mixers:
0: Sound Blaster
alias usb-controller usb-uhci

# For ALSA sound drivers and a SoundBlaster 32/64 AWE only:
alias   sound           snd-sbawe
alias   char-major-14   soundcore
alias   char-major-116  sound
alias   /dev/dsp        sound
alias   /dev/music      sound
alias   /dev/sound      sound
alias   /dev/sequencer  sound
alias   /dev/sndstat    sound
options                 snd-sbawe snd_isapnp=1 snd_awe_port=0x620
add above               snd-sbawe snd-pcm-oss snd-mixer-oss snd-seq-oss
alias snd-card-1 off
alias snd-card-2 off
alias snd-card-3 off
alias snd-card-4 off
alias snd-card-5 off
alias snd-card-6 off
alias snd-card-7 off

# For ALSA sound drivers and an ordinary SoundBlaster 16 only:
#alias  sound   sb
#options        sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x300
#alias  char-major-116  sb
#alias  /dev/dsp        sb
#alias  /dev/music      sb
#alias  /dev/sound      sb
#alias  /dev/sequencer  sb
#alias  /dev/sndstat    sb
#add above              sb snd-pcm-oss snd-mixer-oss snd-seq-oss

# For ALSA sound drivers and a SoundBlaster 32/64 AWE only:
#post-install           snd-mixer-oss   /bin/sound-mixer-init

# For OSS/Free sound drivers only:
alias   char-major-14   soundcore
Module                  Size  Used by    Tainted: P  
snd-seq-midi            3328   0  (autoclean) (unused)
snd-emu8000-synth       8584   0  (autoclean) (unused)
snd-pcm-oss            35684   0  (autoclean) (unused)
snd-mixer-oss           9212   1  (autoclean) [snd-pcm-oss]
snd-emux-synth         24060   0  (autoclean) [snd-emu8000-synth]
snd-seq-virmidi         2584   0  (autoclean) [snd-emux-synth]
snd-util-mem            1200   0  (autoclean) [snd-emu8000-synth snd-emux-synth]
snd-seq-oss            22336   0  (autoclean) (unused)
snd-seq-midi-event      2984   0  (autoclean) [snd-seq-midi snd-seq-virmidi 
snd-seq-oss]
snd-opl3-synth          8836   0  (autoclean) (unused)
snd-seq-instr           4304   0  (autoclean) [snd-opl3-synth]
snd-seq-midi-emul       4320   0  (autoclean) [snd-emux-synth snd-opl3-synth]
snd-seq                33936   2  (autoclean) [snd-seq-midi snd-emux-synth 
snd-seq-virmidi snd-seq-oss snd-seq-midi-event snd-opl3-synth snd-seq-instr 
snd-seq-midi-emul]
snd-ainstr-fm           1396   0  (autoclean) [snd-opl3-synth]
snd-sbawe              16128   1  (autoclean) [snd-emu8000-synth]
snd-sb16-csp           15080   0  (autoclean) [snd-sbawe]
isa-pnp                27908   0  (autoclean) [snd-sbawe]
snd-opl3-lib            5092   0  (autoclean) [snd-opl3-synth snd-sbawe]
snd-hwdep               3424   0  (autoclean) [snd-sb16-csp snd-opl3-lib]
snd-sb16-dsp            5224   0  (autoclean) [snd-sbawe]
snd-pcm                48128   0  (autoclean) [snd-emu8000-synth snd-pcm-oss 
snd-sb16-dsp]
snd-timer               9576   0  (autoclean) [snd-seq snd-opl3-lib snd-pcm]
snd-sb-common           5960   0  (autoclean) [snd-sbawe snd-sb16-csp snd-sb16-dsp]
snd-mpu401-uart         2544   0  (autoclean) [snd-sbawe snd-sb16-dsp]
snd-rawmidi            11968   0  (autoclean) [snd-seq-midi snd-seq-virmidi 
snd-mpu401-uart]
snd-seq-device          3824   0  (autoclean) [snd-seq-midi snd-emu8000-synth 
snd-emux-synth snd-seq-oss snd-opl3-synth snd-seq snd-sbawe snd-opl3-lib snd-rawmidi]
snd                    24204   0  (autoclean) [snd-seq-midi snd-emu8000-synth 
snd-pcm-oss snd-mixer-oss snd-emux-synth snd-seq-virmidi snd-util-mem snd-seq-oss 
snd-seq-midi-event snd-opl3-synth snd-seq-instr snd-seq snd-sbawe snd-sb16-csp 
snd-opl3-lib snd-hwdep snd-sb16-dsp snd-pcm snd-timer snd-sb-common snd-mpu401-uart 
snd-rawmidi snd-seq-device]
 # cat /proc/asound/cards
0 [card0          ]: SB AWE - Sound Blaster 16
                     Sound Blaster 16 at 0x220, irq 5, dma 1&5

 # cat /proc/asound/devices
  0: [0- 0]: ctl
  4: [0- 0]: hardware dependent
  8: [0- 0]: raw midi
 16: [0- 0]: digital audio playback
 24: [0- 0]: digital audio capture
  1:       : sequencer
  9: [0- 1]: raw midi
 10: [0- 2]: raw midi
 17: [0- 1]: digital audio playback
 33:       : timer

 # cat /proc/asound/oss/devices
 10: [0-10]: hardware dependent
  2: [0- 2]: raw midi
  0: [0- 0]: mixer
  1:       : sequencer
  8:       : sequencer
 13: [0-13]: raw midi

 # cat /proc/bus/isapnp/devices 
0100    CTL009eCTL0044  
0102200330038800000000000000000000010100000105050000000000000000000000000000000000
0101    CTL009eCTL7002  
0000000000000000000000000000000000000200000404040000000000000000000000000000000000
0102    CTL009eCTL0023  
0106200a200e2000000000000000000000000200000404040000000000000000000000000000000000

 # cat /proc/interrupts 
           CPU0       
   [...]
  5:          1          XT-PIC  SoundBlaster
   [...]
NMI:          0 
LOC:          4 
ERR:          5
MIS:          0

 # cat /proc/ioports 
0000-001f : dma1
[...]
0080-008f : dma page reg
[...]
00c0-00df : dma2
[...]
0213-0213 : isapnp read
0220-022f : SoundBlaster
[...]
0330-0331 : MPU401 UART
[...]
0388-0389 : OPL2/3 (left)
038a-038b : OPL2/3 (right)
[...]
0620-0623 : Emu8000-1
0a20-0a23 : Emu8000-2
0a79-0a79 : isapnp write
0cf8-0cff : PCI conf1
0e20-0e23 : Emu8000-3
[...]

 % cat /etc/devfsd.conf
# Enable full compatibility mode for old device names. You may comment these
# out if you don't use the old device names. Make sure you know what you're
# doing!
REGISTER        .*      MKOLDCOMPAT
UNREGISTER      .*      RMOLDCOMPAT

# You may comment these out if you don't use the original "new" names
REGISTER        .*      MKNEWCOMPAT
UNREGISTER      .*      RMNEWCOMPAT

# Enable module autoloading. You may comment this out if you don't use
# autoloading
LOOKUP          .*      MODLOAD

#
# Uncomment this if you want the old /dev/cdrom symlink
# (e.g. those specifying CD-ROM type, mouse port, modem port etc)
#
LOOKUP          ^cdrom$         CFUNCTION GLOBAL symlink cdroms/cdrom0 $devpath
REGISTER        ^cdrom/cdrom0$  CFUNCTION GLOBAL symlink cdroms/cdrom0 cdrom
UNREGISTER      ^cdrom/cdrom0$  CFUNCTION GLOBAL unlink cdrom

LOOKUP          ^audio$         CFUNCTION GLOBAL symlink sound/audio $devpath
REGISTER        ^audio/audio$   CFUNCTION GLOBAL symlink sound/audio audio
UNREGISTER      ^audio/audio$   CFUNCTION GLOBAL unlink audio

LOOKUP          ^midi$          CFUNCTION GLOBAL symlink sound/midi00 $devpath
REGISTER        ^midi/midi00$   CFUNCTION GLOBAL symlink sound/midi00 midi
UNREGISTER      ^midi/midi00$   CFUNCTION GLOBAL unlink midi

LOOKUP          ^music$         CFUNCTION GLOBAL symlink sound/sequencer2 $devpath
REGISTER        ^music/sequencer2$      CFUNCTION GLOBAL symlink sound/sequencer2 music
UNREGISTER      ^music/sequencer2$      CFUNCTION GLOBAL unlink music

LOOKUP          ^sbdsp$         CFUNCTION GLOBAL symlink sound/dsp $devpath
REGISTER        ^sbdsp/dsp$     CFUNCTION GLOBAL symlink sound/dsp sbdsp
UNREGISTER      ^sbdsp/dsp$     CFUNCTION GLOBAL unlink sbdsp

LOOKUP          ^sndstat$       CFUNCTION GLOBAL symlink /proc/asound/sndstat $devpath
REGISTER        ^sndstat/proc/asound/sndstat$   CFUNCTION GLOBAL symlink 
/proc/asound/sndstat sndstat
UNREGISTER      ^sndstat/proc/asound/sndstat$   CFUNCTION GLOBAL unlink sndstat

# Set the correct owner/group permissions on the sound driver device files:
LOOKUP          snd             MODLOAD ACTION snd
REGISTER        sound/.*        PERMISSIONS root.audio 660
REGISTER        snd/.*          PERMISSIONS root.audio 660

Reply via email to