Nov 092010
Many thanks to wishie from #alsa, who wrote most of this file!
# 2008-11-15 # # This .asoundrc will allow the following: # # - upmix stereo files to 5.1 speakers. # - playback real 5.1 sounds, on 5.1 speakers, # - allow the playback of both stere(oupmixed) and surround(5.1) sources at the same time. # - use the 6th and 7th channel (side speakers) as a separate soundcard, i.e. for headphones # (This is called the "alternate" output throughout the file, device names prefixed with 'a') # - play mono sources in stereo (like skype & ekiga) on the alterate output # # Make sure you have "8 Channels" and NOT "6 Channels" selected in alsamixer! # # Please try the following commands, to make sure everything is working as it should. # # To test stereo upmix : speaker-test -c2 -Ddefault -twav # To test surround(5.1): speaker-test -c6 -Dplug:dmix6 -twav # To test alternative output: speaker-test -c2 -Daduplex -twav # To test mono upmix: speaker-test -c1 -Dmonoduplex -twav # # # It may not work out of the box for all cards. If it doesnt work for you, read the comments throughout the file. # The basis of this file was written by wishie of #alsa, and then modified with info from various sources by # squisher. #Define the soundcard to use pcm.snd_card { type hw card 0 device 0 } # 8 channel dmix - output whatever audio, to all 8 speakers pcm.dmix8 { type dmix ipc_key 1024 ipc_key_add_uid false ipc_perm 0660 slave { pcm "snd_card" rate 48000 channels 8 period_time 0 period_size 1024 buffer_time 0 buffer_size 5120 } # Some cards, like the "nforce" variants require the following to be uncommented. It routes the audio to t he correct speakers. bindings { 0 0 1 1 2 4 3 5 4 2 5 3 6 6 7 7 } } # upmixing - duplicate stereo data to all 6 channels pcm.ch51dup { type route slave.pcm dmix8 slave.channels 8 ttable.0.0 1 ttable.1.1 1 ttable.0.2 1 ttable.1.3 1 ttable.0.4 0.5 ttable.1.4 0.5 ttable.0.5 0.5 ttable.1.5 0.5 } # this creates a six channel soundcard # and outputs to the eight channel one # i.e. for usage in mplayer I had to define in ~/.mplayer/config: # ao=alsa:device=dmix6 # channels=6 pcm.dmix6 { type route slave.pcm dmix8 slave.channels 8 ttable.0.0 1 ttable.1.1 1 ttable.2.2 1 ttable.3.3 1 ttable.4.4 1 ttable.5.5 1 } # share the microphone, i.e. because virtualbox grabs it by default pcm.microphone { type dsnoop ipc_key 1027 slave { pcm "snd_card" } } # rate conversion, needed i.e. for wine pcm.2chplug { type plug slave.pcm "ch51dup" } pcm.a2chplug { type plug slave.pcm "dmix8" } # routes the channel for the alternative # 2 channel output, which becomes the 7th and 8th channel # on the real soundcard pcm.alt2ch { type route slave.pcm "a2chplug" slave.channels 8 ttable.0.6 1 ttable.1.7 1 } # skype and ekiga are only mono, so route left channel to the right channel # note: this gets routed to the alternative 2 channels pcm.mono_playback { type route slave.pcm "a2chplug" slave.channels 8 # Send Skype channel 0 to the L and R speakers at full volume ttable.0.6 1 ttable.0.7 1 } # 'full-duplex' device for use with aoss pcm.duplex { type asym playback.pcm "2chplug" capture.pcm "microphone" } pcm.aduplex { type asym playback.pcm "alt2ch" capture.pcm "microphone" } pcm.monoduplex { type asym playback.pcm "mono_playback" capture.pcm "microphone" } # for aoss pcm.dsp0 "duplex" ctl.mixer0 "duplex" # softvol manages volume in alsa # i.e. wine likes this pcm.mainvol { type softvol slave.pcm "duplex" control { name "2ch-Upmix Master" card 0 } } #pcm.!default "mainvol" # set the default device according to the environment # variable ALSA_DEFAULT_PCM and default to mainvol pcm.!default { @func refer name { @func concat strings [ "pcm." { @func getenv vars [ ALSA_DEFAULT_PCM ] default "mainvol" } ] } } # uncomment the following if you want to be able to control # the mixer device through environment variables as well #ctl.!default { # @func refer # name { @func concat # strings [ "ctl." # { @func getenv # vars [ ALSA_DEFAULT_CTL # ALSA_DEFAULT_PCM # ] # default "duplex" # } # ] # } #}
Wine
wine unfortunately dosen’t seem to try to open the default device, but the following snippet inserted into your ~/.wine/user.reg will do the trick:
[Software\Wine\Alsa Driver] "AutoScanCards"="N" "DeviceCount"="1" "DeviceCTL1"="default" "DevicePCM1"="default" "UseDirectHW"="N"
Older Version
This version doesn’t setup the side speakers as a second soundcard.
# upmix.and.dmix.intel8x0 begins ### #This asoundrc is for snd_intel8x0 based cards. #It will allow the following: # # upmix stereo files to 5.1 speakers. # playback real 5.1 sounds, on 5.1 speakers, # allow the playback of both stere(upmixed) and surround(5.1) sources at the same time. # upmix mono sound from skype # # #Please try the following commands, to make sure everything is working as it should. # # To test stereo upmix : speaker-test -c2 -Ddefault -twav # To test surround(5.1): speaker-test -c6 -Dplug:dmix6 -twav # # #It may not work out of the box for all cards. If it doesnt work for you, read the comments throughout the file. #If it still doesnt work with your setup, please speak to me (wishie) in #alsa on irc.freenode.net #Define the soundcard to use pcm.snd_card { type hw card 0 device 0 } # 6 channel dmix - output whatever audio, to all 6 speakers pcm.dmix6 { type dmix ipc_key 1024 ipc_key_add_uid false ipc_perm 0660 slave { pcm "snd_card" #rate 48000 channels 6 period_time 0 period_size 1024 buffer_time 0 buffer_size 4096 } # Some cards, like the "nforce" variants require the following to be uncommented. It routes the audio to t he correct speakers. bindings { 0 0 1 1 2 4 3 5 4 2 5 3 } } # upmixing - duplicate stereo data to all 6 channels pcm.ch51dup { type route slave.pcm dmix6 slave.channels 6 ttable.0.0 1 ttable.1.1 1 ttable.0.2 1 ttable.1.3 1 ttable.0.4 0.5 ttable.1.4 0.5 ttable.0.5 0.5 ttable.1.5 0.5 } # rate conversion, needed i.e. for wine pcm.2chplug { type plug slave.pcm "ch51dup" } # 'full-duplex' device for use with aoss pcm.duplex { type asym playback.pcm "2chplug" capture.pcm "hw:0" } # change default device: pcm.!default { type softvol slave.pcm "duplex" control { name "2ch Master" card 0 } } # for aoss pcm.dsp0 "duplex" ctl.mixer0 "duplex" #pcm.default:0 "default" # upmix.and.dmix.intel8x0 ends ### # skype is only mono, so route left channel to the right channel pcm.skype_playback { type route slave.pcm "2chplug" slave.channels 2 # Send Skype channel 0 to the L and R speakers at full volume ttable.0.0 1 ttable.0.1 1 }
Resources
- http://alsa.opensrc.org/.asoundrc
- http://forum.skype.com/lofiversion/index.php/t85880.html
- http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html
- http://wiki.winehq.org/UsefulRegistryKeys
- http://www.johannes-bauer.com/linux/dolby/?menuid=3
This was informative.
I use Google docs with speech recognition. I have the best Sennheiser headset made for voice, and it has a mono microphone, which alsa puts through on one channel. But Google docs and Skype merely mix the left and right channels together. And so with a mono mike using only the left channel, I get half the sound.
Is there a way to force a mono mike to output the same sound to both left and right channels?
So generally speaking, without having looked it up, I’d think that doesn’t matter: left and right channel are probably just mixed together in the end. Duplicating the info from a mono mic can’t really give the algorithm any advantages. Plus, I think most mics are mono anyway, so that shouldn’t be the issue.