Subject: Linux Sound HOWTO
From: [email-masked] (Jess Tranter)
Date: Mon, 25 Apr 1994 19:59:31 GMT
Newsgroups: comp.os.linux.announce,comp.os.linux.help

Archive-name: linux/howto/sound
Last-modified: 19 Apr 94

  The Linux Sound HOWTO
  Jeff Tranter, [email-masked]
  v1.3, 18 April 1994

  This  document  describes  sound  support for Linux. It lists the sup-
  ported sound hardware, describes how to configure the kernel  drivers,
  and  answers  frequently  asked  questions. The intent is to bring new
  users up to speed more quickly and reduce the amount of traffic in the
  usenet news groups.

  1.  Introduction

  This  HOWTO  document  describes  sound  support  for  Linux -- how to
  configure the kernel, what applications run under Linux  that  support
  sound,  and  answers  to frequently asked questions about sound cards.
  The intent is to bring new users up to speed more quickly  and  reduce
  the amount of traffic in the usenet news groups.

  The  scope  is  limited  to  the  aspects of sound cards pertaining to
  Linux. See  the  other  documents  listed  in  the  Other  Sources  of
  Information section for more general information on sound cards.

  1.1.  Acknowledgments

  Much  of this information came from the Readme files provided with the
  sound driver source code, by Hannu  Savolainen  ([email-masked]).
  Thanks  go  to Hannu and the many other people who developed the Linux
  kernel sound drivers and utilities.

  Thanks to Matt  Welsh's  Linuxdoc-SGML  package,  this  HOWTO  is  now
  available in several formats, all generated from a common source file.

  1.2.  Revision History

     Version 1.1
        first version; posted to SOUND channel of Linux activists  mail-
        ing list only

     Version 1.2
        minor updates; first version available on archive sites

     Version 1.3
        converted  to SGML ; now available in several formats using Matt
        Welsh's Linuxdoc-SGML tools; appearance changed due to new  for-
        mat, only minor changes to content

  1.3.  New versions of this document

  New   versions  of  this  document  will  be  periodically  posted  to
  comp.os.linux.announce. They will also  be  uploaded  to  the  various
  anonymous   ftp   sites   that   archive  such  information  including
  sunsite.unc.edu:/pub/Linux/docs/HOWTO.

  1.4.  Feedback

  If you have and suggestions, corrections, or comments  on  the  HOWTO,
  please  send  them to the author and I will try to incorporate them in
  the next release.

  1.5.  Other Sources of Information

  The Linux Sound User's Guide covers all of the user visible aspects of
  using  sound under Linux in much more detail (approximately 40 pages).
  If you are interested in sound under Linux you should  definitely  get
  this  document.  The current version is ALPHA 0.1, and is available on
  tsx-11.mit.edu in the directory /pub/linux/ALPHA/LDP. I will  continue
  to  maintain the Sound-HOWTO as a concise guide for user's who want to
  get sound up and running, or just find out what is  required,  without
  having to read the full user's guide.

  Hannu  Savolainen has written a draft version of the Hacker's Guide to
  VoxWare.  The  latest  version  is  draft  2,  and  can  be  found  on
  nic.funet.fi in /pub/OS/linux/ALPHA/sound.

  The  following  FAQs  are  regularly  posted  to  the usenet newsgroup
  news.announce as well as being archived at the  site  rtfm.mit.edu  in
  the directory /pub/usenet/news.answers:

  PCsoundcards/generic-faq (Generic PC Soundcard FAQ)
  PCsoundcards/soundcard-faq (comp.sys.ibm.pc.soundcard FAQ)
  PCsoundcards/gravis-ultrasound/faq (Gravis UltraSound FAQ)
  audio-fmts/part1 (Audio file format descriptions)
  audio-fmts/part2 (Audio file format descriptions)

  The  FAQs also list several product specific mailing lists and archive
  sites. The following Usenet news groups  discuss  sound  and/or  music
  related issues:

  alt.binaries.sounds.misc (Digitized sounds and software)
  alt.binaries.sounds.d (Discussion and follow-up group)
  alt.binaries.multimedia (Multimedia sounds and software)
  alt.sb.programmer (Soundblaster programming topics)
  comp.multimedia (Multimedia topics)
  comp.music (Computer music theory and research)
  comp.sys.ibm.pc.soundcard (IBM PC soundcard topics)

  The  Linux Activists mailing list has a SOUND channel. To find out how
  to  join   the   mailing   list,   send   mail   to   linux-activists-
  [email-masked].

  The  Readme  and CHANGELOG files included with the kernel sound driver
  source code contain useful information about the sound  card  drivers.
  These     can     typically     be     found    in    the    directory
  /usr/src/linux/drivers/sound.

  The Linux Software Map (LSM) is an invaluable reference  for  locating
  Linux software. Searching the LSM for keywords such as sound is a good
  way to identify applications related to sound hardware. The LSM can be
  found     on     various     anonymous     FTP     sites,    including
  sunsite.unc.edu:/pub/Linux/docs/LSM.gz.

  1.6.  Version Information

  At time of writing, the latest Linux sound driver was version 2.4, and
  was  included as part of the Linux kernel version 0.99 ALPHA-pl14t and
  later. The 2.5 version of the sound driver was in BETA  test  and  was
  available separately.

  2.  Supported Sound Hardware

  2.1.  Sound Cards

  The following sound cards are supported by the Linux kernel:

  o  Roland MPU-401 MIDI interface

  o  AdLib

  o  SoundBlaster   (version   1   and  2)  and  compatibles,  including
     ThunderBoard and ATI Stereo F/X

  o  SoundBlaster Pro (version 1 and 2)

  o  SoundBlaster 16

  o  ProAudioSpectrum 16 (and the compatible Logitech SoundMan 16)

  o  Advanced Gravis UltraSound (GUS)

  Other sound cards that are claimed to be compatible with  one  of  the
  supported  sound  cards  may  work if they are hardware (i.e. register
  level) compatible.

  The Sound Galaxy NX Pro is supported  as  a  SoundBlaster  compatible,
  provided  that you add #define __SGNXPRO__ to the sound driver local.h
  file.

  The Linux kernel supports the SCSI port provided on some  sound  cards
  (e.g.  ProAudioSpectrum  16).  The  Linux kernel version 0.99pl14x and
  later has support for CD-ROM drives attached to the  Soundblaster  Pro
  and  SoundBlaster  16  CD-ROM  port.  The drivers can also be added to
  earlier kernels as a patch. Check the Linux Software Map for sbpcd.

  A Kernel patch to support joystick ports, including those provided  on
  some sound cards, is also available.

  2.2.  PC Speaker

  An  alternate  sound  driver  is available that requires no additional
  sound hardware; it uses the internal PC speaker. It is mostly software
  compatible  with  the  sound  card  driver,  but, as you might expect,
  provides much lower quality output and has much more CPU overhead. The
  results  seem  to  vary, being dependent on the characteristics of the
  loudspeaker. For more information, see the documentation provided with
  the release.

  The   current   version   is   0.4,   and   can   be   found  at  site
  ftp.informatik.hu-berlin.de    in    the     file     pub/os/linux/hu-
  sound/pcsndrv-0.4.tar.z.

  2.3.  Parallel Port

  Another  option  is  to  build  a  digital to analog converter using a
  parallel printer port. This provides better sound  quality  but  still
  has a lot of CPU overhead. The PC sound driver package mentioned above
  supports this, and includes instructions for  building  the  necessary
  hardware.

  3.  Configuring Linux for Sound Support

  Configuring Linux to support sound involves the following steps:

  1. Installing the sound card.

  2. Configuring and building the kernel for sound support.

  3. Creating the device files.

  4. Testing the installation.

  3.1.  Installing the Sound Card

  Follow the instructions provided with your sound card. Be sure to note
  down the jumper settings for IRQ,  DMA  channel,  etc...  If  you  are
  unsure,  use  the  factory defaults. Try to avoid conflicts with other
  devices (e.g. ethernet cards, SCSI host adaptors) if possible.

  3.2.  Configuring the Kernel

  If you are using a  recent  kernel  (0.99pl14  or  later),  the  sound
  drivers  are  included  with  the  kernel  release.  Follow  the usual
  procedure for building  the  kernel.  When  you  run  make  config,  a
  configuration program will ask you what sound card options you want.

  If  you  are  upgrading from an older sound driver, make sure that the
  files /usr/include/sys/soundcard.h  and  /usr/include/sys/ultrasound.h
  are symbolic links to the corresponding files in /usr/include/linux.

  It's  good  idea  to read the Readme files in the kernel drivers/sound
  directory since there could be some last minute information. The  file
  CHANGELOG  contains  a list of enhancements and new features since the
  previous version.

  3.3.  Creating the Device Files

  The first time the kernel sound driver  is  configured,  you  need  to
  create  the  sound  device files. The easiest way to do this is to cut
  the   short   shell   script   from    the    end    of    the    file
  /usr/src/linux/drivers/sound/Readme.linux         (or         possibly
  /usr/src/linux/drivers/sound/linux/Readme), and run it as root.

  3.4.  Testing the Installation

  You can now follow these  steps  to  verify  the  sound  hardware  and
  software:

  1. Reboot with the new kernel.

  Follow  your  usual  procedure  for  installing  and rebooting the new
  kernel (keep the old kernel around in case of problems, of course).

  2.  Verify  that  the  sound  card   is   recognized   during   kernel
  initialization.

  Check for a message such as the following on powerup:

       ______________________________________________________________________
       <6>snd2 <SoundBlaster Pro 3.2> at 0x220 irq 5 drq 1
       <6>snd1 <Yamaha OPL-3 FM> at 0x388 irq 0 drq 0
       ______________________________________________________________________

  This should match your sound card type and jumper settings.

  The  driver  may  also display some error messages and warnings during
  boot. Watch for these when booting the first  time  after  configuring
  the sound driver.

  If  no  sound  card  is  detected when booting, there are two possible
  reasons:

  o  The configuration of the driver is incorrect and the driver was not
     able to detect your card in the given I/O address, or

  o  The  sound  driver was configured to be inactive or you booted with
     an old kernel (a common error).

  3. Check device file /dev/sndstat.

  Reading the sound driver status device file should provide  additional
  information  on  whether  the  sound card driver initialized properly.
  Sample output should look something like this:

  ______________________________________________________________________
  % cat /dev/sndstat

  Sound Driver:2.3b (Tue Jan 4 18:14:00 EST 1994 root@fizzbin.)
  Config options: 1aa2

  HW config:
  Type 2: SoundBlaster at 0x220 irq 5 drq 1
  Type 1: AdLib at 0x388 irq 0 drq 0

  PCM devices:
  0: SoundBlaster Pro 3.2

  Synth devices:
  0: Yamaha OPL-3

  Midi devices:
  0: SoundBlaster

  Mixer(s) installed
  ______________________________________________________________________

  If the cat command displays "No such device", the sound driver is  not
  active in the kernel.

  If  the  printout  contains  no  devices  (PCM,  Synth  or MIDI), your
  soundcard was not  detected.  Verify  that  the  "HW  config"  section
  contains correct information.

  4. Play a simple sound file.

  Get  hold of a sample sound file, and send it to the sound device as a
  basic check of sound output, e.g.

       ______________________________________________________________________
       % cat endoftheworld >/dev/dsp
       % cat crash.au >/dev/audio
       ______________________________________________________________________

  Some  sample  sound  files  can  be  obtained  from  the   file   snd-
  data-0.1.tar.Z.

  5. Verify sound recording.

  If  you  have  sound input capability, you can do a quick test of this
  using commands such as the following:

       ______________________________________________________________________
       # record 4 seconds of audio from microphone
       % dd bs=8k count=4 </dev/audio >sample.au
       # play back sound
       % cat sample.au >/dev/audio
       ______________________________________________________________________

  If these tests pass, you can be reasonably confident  that  the  sound
  hardware  and  software  are working. If you experience problems, read
  the FAQ section of this document.

  4.  Applications Supporting Sound

  Because The Linux Sound User's Guide  describes  the  available  Linux
  applications in detail, I will only give here a sample of the types of
  applications that you likely want if  you  have  a  sound  card  under
  Linux.

  As  a  minimum,  you  will  likely  want to obtain the following sound
  applications:

  o  audio file format conversion utility (e.g. Sox)

  o  input mixer (e.g. xmix)

  o  digitized file player/recorder (e.g. play)

  o  MOD file player (e.g. tracker)

  o  MIDI file player (e.g. mp)

  There are text-based as well as GUI-based versions of  most  of  these
  tools.  There  are  also  some more esoteric applications (e.g. speech
  synthesis) that you may wish to try.

  5.  Answers To Frequently Asked Questions

  This section answers some of the questions  that  have  been  commonly
  asked on the Usenet news groups and mailing list.

  5.1.  What are the various sound device files?

     audio
        Sun  workstation  compatible audio device (only a partial imple-
        mentation, does not support  Sun  ioctl  interface,  just  u-law
        encoding)

     dsp
        digital sampling device

     mixer
        sound mixer

     sequencer
        MIDI, FM, and GUS access

     midi
        MIDI device (not yet implemented in current sound driver)

     sndstat
        displays sound driver status when read

     audio1
        for second sound card

     dsp1
        for second sound card

  The PC speaker driver provides the following devices:

     pcaudio
        equivalent to /dev/audio

     pcsp
        equivalent to /dev/dsp

     pcmixer
        equivalent to /dev/mixer

  5.2.  How can I play a sound sample?

  Sun workstation (.au) sound files can be played by sending them to the
  /dev/audio device. Raw samples  can  be  send  to  /dev/dsp.  Using  a
  program  such  as  play  is preferable, as it will recognize most file
  types and set the sound card to the correct sampling rate, etc..

  5.3.  How can I record a sample?

  Reading /dev/audio or /dev/dsp will return sampled data  that  can  be
  redirected  to  a  file.  A  program  such  as vrec makes it easier to
  control the sampling rate, duration, etc...

  5.4.  Can I have more than one sound card?

  Up to two sound cards is supported. It's possible to install a  Gravis
  UltraSound   or   MPU-401   with  a  SoundBlaster,  SoundBlaster  Pro,
  SoundBlaster16 or ProAudioSpectrum16. It's  not  possible  to  have  a
  ProAudioSpectrum16  and  SoundBlaster at the same time (PAS16 has a SB
  emulator in it). It's also not possible to have more than one card  of
  the same type at the same time -- for example, a GUS + GUS combination
  is not possible.

  You can change the sound card configuration parameters  at  boot  time
  using  command  line  options from a boot loader such as LILO. See the
  kernel sound driver file Readme.linux for details.

  5.5.  Error: No such file or directory for sound devices

  You need to create the sound driver device files. See the  section  on
  creating device files.

  5.6.  Error: No such device for sound devices

  You  have  not booted with a kernel containing the sound driver or the
  I/O address configuration doesn't match your hardware.

  5.7.  Partial playback of digitized sound file

  The symptom is usually that a sound sample plays for a second and then
  stops  completely or reports an error message about missing IRQ or DMA
  timeout. Most likely you have incorrect IRQ or DMA  channel  settings.
  Verify  that  the  kernel  configuration matches the sound card jumper
  settings and that they do not conflict with some other card.

  5.8.  There are pauses when playing MOD files

  Playing MOD files requires considerable CPU power. You  may  have  too
  many  processes  running  or  your computer may be too slow to play in
  real time. Your options are to:

  o  try playing with a lower sampling rate or in mono mode

  o  eliminate other processes

  o  buy a faster computer

  o  buy a more powerful sound card (e.g. Gravis UltraSound)

  5.9.  Compile errors when compiling sound applications

  The version 1.0c  and  earlier  sound  driver  used  a  different  and
  incompatible  ioctl()  scheme.  Obtain  newer  source code or make the
  necessary changes to adapt it to the new sound driver. See  the  sound
  driver Readme file for details.

  Also  ensure  that you have used the latest version of soundcard.h and
  ultrasound.h when compiling  the  application.  See  the  installation
  instructions at beginning of this text.

  5.10.  SEGV when running sound binaries that worked previously

  This is probably the same problem described in the previous  question.

  5.11.  What known bugs or limitations are there in the sound driver?

  See the Readme and CHANGELOG files  included  with  the  sound  driver
  kernel source.

  5.12.  What version of the sound driver I should use?

  If  you  are  using  version  1.0c  or earlier, you definitely need to
  upgrade. Version 1.0c is not compatible with the applications  written
  for version 2.0 or later.

  There  have  been  no significant changes after version 2.0, so if you
  don't  have  problems  and  that  particular  version  fulfills   your
  requirements, there are no compelling reasons to move to a more recent
  version (this should be true at least until September 1994).

  The  latest  official  version  is  in   the   latest   Linux   kernel
  distribution. There may also be some test and prototype versions lying
  around. If the version number is smaller than 2.9, the version  should
  be  quite safe. Any driver release having a version number of the form
  2.99.XX is an incompletely implemented and experimental test  release.

  If  you  are  interested  in development of the sound driver, join the
  linux activists SOUND channel.

  5.13.  What do all the sound driver configuration options mean?

  During  configuration  of  the  sound  driver,  a configure program is
  compiled and executed. This program asks you some questions  and  then
  generates  the  header  file  local.h  that  defines  the  sound  card
  configuration.

  The configuration file defines (or undefines) the following symbols:

  Symbol                  Meaning
  ======                  =======
  KERNEL_SOUNDCARD        enable/disable sound driver
  CONFIGURE_SOUNDCARD     enable/disable sound driver
  EXCLUDE_PAS             ProAudioSpectrum support
  EXCLUDE_SB              SoundBlaster support
  EXCLUDE_ADLIB           AdLib support
  EXCLUDE_GUS             Gravis UltraSound support
  EXCLUDE_MPU401          MPU-401 MIDI interface support
  EXCLUDE_SBPRO           SoundBlaster Pro support
  EXCLUDE_SB16            SoundBlaster 16 support
  EXCLUDE_AUDIO           Digitized voice support
  EXCLUDE_MIDI            MIDI interface support
  EXCLUDE_YM3812          FM synthesizer (YM3812/OPL-3) support
  EXCLUDE_SEQUENCER       MIDI sequencer support
  EXCLUDE_PRO_MIDI        SoundBlaster Pro MIDI support
  EXCLUDE_CHIP_MIDI       MIDI on CHIP support
  SBC_IRQ                 SoundBlaster IRQ number
  SBC_DMA                 SoundBlaster DMA channel
  SB16_DMA                SoundBlaster 16 DMA channel
  SB16_MIDI_BASE          base address of SoundBlaster 16 MIDI port
  PAS_IRQ                 ProAudioSpectrum IRQ number
  PAS_DMA                 ProAudioSpectrum DMA channel
  GUS_IRQ                 Gravis UltraSound IRQ number
  GUS_DMA                 Gravis UltraSound DMA channel
  GUS_BASE                base address of Gravis UltraSound
  MPU_IRQ                 MPU-401 IRQ number
  MPU_BASE                base address of MPU-401 port
  DSP_BUFFSIZE            DMA buffer size

  Several other defines are also created, setting  such  things  as  the
  sound  driver  revision level and the time and date when configure was
  run.

  There are other parameters that are not set by the  configure  program
  (e.g.  SoundBlaster  base  address). If you need to change these, edit
  the file sound_config.h.

  To disable the sound driver, run make config and answer  "no"  to  the
  "Sound card support?" question.

  5.14.  What future enhancements are planned for the sound driver?

  The sound driver is not just for Linux, it also supports several other
  Intel-based   Unix  operating  systems.  The  package  is  now  called
  "VoxWare". Some of the enhancements being considered are:

  o  implementing full MIDI support

  o  patch manager support

  o  document sound card driver (Hacker's Guide)

  o  support for new sound cards

  o  miscellaneous bug fixes

  5.15.  Where are the sound driver ioctls() etc... documented?

  These  are  documented  in  the  Hacker's  Guide to VoxWare, currently
  available in draft form. The latest version is draft  2,  and  can  be
  found on nic.funet.fi in /pub/OS/linux/ALPHA/sound.

  5.16.  What CPU resources are needed to play or record without pauses?

  There is no easy answer to this, as it depends on:

  o  whether using PCM sampling or FM synthesis

  o  sampling rate and sample size

  o  which application is used to play or record

  o  Sound Card hardware

  o  disk I/O rate, CPU clock speed, cache size, etc...

  In  general,  any  386  machine  should  be able to play samples or FM
  synthesized music on an 8 bit soundcard with ease.

  Playing MOD files, however, requires considerable CPU resources.  Some
  experimental  measurements  have  shown that playing at 44kHz requires
  more than 40% of the speed of a 486/50 and a 386/25  can  hardly  play
  faster  than  22  kHz.  These  are  with an 8 bit card sound such as a
  SoundBlaster. A card such as the Gravis UltraSound card performs  more
  functions in hardware, and will require less CPU resources.

  These  statements  assume the computer is not performing any other CPU
  intensive tasks.

  Converting sound files or adding effects using a utility such  as  Sox
  is  also much faster if you have a math coprocessor. The kernel driver
  itself does not do any floating point calculations, though.

  5.17.  Problems with a PAS16 and an Adaptec 1542 SCSI host adaptor

  There appears to be an incompatibility problem with these two devices.
  It has not yet been resolved.
  5.18.  Problems with the FM synthesizer on a SoundBlaster Pro 1

  The  newer  SB  Pro has an OPL-3 FM chip, but the older version 1 used
  the OPL-2. The sound driver assumed the presence of an OPL-3.  Version
  2.5  of  the  sound  driver  (currently  in  BETA  test) corrects this
  problem.