Amarok/Archives/Amarok 1.4/User Guide/Setting up Dmix for ALSA

From KDE Community Wiki

Setting Up DMix For Alsa

Below, you'll find an example configuration file, which will enable the Dmix plugin on your system.

  • Note that the instructions below are only necessary if the built-in dmix plugin distributed with alsa-lib (libasound2 on Debian-based systems) does not work! You can access this built-in, predefined dmix plugin by using "plug:dmix" as the virtual ALSA device.
  • Note also that "For ALSA 1.0.9rc2 and higher you don't need to setup dmix. Dmix is enabled as default for soundcards which don't support hw mixing." -- alsa wiki. so the simplest solution may be to remove all old configuration files and reinstall alsa (kernel modules might require a restart if it doesn't work initially). If you are running a recent version of alsa, and you can't get more than one sound at a time with the default configurations, THIS IS A BUG.

You can save the configuration file either in ~/.asoundrc (only affects your user) or in /etc/asound.conf (whole system). After editing these files, you need only to restart the ALSA application(s).

1pcm.ossmix {
   type dmix
   ipc_key 1024
   slave {
       pcm "hw:0,0"            # make sure this matches the actual device
       #period_time 0          # not necessary since ALSA 1.0pre
       period_size 1024        # Use a power of 2
       buffer_size 4096        # must be a multiple of period_size
       #rate 44100             # not necessary; let alsa-lib handle this
   }
   bindings {
       0 0
       1 1                     # bind only the first 2 channels
   }
}
pcm.duplex
{
   type asym
   playback.pcm "ossmix"
   capture.pcm "dsnoop"
}
# Everything shall be dmixed, so redefine "default":
# Note that this is _not_ a good idea, since dmix doesn't allow mmap access currently
#pcm.!default {
#   type plug
#   slave.pcm "duplex"
#}
# OSS via aoss should d(mix)stroyed:
pcm.dsp0 {
   type plug
   slave.pcm "duplex"
}
ctl.ossmix {
   type hw
   card 0
}

To test if dmix is working, you can run two or three instances of "alsaplayer" (or any other ALSA application, like amaroK) at the same time:

1alsaplayer -o alsa -d plug:ossmix some.mp3 

or

1aplay -D plug:ossmix some.mp3

If you get skipping in your applications when doing processor-intensive tasks, such as compiling or using OpenGL visualizations, increasing buffer_size in ~/.asoundrc can help. It should be increased by a power of 2, e.g.:

1pcm.ossmix {
   type dmix
   ipc_key 1024
   slave {
       pcm "hw:0,0"
       #period_time 0
       period_size 1024
       buffer_size 16384        # buffer size = 4096 x 2 x 2
       #rate 44100
   }
   bindings {
       0 0
       1 1
   }
}