[画像:[Guido Socher]]
door Guido Socher (homepage)
Over de auteur:
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.
Vertaald naar het Nederlands door:
Stefan Malomgré <stefan-(dot)-malomgre-(at)-skynet-(dot)-be>
Inhoud:
|
Midi met Alsa
[
画像:[Illustratie]]
Kort:
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.
_________________ _________________ _________________
Inleiding
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.
Wat heeft u nodig?
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:
Informatie over hoe Alsa moet worden gecompileerd vindt u in de Alsa
HOWTO (zie verwijzingen). In principe komt het voor de driver
neer op:
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
voor het overige doet u "./configure;make;make install".
Na de installatie kan u de module in de kernel laden. Voor
Soundblaster Live (=emu10k1 Chip) is dat:
modprobe snd-card-emu10k1
modprobe snd-synth-emu10k1
modprobe snd-seq-midi
modprobe snd-pcm-oss
modprobe snd-mixer-oss
modprobe snd-seq-oss
Voor andere kaarten vervangt u de twee eerste lijnen door de module
voor uw desbetreffende kaart (bv. snd-card-via686a voor een interne kaart
gebaseerd op de via 686 Chip). Mandrake en Suse ondersteunen Alsa
en bij deze distributies kan u het hardwaredetectie- en configuratieprogramma
gebruiken (resp. Harddrake en Yast2). Als u er hoegenaamd geen idee van
heeft welk type van chip u bezit probeer dan "lspci -v" (het lspci- commando
behoort tot het pakket "pciutils").
Nu komt het erop aan te testen of het geluid werkt. Start het programma
alsamixer en tik "m" om de geluidsdemping van de master en het pcm kanaal
op te heffen. Gebruik vervolgens de pijltjestoetsen om het volume
in te stellen en als dit gebeurd is verlaat u Alsamixer met de toets Esc.
[
画像:[alsamixer]]
Om de instellingen in /etc/asound.conf op te slaan gebruikt u:
/usr/sbin/alsactl store
Ga vervolgens over tot het
afspelen 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).
Tot zover de test om na te gaan of de pcm OSS emulatie en het geluid
in het algemeen werkt. Ik zal verder uitleggen wat moet worden toegevoegd
in /etc/modules.conf om alles te automatiseren maar de volgende stap
is Midi aan de praat krijgen.
Midi
Bezit u een geluidskaart met geïntegreerde midisynthesizer
(Soundblaster Live) dan moet u de "soundfonts" (gesampelde instrumenten)
in de chip van de kaart laden. Beschikt u niet over een dergelijke kaart
kan u Timidity installeren (zie de verwijzingen met de URL waar u het
programma kan downloaden) en dit programma als Alsa-midisynthesizer gebruiken.
Programma's die op Alsa draaien merken namelijk geen verschil tussen een
hardwaresynthesizer en Timidity.
De soundfont laden
U zal eerst moeten checken of het programma sfxload (/bin/sfxload)
geïnstalleerd is. Is dat niet het geval dan is het nu tijd het te
installeren. Dit programma maakt deel uit van het pakket awesfx (het
bevindt zich op de installatie-CD van uw linuxdistributie maar kan ook
worden opgehaald bij
http://mitglied.lycos.de/iwai/awedrv.html ). De volgende
stap is het kopiëren van het bestand 8MBGMSFX.SF2 van uw Soundblaster
Live CD (/mnt/cdrom/AUDIO/Common/SFBANK/8MBGMSFX.SF2) naar /etc/midi/8MBGMSFX.SF2.
De soundfont wordt met het volgende commando geladen:
/bin/sfxload /etc/midi/8MBGMSFX.SF2
Een uitstekend testprogramma is pmidi (zie verwijzingen). Het commando
pmidi -l
zou het volgende resultaat moeten geven:
Port 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
Tik nu
pmidi -p 65:0
test.mid
en het midigeluid zou nu te horen moeten zijn.
TiMidity als softwaresynthesizer
Download TiMidity++-2.11.3.tar.gz (cf verwijzingen aan het
eind van dit artikel) en pak het uit met tar zxvf TiMidity++-2.11.3.tar.gz.
Open het bestand common.makefile.in. met een editor en uncomment de regel
CFLAGS voor pentium gcc:
CFLAGS = -O3 -mpentium -march=pentium -fomit-frame-pointer
\
-funroll-all-loops -malign-double -ffast-math
Nu kan je timidity voor verschillende grafische interfaces
configureren, maar wij zijn hoofdzakelijk geïnteresseerd in "--enable-alsaseq".
Het kan evenwel geen kwaad om het programma via een grafische interface
te manipuleren:
./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
Hiermee installeert u timidity naar /usr/local/timidity-2.11.3/bin om
een reeds bestaande timidity-installatie van uw distributie niet te overschrijven.
Wij installeren timidity zelf omdat ik geen enkele distributie ken die timidity
voor de alsaseq interface geconfigureerd heeft.
Ook voor timidity heeft u soundfonts nodig. Die heten hier
"instrument files". Een degelijke en complete set van instrumenten is tamelijk
omvangrijk (ca. 10Mb). U geraakt het snelst aan deze bestanden als u de
timidity++ installatie van uw linuxdistributie kopieert of door het ophalen
van bv.
timidity++-2.11.3-1.i386.rpm voor Redhat 7.3 . Om de bestanden van
/usr/share/timidity/instruments naar /usr/local/timidity-2.11.3/share/timidity/instruments
te kopiëren gebruikt u het volgende commando:
cd /usr
find share/timidity -print | cpio -dump /usr/local/timidity-2.11.3
Nu kunnen we timidity testen:
/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
en vervolgens pmidi -l:
Port Client name Port name
128:0 Client-128 TiMidity port 0
128:1 Client-128 TiMidity port 1
Ziezo, we hebben 2 poorten met de TiMidity-synthesizer.
U kan vervolgens met
pmidi -p 128:0
test.mid
muziek produceren.
/etc/modules.conf
Voor het automatisch configureren en laden van de module kan u het
volgende in /etc/modules.conf invoeren (dit in de veronderstelling dat u
een Soundblaster Live heeft):
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
Voor een kaart zonder midisynthesizer, bv. een interne via686
wordt dat:
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
Om timidiy automatisch tijdens de systeemstart te laden moet
u de volgende regel toevoegen in /etc/init.d/alsasound (dit bestand wordt
met de Alsa driver geïnstalleerd maar is niet geactiveerd. Met
chkconfig kan het voor runlevel 3+5 geactiveerd worden):
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 &
Alsa en midi gebruiken
[kmid]
In dit artikel hebben we het programma pmidi gebruikt om midibestanden
af te spelen. KDE bevat het programma kmidkmid (niet te verwarren met kmidi)
dat u met of zonder alsa-ondersteuning kan compileren. Redhat heeft het
uitsluitend voor OSS gecompileerd, terwijl Mandrake en Suse Alsa gebruiken.
De Mandrakebestanden kunnen evenwel onder Redhat worden gebruikt.
De uiteenzetting over de installatie van alsa kan ook nog van pas komen
voor andere programma's die in verdere artikels aan bod zullen komen. Zo
zal er bv. een artikel over Jazz verschijnen, een midisequencer en editor.
Aan het slot van dit artikel vindt u een lijst met verwijzingen naar
andere muziekprogramma's.
Er zijn ook andere programma's zoals timidiy (timidity -ig start bv.
timidity met gtk interface) of kmidi (niet te verwarren met kmid) die
een softwaresynthesizer bevatten. In dit geval heeft u op het niveau
van de kernel geen midi nodig (hetzij in de hardware of door timidity-emulatie).
Over het algemeen is het aan te raden een gemeenschappelijk midi API te
hanteren in de plaats van midi in in ieder programma opnieuw te implementeren.
Alsa ondergaat momenteel grote wijzigingen; zoals reeds gezegd
functioneert versie 0.9 niet met de meeste toepassingen. De versie
0.5, zoals ze hier werd besproken kent eveneens enkele problemen. De
OSS sequencer-emulatie (/dev/sequencer) werkt bijvoorbeeld niet. Ze functioneert
alleen met Soundblaster AWE kaarten, die niet meer in de handel verkrijgbaar
zijn. Dit betekent dat uitsuitend programma's die voor Alsa geschreven werden
zullen functioneren. Hopelijk zal de versie 0.9 daarin verandering brengen.
Dit artikel zou ook in de toekomst, als versie 0.9 verspreid geraakt, zijn
nut moeten blijven bewaren omdat er eigenlijk slechts "kleinigheden" aangepast
zijn. Zo zijn bv. de namen van de kernelmodule anders maar de fundamentele
werking blijft dezelfde.
Verwijzingen
Talkback voor dit artikel
Elk artikel heeft zijn eigen talkback pagina. Daar kan je commentaar geven of commentaar van anderen lezen:
2002年10月08日, generated by lfparser version 2.31