PulseAudio 소스 포트 변경: "availability=no" 및 우선순위

PulseAudio 소스 포트 변경: "availability=no" 및 우선순위

저는 Thinkpad T450s를 사용하고 있는데 여기에는 3개의 "실제" 마이크 입력이 있습니다: 내부 마이크 어레이(실제 마이크는 웹캠 옆의 LCD 베젤에 있음), 콤보 헤드폰/마이크 4극 잭을 통한 "라인 입력", 및 도킹 포트 "라인 입력". PulseAudio는 세 개의 포트를 모두 단일 ALSA 소스에 속하는 것으로 표시합니다(아래 "pacmd list-sources" 출력 참조).

  * index: 2
    name: <alsa_input.pci-0000_00_1b.0.analog-stereo>
    driver: <module-alsa-card.c>
    flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY DYNAMIC_LATENCY
    state: SUSPENDED
    suspend cause: IDLE 
    priority: 9959
    volume: front-left: 23093 /  35% / -27.18 dB,   front-right: 23093 /  35% / -27.18 dB
            balance 0.00
    base volume: 13076 /  20% / -42.00 dB
    volume steps: 65537
    muted: no
    current latency: 0.00 ms
    max rewind: 0 KiB
    sample spec: s16le 2ch 44100Hz
    channel map: front-left,front-right
                 Stereo
    used by: 0
    linked by: 0
    configured latency: 0.00 ms; range is 0.50 .. 371.52 ms
    card: 1 <alsa_card.pci-0000_00_1b.0>
    module: 7
    properties:
        alsa.resolution_bits = "16"
        device.api = "alsa"
        device.class = "sound"
        alsa.class = "generic"
        alsa.subclass = "generic-mix"
        alsa.name = "ALC3232 Analog"
        alsa.id = "ALC3232 Analog"
        alsa.subdevice = "0"
        alsa.subdevice_name = "subdevice #0"
        alsa.device = "0"
        alsa.card = "1"
        alsa.card_name = "HDA Intel PCH"
        alsa.long_card_name = "HDA Intel PCH at 0xe1234000 irq 47"
        alsa.driver_name = "snd_hda_intel"
        device.bus_path = "pci-0000:00:1b.0"
        sysfs.path = "/devices/pci0000:00/0000:00:1b.0/sound/card1"
        device.bus = "pci"
        device.vendor.id = "8086"
        device.vendor.name = "Intel Corporation"
        device.product.id = "9ca0"
        device.product.name = "Wildcat Point-LP High Definition Audio Controller"
        device.form_factor = "internal"
        device.string = "front:1"
        device.buffering.buffer_size = "65536"
        device.buffering.fragment_size = "32768"
        device.access_mode = "mmap+timer"
        device.profile.name = "analog-stereo"
        device.profile.description = "Analog Stereo"
        device.description = "Built-in Audio Analog Stereo"
        alsa.mixer_name = "Realtek ALC3232"
        alsa.components = "HDA:10ec0292,17aa5036,00100001"
        module-udev-detect.discovered = "1"
        device.icon_name = "audio-card-pci"
    ports:
        analog-input-internal-mic: Internal Microphone (priority 8900, latency offset 0 usec, available: unknown)
            properties:
                device.icon_name = "audio-input-microphone"
        analog-input-dock-mic: Dock Microphone (priority 7800, latency offset 0 usec, available: no)
            properties:
                device.icon_name = "audio-input-microphone"
        analog-input-mic: Microphone (priority 8700, latency offset 0 usec, available: no)
            properties:
                device.icon_name = "audio-input-microphone"
    active port: <analog-input-internal-mic>

현재 동작은 두 라인 입력이 모두 연결되지 않은 경우(헤드폰/마이크 잭이 비어 있고 노트북이 연결되지 않음) 내부 마이크 배열이 활성화되는 것입니다(위의 pacmd 출력에 표시된 대로). 그러나 스마트폰용으로 설계된 4극 이어버드 세트를 연결하는 경우와 같이 라인 입력이 헤드폰/마이크 잭을 통해 연결되면 ALSA 소스가 해당 포트를 라인 입력 포트인 '아날로그 입력 마이크'로 전환합니다. 내부 마이크 배열 포트 "아날로그 입력 내부 마이크"의 가용성이 이제 "아니요"로 표시됩니다. 아래를 참조하세요.

...
    ports:
        analog-input-internal-mic: Internal Microphone (priority 8900, latency offset 0 usec, available: no)
            properties:
                device.icon_name = "audio-input-microphone"
        analog-input-dock-mic: Dock Microphone (priority 7800, latency offset 0 usec, available: no)
            properties:
                device.icon_name = "audio-input-microphone"
        analog-input-mic: Microphone (priority 8700, latency offset 0 usec, available: yes)
            properties:
                device.icon_name = "audio-input-microphone"
    active port: <analog-input-mic>

내부 마이크 배열이 내가 가지고 있는 마이크보다 음질이 더 좋기 때문에 무슨 일이 있어도 내부 마이크 배열이 우선순위를 갖도록 이 동작을 변경하고 싶습니다. 여기에는 두 가지 문제가 있습니다.

  1. 내부 마이크 포트의 가용성이 "no"로 변경되어 포트를 수동으로 변경하면("pacmd set-source-port 2 Analog-input-internal-mic") 실제 사운드 입력이 없습니다.

  2. 내부 마이크 포트는 다른 두 포트보다 우선순위가 낮은 것 같습니다. 즉, 사용성 문제를 해결하더라도 잭을 통해 마이크를 연결할 때마다 pavucontrol 또는 pacmd를 통해 수동으로 설정해야 합니다.

Windows에서 원하는 대로 정확하게 동작을 설정했기 때문에 이것이 소프트웨어/펌웨어 문제라고 확신합니다.

이러한 문제를 해결할 수 있는 방법이 있나요? 이는 낮은 수준의 ALSA 드라이버 문제(사용성)와 99.99%의 사용자가 절대 건드리지 않을 문제(포트 우선순위)로 보이기 때문에 해결책을 찾기 위한 최후의 노력입니다. 모든 입력을 높이 평가합니다. 기본적으로 내가 찾을 수 있는 "pacmd set-sink-port/set-source-port" 이외의 PulseAudio 포트에 대한 문서는 없습니다.

  • 시스템: Thinkpad T450s
  • 배포판: Debian 테스트(확장)

답변1

아날로그 입력 헤드셋 마이크를 "비활성화/아니요"로 설정해야 했는데 이 기사를 찾았습니다.https://bugs.freedesktop.org/show_bug.cgi?id=101798.

[General] priority = 88 /usr/share/pulseaudio/alsa-mixer/paths/nalog-input-headphone-mic.conf 파일의 우선순위 변경 블록에서 ,

그리고 블록에

[Jack Headphone Mic] required-any = any state.plugged =unknown

"알 수 없음"을 "아니요"로 변경합니다. "아날로그 입력 헤드셋 마이크"가 이제 "아니요"입니다.

 ports:
            analog-input-internal-mic: Internal Microphone (priority 8900, latency offset 0 usec, available: yes)
                    properties:
                            device.icon_name = "audio-input-microphone"
            analog-input-headphone-mic: Microphone (priority 8700, latency offset 0 usec, available: no)
                    properties:
                            device.icon_name = "audio-input-microphone"
            analog-input-headset-mic: Headset Microphone (priority 8800, latency offset 0 usec, available: yes)
                    properties:
                            device.icon_name = "audio-input-microphone"
    active port: <analog-input-internal-mic>

관련 정보