Utwórz niestandardowe urządzenie PCM w ALSA

2

Jak mogę stworzyć niestandardowe urządzenie PCM z dmix-slave i używać go w śmiałym bez dotykania globalnego PCM? Czy to możliwe? Próbowałem różnych konfiguracji, ale nie miałem szczęścia. Składnia ALSA asound.conf jest naprawdę dziwna. Oto wyjście 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

I 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

Korzenie problemu: z powodu błędu w audacious / alsa podczas odtwarzania muzyki zuchwały zużywa zbyt dużo czasu procesora. Znalazłem tutaj jakieś rozwiązanie https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=613203 . Stworzyłem ~ / .asoundrc zawierający następujące wiersze:

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

To naprawdę działa i zuchwały zużywa tylko niewielką ilość czasu procesora. Stwarza to jednak problemy z odtwarzaniem dźwięku w Firefoksie. Dźwięk w filmach youtube zacina się.

rfx
źródło
Nazwę urządzenia można zmienić w ~/.config/audacious/config. Ale dlaczego nie zaktualizujesz Audaciousa?
CL.
Dzięki. Zrobię to. Ostatnia wersja Audaciousa nie jest jeszcze dostępna w mojej dystrybucji. Poza tym, TBH, nie jestem do końca pewien, czy to pomoże. Ten dziwny błąd występuje w wielu wersjach, AFAIR. Nie tylko Audacious do winy, ale także ALSA. Może być również specyficzny dla sprzętu. Nie wiem
rfx

Odpowiedzi:

0

Odnośnie głównego problemu: Przesłoniłem pcm.default w ten sposób:

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"
}

Spójrz na tę linię:

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

To wydaje się załatwiać. W końcu udało mi się to obejść bez tworzenia dodatkowych urządzeń PCM.

rfx
źródło