MIDI devices can be integrated into the soundcard or be a separate device. External MIDI interfaces may be attached to either the serial or USB port.
The first *and most important* thing you should do is check if your card is supported!
http://www.alsa-project.org/soundcards.php3
http://www.4front-tech.com/osshw.html
Configuring MIDI devices varies with Linux distributions. A well supported card may be configured when you install the OS.
The Linux kernel includes the OSS drivers and in the 2.5 kernel the ALSA drivers. Most distributions provide a configuration tool (mostly for soundcards), but if you are using the MIDI port of a sound card it should be configured. Under RedHat you would use sndconfig, under SuSE yast, and Mandrake, DrakConf.
If none of the above tools will configure your MIDI interface, or you are experiencing problems, the following steps should be taken:
Does lsmod show any MIDI related modules? Here's a typical output from an OSS based system.
[root@beatbox]# lsmod Module Size Used by lockd 32208 1 (autoclean) sunrpc 54640 1 (autoclean) [lockd] autofs 9456 2 (autoclean) usb-ohci 12624 0 (unused) usbcore 43632 1 [usb-ohci] hisax 470096 0 (autoclean) (unused) isdn 104208 0 (autoclean) [hisax] slhc 4544 0 (autoclean) [isdn] eepro100 16144 1 (autoclean) #---- Soundcard modules opl3 11376 2 mad16 7968 1 ad1848 16848 1 [mad16] sb 34752 1 [mad16] uart401 6384 1 [mad16 sb] sound 58368 0 [opl3 mad16 ad1848 sb uart401] soundlow 464 0 [sound] soundcore 2800 6 [sb sound] nls_cp437 3952 2 (autoclean) vfat 9408 1 (autoclean) fat 30432 1 (autoclean) [vfat] ide-scsi 7664 0
Look for mpu401, olp3, uart401 and oss.
If you are using USB devices don't forget to check if the USB modules are there.
To check the config cat the sndstat file:
[root@beatbox]# cat /dev/sndstat OSS/Free:3.8s2++-971130 Load type: Driver loaded as a module Kernel: Linux mega 2.2.17-21mdk #1 Thu Oct 5 13:16:08 CEST 2000 i686 Config options: 0 Installed drivers: Card config: Audio devices: 0: MAD16 WSS (82C930) (DUPLEX) Synth devices: 0: Yamaha OPL3 Midi devices: 0: Mad16/Mozart Timers: 0: System clock Mixers: 0: MAD16 WSS (82C930)
We see here that the MIDI device is a mad16 and this is listed in the lsmod output above.
If you see nothing related to MIDI check the contents of your /etc/modules.conf file.
[root@beatbox]# cat /etc/modules.conf alias net-pf-4 ipx pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start alias usb-interface usb-ohci alias parport_lowlevel parport_pc alias block-major-11 scsi_hostadapter pre-install plip modprobe parport_pc ; echo 7 > /proc/parport/0/irq alias scsi_hostadapter ide-scsi alias eth0 eepro100 alias eth1 hisax #---- Soundcard alias sound-slot-0 mad16 options sound dmabuf=1 alias midi opl3 options opl3 io=0x388 options sb support=1 options mad16 io=0x530 irq=5 dma=0 dma16=1 mpu_io=0x300 mpu_irq=7 joystick=1
Here's the output of /proc/modules to check to see if the MIDI modules are loaded into the Kernel.
[root@mega /proc]# cat modules 0000-001f : dma1 0020-003f : pic1 0040-005f : timer 0060-006f : keyboard 0070-007f : rtc 0080-008f : dma page reg 00a0-00bf : pic2 00c0-00df : dma2 00f0-00ff : fpu 0170-0177 : ide1 01f0-01f7 : ide0 02f8-02ff : serial(auto) #---- MIDI device 0300-0303 : MPU-401 UART 0376-0376 : ide1 0388-038b : Yamaha OPL3 03c0-03df : vga+ 03f6-03f6 : ide0 03f8-03ff : serial(auto) 0530-0533 : MAD16 WSS config 0534-0537 : MAD16 WSS de00-de1f : Intel Speedo3 Ethernet f000-f007 : ide0 f008-f00f : ide1
You should see something similar to the above. If not you'll need to install MIDI drivers.
If you are going to be using ALSA 0.5x divers, which you shouldn't do, I suggest a good read of Valentijn Sessink's Alsa-sound-mini-HOWTO which can be found at the link below:
http://www.linuxdoc.org/HOWTO/mini/Alsa-sound.html
You are strongly recommended to use ALSA greater than version 0.9. For ALSA drivers later than 0.9x you should have a good read of the ALSA-HOWTO by Madhu Maddy.
http://www.alsa-project.org/alsa-doc/alsa-howto/
Below is a very quick install run-though for installing the ALSA 0.9 drivers and libs which is a required configuration for most MIDI apps.
[root@beatbox] # tar jxvf alsa-driver....tar.bz2 [root@beatbox] # cd alsa-driver..... [root@beatbox] # ./configure messages - no errors [root@beatbox] # make messages - no errors [root@beatbox] # make install messages - no errors [root@beatbox] # ./snddevices
Now you will need to edit /etc/modules.conf, or the ALSA file in your modules directory on some distributions. There may be entries for other, non-MIDI, devices, so be careful when you are editing the file.
A typical system may have old ALSA or OSS configurations in the file, you will need to remove, or better still comment them out.
Below is a typical modules.conf file showing the ALSA config with OSS.
alias char-major-116 snd alias char-major-14 soundcore alias snd-card-0 (MIDI/Sound card) alias sound-slot-0 snd-card-0 alias sound-service-0-0 snd-mixer-oss alias sound-service-0-1 snd-seq-oss alias sound-service-0-3 snd-pcm-oss alias sound-service-0-12 snd-pcm-oss
Change the (MIDI/Sound card) entry to that of your card. This information can normally be found on the ALSA website.
With the ALSA drivers installed, now you will need to install the header library files needed by ALSA based programs. This is what is contained in the alsa-libs package.
Make sure you have a matching pair of alsa-drivers and alsa-libs!
[root@beatbox] # tar jxvf alsa-libs....tar.bz2 [root@beatbox] # cd alsa-libs..... [root@beatbox] # ./configure messages - no errors [root@beatbox] # make messages - no errors [root@beatbox] # make install
Your system should now be configured :)
You can check this with a simple C program, if it compiles and can be executed then your system should be ok.
// Compile this test program like so: gcc alsatest.c -o alsatest -lasound #include <stdio.h> #include <alsa/asoundlib.h> int main (int argc, char *argv[]) { snd_seq_t *seq_handle; if (snd_seq_open(&seq_handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0) { fprintf(stderr, "Error opening ALSA sequencer.\n"); exit(1); } printf("The ALSA libraries are installed.\n"); return 0; }
MIDI is a real-time protocol and latency issues are a serious problem.
There are now several developers working on improving the latency times and improvements in the kernel are making Linux a fine platform for MIDI.
Although stock Linux distributions may run fine, pro set-ups should apply low-latency patches. More information can be found here:
http://www.gardena.net/benno/linux/audio/
http://www.linuxdj.com/audio/lad/resourceslatency.php3
Low Latency Mini Howto
http://www.boosthardware.com/LAU/guide/Low_latency-Mini-HOWTO.html