Criar dispositivo PCM personalizado no ALSA

2

Como posso criar um dispositivo PCM personalizado com dmix-slave e utilizá-lo com audácia sem tocar no PCM global? É mesmo possível? Eu tentei configurações diversas, mas sem sorte. A sintaxe do ALSA asound.conf é realmente estranha. Aqui está a saída aplay -L:

null
    Discard all samples (playback) or generate zero samples (capture)
default:CARD=SB
    HDA ATI SB, ALC662 rev1 Analog
    Default Audio Device
sysdefault:CARD=SB
    HDA ATI SB, ALC662 rev1 Analog
    Default Audio Device
front:CARD=SB,DEV=0
    HDA ATI SB, ALC662 rev1 Analog
    Front speakers
surround21:CARD=SB,DEV=0
    HDA ATI SB, ALC662 rev1 Analog
    2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=SB,DEV=0
    HDA ATI SB, ALC662 rev1 Analog
    4.0 Surround output to Front and Rear speakers
surround41:CARD=SB,DEV=0
    HDA ATI SB, ALC662 rev1 Analog
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=SB,DEV=0
    HDA ATI SB, ALC662 rev1 Analog
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=SB,DEV=0
    HDA ATI SB, ALC662 rev1 Analog
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=SB,DEV=0
    HDA ATI SB, ALC662 rev1 Analog
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=SB,DEV=0
    HDA ATI SB, ALC662 rev1 Digital
    IEC958 (S/PDIF) Digital Audio Output

E aplay -l:

**** List of PLAYBACK Hardware Devices ****
card 0: SB [HDA ATI SB], device 0: ALC662 rev1 Analog [ALC662 rev1 Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: SB [HDA ATI SB], device 1: ALC662 rev1 Digital [ALC662 rev1 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

As raízes do problema: devido a bug em audacioso / alsa durante a reprodução de música audaciosa consome muito tempo de CPU. Eu encontrei algum tipo de solução aqui https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=613203 . Eu criei ~ / .asoundrc contendo as seguintes linhas:

  pcm.!default {
  type plug
  slave.pcm {
    type dmix
    ipc_key 1024
    slave {
       pcm "hw:0,0"
       rate 44100
    }
  }
}

Ele realmente funciona e audacioso consome apenas uma pequena quantidade de tempo de CPU. No entanto, isso cria problemas com a reprodução de som no Firefox. Som em vídeos do youtube gagueja.

rfx
fonte
O nome do dispositivo pode ser alterado ~/.config/audacious/config. Mas por que você não atualiza o Audacious?
CL.
Obrigado. Vou dar uma chance. A última versão do Audacious ainda não está disponível na minha distro. Além disso, não sei se isso vai ajudar. Esse bug estranho persiste em muitas versões, AFAIR. Não só Audacioso para culpar, mas ALSA também. Pode ser também específico do hardware. Eu não sei.
rfx

Respostas:

0

Em relação ao problema principal: eu substituí pcm.default assim:

pcm.dmixed {
    type asym

    playback.pcm {
        # See plugin:dmix at http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html
        type dmix
        ipc_key 5678293
        ipc_perm 0660
        ipc_gid audio

        slave {
            channels 6

            pcm {
                format S16_LE
                rate 44100
                type hw
                card 0
                device 0
                subdevice 0
            }

            # Play with this value, if you get errors "unable to set buffer size" or "underrun occured"
            # 4320 is effective minimum with hda-intel, but flash in firefox needs at least 5000.
            buffer_size 5000
            period_time 0
            #period_size 512
            #periods 2
        }
    }

    capture.pcm {
        type null
    }
}

pcm.!default {
    type plug
    slave.pcm "dmixed"
}

Dê uma olhada nesta linha:

# 4320 is effective minimum with hda-intel, but flash in firefox needs at least 5000.
buffer_size 5000

Isso parece fazer o truque. Então, finalmente consegui contornar isso sem criar dispositivos PCM adicionais.

rfx
fonte