original in en Guido Socher
en to nl Stefan Malomgré
Guido houdt niet alleen van Linux omdat het leuk is de eindeloze mogelijkheden ervan te ontdekken, maar ook omwille van de mensen die zich toeleggen op de vormgeving van het systeem.
Midi is een bestandsformaat dat geen gesampelde digitale klank bevat
maar een beschrijving van hoe die klank moet worden geproduceerd. Je zou
het kunnen vergelijken met een muziekpartituur, waarop iedere noot de
symbolische voorstelling van een toon is. Midibestanden zijn daarom zeer
licht in vergelijking met wav-bestanden.
Om het midiformaat in geluid om te zetten heeft u een midisynthesizer
nodig. Dat is een stuk hardware of software dat gebruik maakt van digitale
geluidsstalen (samples) van een instrument (bv. een piano) om klanken
te genereren. Deze geluidsstalen staan als "soundfont" bekend.
In dit artikel bekijken we van naderbij hoe u Alsa (advanced linux sound
architecture) als midi-synthesizer interface gebruikt.
Tot enkele jaren geleden kon je in elke computerzaak bekende geluidskaarten
verkrijgen zoals "Gravis UltraSound" of "SoundBlaster Gold". Beide kaarten
hadden een geïntegreerde hardware-midisynthesizer. Helaas zijn
deze kaarten niet meer te koop en zelfs al waren ze nog verkrijgbaar, ze zouden
niet meer in de huidige computers passen omdat het om ISA-bus kaarten ging.
De huidige computers gebruiken een PCI-busaansluiting en hebben vaak een
on-board geluidskaart die geïntegreerd is in de chipset. Bijna geen van
deze chipsets ondersteunt midisynthese. Als u een blik werpt op
de lijst van geluidskaarten die door Alsa worden ondersteund zal
u zich ongetwijfeld afvragen welke kaart de beste koop is. Helaas is de
keuze eenvoudiger dan op het eerste gezicht lijkt. Momenteel is er maar
één kaart in de handel die midisynthese ondersteunt nl. Soundblaster
Live.
Indien u geen Soundblaster Live bezit kan u midisynthese uitvoeren met
behulp van software emulatoren en ik zal uitleggen hoe dat in zijn werk
gaat.
Alsa bevindt zich momenteel in een overgangsfase. De stabiele
versie 0.5 geraakt langzamerhand wat gedateerd en de versie 0.9 zit
nog in een ontwikkelingsstadium. Als u miditoepassingen wenst te gebruiken
heeft u de versie 0.5 nodig omdat er voor de versie 0.9 nauwelijks toepassingen
bestaan en de interfaces van 0.5 en 0.9 niet compatibel zijn. (Let wel:
PCM gesampled geluid, wav-bestanden en toepassingen gebaseerd op gesampled
geluid vormen voor de versie 0.9 geen probleem; ik heb het hier uitsluitend
over midi.)
De programmatpakketten voor de versie 0.5 zijn:
tar jxvf alsa-driver-0.5.12a.tar.bz2
cd alsa-driver-0.5.12a
./configure --with-sequencer=yes --with-oss=yes --with-isapnp=no
make
make install
./snddevices
modprobe snd-card-emu10k1
modprobe snd-synth-emu10k1
modprobe snd-seq-midi
modprobe snd-pcm-oss
modprobe snd-mixer-oss
modprobe snd-seq-oss
/usr/sbin/alsactl store
Ga vervolgens over tot hetafspelen van flute.wav
om een toon te horen. Is dit niet het geval ga dan naar /proc/asound en verifieer /proc/asound/devices en /proc/asound/oss-devices. Er zou normaal "mixer" en "digital audio" moeten staan ( mijn bestanden)./bin/sfxload /etc/midi/8MBGMSFX.SF2
Een uitstekend testprogramma is pmidi (zie verwijzingen). Het commandoPort Client name Port name
64:0 External MIDI 0 MIDI 0-0
65:0 Emu10k1 WaveTable Emu10k1 Port 0
65:1 Emu10k1 WaveTable Emu10k1 Port 1
65:2 Emu10k1 WaveTable Emu10k1 Port 2
65:3 Emu10k1 WaveTable Emu10k1 Port 3
pmidi -p 65:0 test.mid
en het midigeluid zou nu te horen moeten zijn.CFLAGS = -O3 -mpentium -march=pentium -fomit-frame-pointer
\
-funroll-all-loops -malign-double -ffast-math
./configure --enable-ncurses --enable-xaw --enable-spectrogram
--enable-xaw=dynamic --enable-audio=oss,alsa --enable-alsaseq
--prefix=/usr/local/timidity-2.11.3
make
make install
cd /usr
find share/timidity -print | cpio -dump /usr/local/timidity-2.11.3
/usr/local/timidity-2.11.3/bin/timidity -iA -B2,8 -Os
-EFreverb=0
TiMidity starting in ALSA server mode
set SCHED_FIFO
Opening sequencer port: 128:0 128:1
Port Client name Port name
128:0 Client-128 TiMidity port 0
128:1 Client-128 TiMidity port 1
pmidi -p 128:0 test.mid
muziek produceren.alias char-major-116 snd
alias char-major-14 soundcore
alias snd-card-0 snd-card-emu10k1
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-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
alias midi snd-synth-emu10k1
below snd-seq-oss snd-synth-emu10k1
post-install snd-synth-emu10k1 /bin/sfxload /etc/midi/8MBGMSFX.SF2
; alsactl restore
# uncomment to save volume settings at shutdown:
#pre-remove snd-synth-emu10k1 alsactl store
alias char-major-116 snd
alias char-major-14 soundcore
alias snd-card-0 snd-card-via686a
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-12 snd-pcm-oss
# restore original mixer:
post-install snd-card-via686a alsactl restore
# uncomment to save volume settings at shutdown:
#pre-remove snd-synth-emu10k1 alsactl store
echo "starting timidity"
timidiy=/usr/local/timidity-2.11.3/bin/timidity # do not
forget the "&" in the next line:
$timidity -iA -B2,8 -Os -EFreverb=0 > /dev/null &