SoundBlaster AWE 32/64 met OSS/Free
Dit document wordt niet meer bijgehouden, en is licht verouderd.
Inleiding
Dit document gaat over het gebruiken van de OSS/Free kernel sound drivers voor de SoundBlaster AWE 32/64. (Juist: die momenteel met de kernel meegeleverd worden. OSS/Free staat voor de vrije implementatie van het Open Sound System) Andere oplossingen (het commerciële Open Sound System en ALSA) zijn er ook, en worden in dit artikel niet behandeld.
Er wordt vanuit gegaan dat je een beetje de Linux basisbeginselen begrijpt, en
dus kan omgaan met commando's als ls
, cd
en tar
, en
dat je weet hoe je een editor kan opstarten.
De nieuwste versie van dit document kan altijd worden bekeken op http://www.xs4all.nl/~wbsoft/linux/awe32.html.
Andere Nederlandstalige documenten over AWE32/64, beide te vinden op de mooie site Linux-NL.cx:
Deze informatie is uit diverse HOWTO's, andere informatie en voornamelijk eigen ervaring bijeengesprokkeld. Lees ook de diverse HOWTO's, maar misschien dat dit document je goed op weg kan helpen. Het lijkt een lang verhaal, maar zeer waarschijnlijk kun je heel grote stukken overslaan.
Disclaimer: Deze informatie is met grote zorg samengesteld. Toch aanvaardt de schrijver geen enkele aansprakelijkheid voor eventuele schade als gevolg van onjuiste gegevens. Correcties en tips worden altijd op prijs gesteld.
De Soundblaster AWE
De SoundBlaster AWE OSS/Free driver is vanaf kernel versie 2.2 in de kernel opgenomen. Bij SuSE 6.0 zit hij ook al bij de kernel source, maar moet je de kernel compileren om hem te gebruiken. Bij SuSE 6.2 en andere distributies die op de 2.2 kernel gebaseerd zijn, is dat dus niet meer nodig. De homepage van deze driver en andere utilities is: http://members.tripod.de/iwai/awedrv.html.
Vooral op wat oudere systemen zijn deze AWE-specifieke drivers zeer geschikt, want ze zijn heel snel, en benutten speciale AWE32 mogelijkheden erg goed. Behalve meer geheugen en software-matig 32 extra stemmen is de AWE64 hetzelfde als de AWE32.
Voor meer technische informatie over de AWE32/64 en Debian tips raadplege men
de Soundblaster-AWE Mini-HOWTO. Deze is wellicht op uw systeem
geïnstalleerd ergens in
/usr/doc/howto/en/mini/Soundblaster-AWE.gz
of iets dergelijks.
Creative Labs ondersteunt nu zelf ook Linux: http://developer.soundblaster.com/linux/, en ze hebben een speciale pagina gewijd aan Open Source op http://www.opensource.creative.com/.
Dit artikel gaat over het in gebruik nemen van de kernel-driver
(awedrv
), de SoundFont utilities awesfx
en de Midi-speler
awemidi
. Het mooie van deze midi-speler is dat hij automatisch wanneer
er een midi-file gespeeld wordt, de soundfonts naar de geluidskaart laadt; het
is zelfs mogelijk voor elke gegeven midi-file een andere soundfont-bank te
definiëren.
Nogmaals, wees je ervan bewust dat je wellicht heel veel stappen kan overslaan. Ik probeer slechts zo volledig mogelijk te zijn in de uitleg, waardoor je, als er iets niet werkt, eventueel geholpen bent.
De kernel driver
Gebruik je een 2.2 kernel dan hoef je zeer waarschijnlijk niet je kernel opnieuw te compileren!
Kijk of er in je /lib/modules/2.2.xx/
(waarbij xx
het
patchlevel is, bijv 13) modules zijn met namen als soundcore.o
,
awe_wave.o
, sb.o
, opl3.o
. Als dat het geval is kun
je gelijk naar het volgende punt gaan.
Als die er niet zijn moet je de modules eventueel apart na-installeren. Zoek in je distributie naar een pakje met kernelmodules en installeer die.
Zijn er geen kernelmodules te vinden, of niet voor jouw kaart, of het werkt op de een of andere manier niet naar wens, kun je de kernel opnieuw compileren. Dit is zeker niet ingewikkeld. In het kort:
- Installeer de kernel sources. Bij SuSE heet dat pakje
lx_suse
, categorie Development. - Log als root in onder X.
- Geef in een terminal in (# is de prompt):
- Na enige tijd verschijnt een window met kernel opties. Kies Sound.
- Activeer (met M=Module) Sound card Support, OSS Sound modules, 100% Soundblaster compatible, MPU-401 support, FM Synthesizer (OPL3) support, kies Additional Lowlevel drivers, activeer Lowlevel drivers support en SB32/AWE Support.
- Stel eventueel andere wensen in (het loont de moeite je hierin een beetje te verdiepen) en verlaat de configuratie-utility met `Save en Quit.'
- Standaard staat de EMU8000 Equalizer uit, die kun je aanzetten door het
bestand
./drivers/sound/lowlevel/awe_config.h
te bewerken: - Nu compileren we de kernel. Geef het commando:
- Nu moet de kernel naar de plaats waarvandaan hij bij het opstarten geladen
wordt, worden gekopiëerd. Vaak is dat
/boot/vmlinuz
of/vmlinuz
. Laad je de kernel vanuit DOS met LOADLIN, mount dan je dos partitie en zet daar de nieuwe kernel neer. Bewaar wel de vorige kernel, zodat je eventueel daarop kan terugvallen. Dit voorbeeld gaat uit van de kernel in/boot
: - Als je lilo gebruikt, run dan lilo:
- Maak nu de modules en installeer die:
# cd /usr/src/linux # make xconfig
# pico ./drivers/sound/lowlevel/awe_config.h
Verander daar de regel:
/* add mixer control of emu8000 equalizer */ #undef CONFIG_AWE32_MIXER
in:
/* add mixer control of emu8000 equalizer */ #define CONFIG_AWE32_MIXER
en sla het bestand weer op met Ctrl+X, Y en Enter.
# make dep clean bzImage
# cp /boot/vmlinuz /boot/vmlinuz.old # cp arch/i386/boot/bzImage /boot/vmlinuz # cp /boot/System.map /boot/System.map.old # cp System.map /boot
# lilo
# make modules && make modules_install
Je kernel is nu gecompileerd, en zal bij de eerstvolgende keer starten worden
gebruikt. Je moet je computer herstarten als je hem nu wilt gebruiken. Als je
tevreden bent over je nieuwe kernel kun je in de directory
/usr/src/linux/
als root een make clean
geven om de kernel
sources weer op te schonen.
Play 'n Plug
Als je een AWE32 hebt die Plug 'n Play is, moeten we Linux een handje helpen. Vanaf kernel 2.2 is dat niet meer nodig, die kan zelf PnP apparaten initialiseren. Als je dan de AWE driver versie 0.4.4 (de laatste) downloadt van bovengenoemde site en installeert, dan gebruikt deze driver de PnP ondersteuning van de kernel.
Lukt dat echter niet of heb je een kernel die nog geen PnP ondersteunt, dan doen we dit met de hand. Ik weet niet of er distributies zijn die dit automatisch doen. Maar voor wie het zelf wil proberen, daar gaan we!
- Installeer het pakketje
isapnptools
. Dit zit bij elke distributie. - Geef het commando:
- Dit bestand geeft weer welke ISA Plug and Play kaarten er op je computer zijn. Open het bestand in een editor:
- Zoek iets wat lijkt op:
- Kies nu alle instellingen van het eerste blokje door de commentaartekens (#) ervoor weg te halen. Nu ziet dat er alsvolgt uit:
- Scroll nu door naar het eind van de sectie Audio, door de `priority acceptable' stukjes over te slaan. Je ziet dan:
- Haal het hekje voor
(ACT Y)
weg: - Scroll weer wat verder door naar de sectie WaveTable:
- Het heeft mij veel zoekwerk gekost waarom de wavetable desondanks niet werkte. Het blijkt dat pnpdump een paar poorten over het hoofd ziet. Dit staat ook in de README's die de driver begeleiden, maar goed, hier komen ze! Voeg hier zelf twee regels toe:
- Scroll naar het eind van deze sectie (slechts een paar regels), waar je ziet:
- Haal hier ook weer het hekje voor
(ACT Y)
weg: - Klaar! Sla het bestand weer op met Ctrl+X, Y en geef enter om de filenaam
/etc/isapnp.conf
te bevestigen. - Nu moeten we ervoor zorgen dat
/etc/isapnp.conf
bij het opstarten wordt gelezen. Bij SuSE en wellicht de meeste andere distributies is dit reeds in de opstartsequentie opgenomen. Start de computer opnieuw en je ziet iets als `Initializing PnP devices' voorbij komen. Is dit niet het geval, zet dan het commando: - Geef dit commando ook nu om de installatie van de geluidskaart te testen.
# pnpdump > /etc/isapnp.conf
# pico /etc/isapnp.conf
# Card 1: (serial identifier 0d 00 02 11 f2 43 00 8c 0e) # Vendor Id CTL0043, Serial Number 135666, checksum 0x0D. # Version 1.0, Vendor version 1.0 # ANSI string -->Creative SB AWE32 PnP<--
De hekjes zijn commentaar-tekens. De kaart bevat meerdere `logical devices'. Bijvoorbeeld mijn AWE kaart heeft ook nog een IDE harddisk controller aan boord. Bij elke logical device kunnen interrupts etc. op verschillende manieren verdeeld worden. In het bestand staan deze mogelijkheden op een rijtje. Ook wordt aangegeven welke oplossing de voorkeur verdient (`priority preferred').
Scroll iets naar beneden tot je ziet:
(CONFIGURE CTL0043/135666 (LD 0 # ANSI string -->Audio<-- # Multiple choice time, choose one only ! # Start dependent functions: priority preferred
Dit is het audiogedeelte van de kaart.
# Multiple choice time, choose one only ! # Start dependent functions: priority preferred # IRQ 5. # High true, edge sensitive interrupt (by default) (INT 0 (IRQ 5 (MODE +E))) # First DMA channel 1. # 8 bit DMA only # Logical device is not a bus master # DMA may execute in count by byte mode # DMA may not execute in count by word mode # DMA channel speed in compatible mode (DMA 0 (CHANNEL 1)) # Next DMA channel 5. # 16 bit DMA only # Logical device is not a bus master # DMA may not execute in count by byte mode # DMA may execute in count by word mode # DMA channel speed in compatible mode (DMA 1 (CHANNEL 5)) # Logical device decodes 16 bit IO address lines # Minimum IO base address 0x0220 # Maximum IO base address 0x0220 # IO base alignment 1 bytes # Number of IO addresses required: 16 (IO 0 (SIZE 16) (BASE 0x0220)) # Logical device decodes 16 bit IO address lines # Minimum IO base address 0x0330 # Maximum IO base address 0x0330 # IO base alignment 1 bytes # Number of IO addresses required: 2 (IO 1 (SIZE 2) (BASE 0x0330)) # Logical device decodes 16 bit IO address lines # Minimum IO base address 0x0388 # Maximum IO base address 0x0388 # IO base alignment 1 bytes # Number of IO addresses required: 4 (IO 2 (SIZE 4) (BASE 0x0388))
# End dependent functions (NAME "CTL0043/135666[0]{Audio }") # (ACT Y) ))
# End dependent functions (NAME "CTL0043/135666[0]{Audio }") (ACT Y) ))
Hiermee hebben we het Audio gedeelte geïnitialiseerd.
(CONFIGURE CTL0043/135666 (LD 2 # ANSI string -->WaveTable<-- # Multiple choice time, choose one only ! # Start dependent functions: priority preferred
Hier begint weer de voorkeursinstelling van pnpdump. Kies deze instelling door het hekje weg te halen:
# Start dependent functions: priority preferred # Logical device decodes 16 bit IO address lines # Minimum IO base address 0x0620 # Maximum IO base address 0x0620 # IO base alignment 1 bytes # Number of IO addresses required: 4 (IO 0 (SIZE 4) (BASE 0x0620))
(IO 1 (BASE 0x0A20)) (IO 2 (BASE 0x0E20))
# End dependent functions (NAME "CTL0043/135666[2]{WaveTable }") # (ACT Y) ))
# End dependent functions (NAME "CTL0043/135666[2]{WaveTable }") (ACT Y) ))
isapnp /etc/isapnp.conf
in /sbin/init.d/boot.local
(of /etc/rc.d/boot.local
of welk
bestand jouw computer maar uitvoert bij het opstarten).
De geluidskaart wordt nu telkens bij het opstarten netjes geïnitialiseerd.
Tip: bij mijn SuSE-bak rolde er een hoop rommel over het scherm, geproduceerd
door isapnp. Haal dit weg door in /sbin/init.d/boot
de aanroep van
isapnp een beetje te veranderen:
/sbin/isapnp /etc/isapnp.conf >/var/log/isapnp.log 2>&1
De gegevens worden wel bewaard. Wil je dat niet dan is /dev/null
een
aardig alternatief.
/etc/conf.modules
Bij kernel 2.2 en hoger is /etc/conf.modules
een heel belangrijk en
slim bestand. Het bepaalt precies welke devices welke kernelmodules oproepen,
en welke opties die modules meekrijgen. Ook kan je ervoor zorgen dat een
bepaalde module bij het laden altijd andere modules meeneemt.
Heb je een 2.0 kernel, dan is de sound driver één monolithische
driver met de naam sound.o
. Je hoeft dan in /etc/conf.modules
in principe niets toe te voegen.
In /etc/conf.modules
zit wellicht een sectie voor de Soundblaster. Die
gaan we bewerken. Hier staat een goed voorbeeld (lees: mijn werkende
configuratie):
#alias char-major-14 off #alias sound off #alias midi off
Deze moeten dus, zoals hier, met behulp van hekjes uitgeschakeld zijn als je de kernel drivers wil gebruiken. En even verderop:
#***************************************************************************** # module : sb.o Soundblaster 16, SB Pro + Clones # Also needed for AWE32/64 # # Dcoumentation available in /usr/src/linux/Documentation/sound/Soundblaster # and in /usr/src/linux/drivers/sound/sb.c . # # Possible configuration : # alias char-major-14 sb post-install sb /sbin/modprobe -a -k awe_wave opl3 options sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x330 options opl3 io=0x388
Uitleg:
-
alias char-major-14 sb
betekent dat de modulesb.o
(soundblaster) wordt geladen zogauw er een device met major number 14 (zie bijvoorbeeldls -l /dev/audio
) wordt geopend. -
post-install sb /sbin/modprobe -a -k awe_wave opl3
betekent dat wanneer de module sb geladen is, het commando/sbin/modprobe ...
moet worden uitgevoerd. -
/sbin/modprobe -a -k awe_wave opl3
betekent dat de modules awe_wave en opl3 moeten worden geladen (allemaal =-a
) en dat ze `autoclean' (=-k
) zijn, dat wil zeggen ze mogen weer worden weggegooid als ze niet meer nodig zijn. -
De regel
options sb ...
moet exact overeenkomen met wat er in isapnp.conf is ingesteld. Bij mij stond hierirq=7
en dat moest 5 zijn! -
De regel
options opl3
moet precies zo worden overgenomen, anders moppert de module opl3. (Kernel meldingen zijn te zien met Ctrl+Alt+F10)
In /usr/src/linux/Documentation/sound/AWE32
staat nog meer informatie
over andere variaties. Daar wordt dit voorbeeld gegeven:
alias midi awe_wave post-install awe_wave /usr/bin/sfxload /usr/synthfm.sbk options sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x330
waarmee de awe_wave module zelf wordt geladen als we midi af willen spelen.
Automatisch worden dan ook de soundfonts geladen (sfxload
). Verwerf
inzicht en experimenteer om de voor jou gunstigste instellingen te krijgen!
ff testen...
Geef het commando:
# cat /dev/sndstat
Je moet nu iets zien als:
wilbert@nutnix:~ > cat /dev/sndstat OSS/Free:3.8s2++-971130 Load type: Driver loaded as a module Kernel: Linux nutnix 2.2.13 #2 Tue May 23 00:42:09 CEST 2000 i586 Config options: 0 Installed drivers: Card config: Audio devices: 0: Sound Blaster 16 (4.13) (DUPLEX) Synth devices: 0: AWE32-0.4.3 (RAM512k) 1: Yamaha OPL3 Midi devices: 0: Sound Blaster 16 1: AWE Midi Emu Timers: 0: System clock Mixers: 0: Sound Blaster 1: AWE32 Equalizer
Let er vooral op of de AWE Synth verschijnt en de AWE Midi. Anders werkt de kaart slechts als een SoundBlaster 16.
Speel een liedje af:
cat MySong.au > /dev/audio
Als het goed is moet je nu iets horen. Met programmaatjes als smix
of
xmix
kun je het volume instellen. Als het niet werkt:
- Ik zie geen OPL3 bij de Synth sectie in
/dev/sndstat
. - De module
opl3.o
wordt niet geladen. Kijk in/etc/conf.modules
- De module
opl3.o
werd niet gecompileerd (als je de kernel zelf compileerde). Schakel in de kernel-configuratie Support voor OPL3 in. - De AWE Equalizer verschijnt niet in
/dev/sndstat
. - Bij de meeste kernel sources wordt de AWE Equalizer niet standaard
geactiveerd. Waarschijnlijk zul je in
drivers/sound/lowlevel/awe_config.h
een kleine wijziging moeten aanbrengen. Zie de afdeling Kernel Driver. - Ik heb 2MB geheugen op mijn AWE32, maar hij ziet er maar 512K van (zeldzaam).
- Bij 2.1 kernel of hoger, zet
options awe_wave memsize=2048
in je/etc/conf.modules
- Bij 2.0 kernels: zet in bovengenoemd
awe_config.h
de variabeleAWE_DEFAULT_MEM_SIZE
op 2048 en compileer de modules nog eens (make modules && make modules_install
). - ...
Soundfont utils (awesfx) installeren
- Download ze van http://members.tripod.de/iwai/awedrv.html. Versie 0.4.3c is de nieuwste. Je kunt RPMS krijgen voor SuSE6.1, maar die zullen ook onder de meeste andere distributies goed werken.
- Installeer ze:
- RPM:
# rpm -i awesfx-0.4.3c-1.i386.rpm
- Source:
- Lees de readme's het installeren gaat prima, maar de instructies in de README's zijn erg belangrijk. Installeer in elk geval awesfx en awemidi allebei met shared libs. Installeer eerst awesfx.
- Installeer een soundfont bank. Jat hem van je oude Dos-partitie! Hij heet
synthgm.sbk
. Als je van source installeerde, zet hem dan in/usr/local/lib/sfbank
, deed je RPM, dan moet hij in/usr/lib/sfbank
. - Nu kun je met
sfxload synthgm
de soundfont bank laden. Het is echter veel leuker om dat dynamisch te doen. Namelijk, als je MOD-files of andere tracker-files afspeelt, worden de sample buffers op je AWE32 weer gewist en klinkt de midi weer verschrikkelijk. Met de midi-spelerdrvmidi
kan dat laden van die soundfont bank achterwege blijven; dat gaat dan automatisch zogauw je een midi file af wilt spelen.
Midi speler (drvmidi) installeren
Ook die moet je van bovengenoemde URL downloaden. Installeren op dezelfde
manier. Lees man drvmidi
. Met: drvmidi -mp file.midi
kun je
nu een file afspelen. Het afspelen wordt gelijk gestart. Doe je: drvmidi
-mpq file.midi
, dan wordt het programma weer netjes beëindigd als het
afspelen klaar is.
Je kunt in het programma instellen dat de soundfont bank dynamisch moet worden
geladen. Kies: File -> Edit Options -> Edit Default -> Advanced en
geef daar onder `Dynamic Font Loading' de naam van je soundfont bank op
(synthgm
).
Download ook de Netscape Midi-plugin om achtergrond Midi files te kunnen horen. Experimenteer en veel plezier!
© 2002 Wilbert Berendsen. Deze tekst is beschikbaar onder de GNU Free Documentation License.Eerste versie: april 2000
Laatste update: Fri Jun 09 14:27:22 CEST 2000