	Installing and using Creative AWE midi sound under Linux.

This documentation is devoted to the Creative Sound Blaster AWE32, AWE64 and 
SB32.

1) Make sure you have an ORIGINAL Creative SB32, AWE32 or AWE64 card. This
   is important, because the driver works only with real Creative cards.

2) The first thing you need to do is re-compile your kernel with support for
   your sound card. Run your favourite tool to configure the kernel and when
   you get to the "Sound" menu you should enable support for the following:

   Sound card support,
   OSS sound modules,
   100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support,
   AWE32 synth

   If your card is "Plug and Play" you will also need to enable these two
   options, found under the "Plug and Play configuration" menu:

   Plug and Play support
   ISA Plug and Play support

   Now compile and install the kernel in normal fashion. If you don't know
   how to do this you can find instructions for this in the README file
   located in the root directory of the kernel source.

3) Before you can start playing midi files you will have to load a sound
   bank file. The utility needed for doing this is called "sfxload", and it
   is one of the utilities found in a package called "awesfx". If this
   package is not available in your distribution you can download the AWE
   snapshot from Creative Labs Open Source website:

   http://www.opensource.creative.com/snapshot.html

   Once you have unpacked the AWE snapshot you will see a "awesfx"
   directory. Follow the instructions in awesfx/docs/INSTALL to install the
   utilities in this package. After doing this, sfxload should be installed
   as:

   /usr/local/bin/sfxload

   To enable AWE general midi synthesis you should also get the sound bank
   file for general midi from:

   http://members.xoom.com/yar/synthgm.sbk.gz

   Copy it to a directory of your choice, and unpack it there.

4) Edit /etc/modprobe.conf, and insert the following lines at the end of the
   file:

  alias sound-slot-0 sb
  alias sound-service-0-1 awe_wave
  install awe_wave /sbin/modprobe --first-time -i awe_wave && /usr/local/bin/sfxload PATH_TO_SOUND_BANK_FILE

  You will of course have to change "PATH_TO_SOUND_BANK_FILE" to the full
  path of of the sound bank file. That will enable the Sound Blaster and AWE
  wave synthesis. To play midi files you should get one of these programs if
  you don't already have them:

  Playmidi:			http://playmidi.openprojects.net

  AWEMidi Player (drvmidi)  	Included in the previously mentioned AWE
  				snapshot.

  You will probably have to pass the "-e" switch to playmidi to have it use
  your midi device. drvmidi should work without switches.

  If something goes wrong please e-mail me. All comments and suggestions are
  welcome.

		    Yaroslav Rosomakho (alons55@dialup.ptt.ru)
			    http://www.yar.opennet.ru

Last Updated: Feb 3 2001
