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:

  1. Installeer de kernel sources. Bij SuSE heet dat pakje lx_suse, categorie Development.
  2. Log als root in onder X.
  3. Geef in een terminal in (# is de prompt):
  4. # cd /usr/src/linux
    # make xconfig
    
  5. Na enige tijd verschijnt een window met kernel opties. Kies Sound.
  6. 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.
  7. Stel eventueel andere wensen in (het loont de moeite je hierin een beetje te verdiepen) en verlaat de configuratie-utility met `Save en Quit.'
  8. Standaard staat de EMU8000 Equalizer uit, die kun je aanzetten door het bestand ./drivers/sound/lowlevel/awe_config.h te bewerken:
  9. # 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.

  10. Nu compileren we de kernel. Geef het commando:
  11. # make dep clean bzImage
    
  12. 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:
  13. # 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
    
  14. Als je lilo gebruikt, run dan lilo:
  15. # lilo
    
  16. Maak nu de modules en installeer die:
  17. # 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!

  1. Installeer het pakketje isapnptools. Dit zit bij elke distributie.
  2. Geef het commando:
  3. # pnpdump > /etc/isapnp.conf
    
  4. Dit bestand geeft weer welke ISA Plug and Play kaarten er op je computer zijn. Open het bestand in een editor:
  5. # pico /etc/isapnp.conf
    
  6. Zoek iets wat lijkt op:
  7. # 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.

  8. Kies nu alle instellingen van het eerste blokje door de commentaartekens (#) ervoor weg te halen. Nu ziet dat er alsvolgt uit:
  9. # 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))
    
  10. Scroll nu door naar het eind van de sectie Audio, door de `priority acceptable' stukjes over te slaan. Je ziet dan:
  11. #     End dependent functions
     (NAME "CTL0043/135666[0]{Audio               }")
    # (ACT Y)
    ))
    
  12. Haal het hekje voor (ACT Y) weg:
  13. #     End dependent functions
     (NAME "CTL0043/135666[0]{Audio               }")
     (ACT Y)
    ))
    

    Hiermee hebben we het Audio gedeelte geïnitialiseerd.

  14. Scroll weer wat verder door naar de sectie WaveTable:
  15. (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))
    
  16. 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:
  17.  (IO 1 (BASE 0x0A20))
     (IO 2 (BASE 0x0E20))
    
  18. Scroll naar het eind van deze sectie (slechts een paar regels), waar je ziet:
  19. #     End dependent functions
     (NAME "CTL0043/135666[2]{WaveTable           }")
    # (ACT Y)
    ))
    
  20. Haal hier ook weer het hekje voor (ACT Y) weg:
  21. #     End dependent functions
     (NAME "CTL0043/135666[2]{WaveTable           }")
     (ACT Y)
    ))
    
  22. Klaar! Sla het bestand weer op met Ctrl+X, Y en geef enter om de filenaam /etc/isapnp.conf te bevestigen.
  23. 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:
  24. 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).

  25. Geef dit commando ook nu om de installatie van de geluidskaart te testen.

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:

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:

Soundfont utils (awesfx) installeren

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