15.05.2015 07:07, sylvain.bertrand@gmail.com wrote:
On Wed, May 13, 2015 at 11:32:15AM +0000, sylvain.bertrand@gmail.com wrote:
On Wed, May 13, 2015 at 11:24:32AM +0200, Clemens Ladisch wrote:
I linked the surround51 and surround71 pcms with the 'disable-able' dmix section from the default pcm.
These devices are not supposed to use plug or dmix.
Ok. Then, there is no pcm to output 5.1 sound with dmix.
Does it mean that the application is in charge to build a alsa-lib pipeline with dmix pcm and surround51 pcm, in order to let other applications output 5.1 sound at the same time?
Then what is the "Right"(tm) way to do that?
[this is my personal opinion, in no way official]
The right way seems to be to use PulseAudio. Pure ALSA, in its default configuration, just does not support mixing 5.1 audio, on any card. This default cannot really be changed, because there are many people who use 5.1 cards for output to stereo headphones only, i.e. who need automatic downmixing if an app (such as VLC) starts a 5.1 stream. The default plug/dmix setup provides such downmixing.
Those who actually have a 5.1 system and need to opt out of this downmixing must actively do it (both with ALSA and with PulseAudio). For PulseAudio, it is as simple as starting pavucontrol and selecting a 5.1 output profile for the relevant card. For ALSA, a config has to be created from scratch. On some cards, the config suggested by mpv developers works:
https://github.com/mpv-player/mpv/wiki/ALSA:-Surround-Sound-and-Upmixing
As an application developer, just tell your users "your default device needs to support 5.1, see you there", as mpv developers did. This will be the case either with PulseAudio or with a hacked .asoundrc.
OTOH, I will be happy to review a patch that makes the dmix channel count configurable on a per-card basis in .asoundrs in a way similar to the rate. But that's hard - you will have to change all card configs, and implement some conditional blocks because some cards expose themselves as several stereo devices, so you want a multi plugin on several instances of dmix then.