Estou martelando nisso há quase 6 horas e estou completamente perplexo.
Eu tenho um fone de ouvido Logitech Pro X e, depois de voltar do Windows para o Mint (você não está inserindo IA no MEU sistema operacional!), Estou tentando fazer com que o som surround funcione nele.
Minhas especificações (para referência rápida):
- Linux Mint 21.3
- Versão do kernel 5.15.0-116-genérico
- PulseAudio versão 15.99
- alsa-base versão 1.0.25
aplay -lL
lista o fone de ouvido como tendo som surround de até 7.1:
hw:CARD=X,DEV=0
PRO X, USB Audio
Direct hardware device without any conversions
plughw:CARD=X,DEV=0
PRO X, USB Audio
Hardware device with all software conversions
sysdefault:CARD=X
PRO X, USB Audio
Default Audio Device
front:CARD=X,DEV=0
PRO X, USB Audio
Front output / input
surround21:CARD=X,DEV=0
PRO X, USB Audio
2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=X,DEV=0
PRO X, USB Audio
4.0 Surround output to Front and Rear speakers
surround41:CARD=X,DEV=0
PRO X, USB Audio
4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=X,DEV=0
PRO X, USB Audio
5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=X,DEV=0
PRO X, USB Audio
5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=X,DEV=0
PRO X, USB Audio
7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=X,DEV=0
PRO X, USB Audio
IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=X,DEV=0
PRO X, USB Audio
Direct sample mixing device
usbstream:CARD=X
PRO X
USB Stream Output
a52:CARD=X
PRO X
pactl
, por outro lado:
Card #3
Name: alsa_card.usb-Logitech_PRO_X_000000000000-00
Driver: module-alsa-card.c
Owner Module: 10
Properties:
alsa.card = "3"
alsa.card_name = "PRO X"
alsa.long_card_name = "Logitech PRO X at usb-0000:0b:00.3-2, full speed"
alsa.driver_name = "snd_usb_audio"
device.bus_path = "pci-0000:0b:00.3-usb-0:2:1.0"
sysfs.path = "/devices/pci0000:00/0000:00:08.1/0000:0b:00.3/usb5/5-2/5-2:1.0/sound/card3"
udev.id = "usb-Logitech_PRO_X_000000000000-00"
device.bus = "usb"
device.vendor.id = "046d"
device.vendor.name = "Logitech, Inc."
device.product.id = "0aaa"
device.product.name = "PRO X"
device.serial = "Logitech_PRO_X_000000000000"
device.string = "3"
device.description = "PRO X"
module-udev-detect.discovered = "1"
device.icon_name = "audio-card-usb"
Profiles:
input:mono-fallback: Mono Input (sinks: 0, sources: 1, priority: 1, available: yes)
output:analog-stereo: Analog Stereo Output (sinks: 1, sources: 0, priority: 1500, available: yes)
output:analog-stereo+input:mono-fallback: Analog Stereo Output + Mono Input (sinks: 1, sources: 1, priority: 1501, available: yes)
output:iec958-stereo: Digital Stereo (IEC958) Output (sinks: 1, sources: 0, priority: 500, available: yes)
output:iec958-stereo+input:mono-fallback: Digital Stereo (IEC958) Output + Mono Input (sinks: 1, sources: 1, priority: 501, available: yes)
off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
Active Profile: output:analog-stereo+input:mono-fallback
Ports:
analog-input-mic: Microphone (type: Mic, priority: 8700, latency offset: 0 usec, availability unknown)
Properties:
device.icon_name = "audio-input-microphone"
Part of profile(s): input:mono-fallback, output:analog-stereo+input:mono-fallback, output:iec958-stereo+input:mono-fallback
analog-output: Analog Output (type: Analog, priority: 9900, latency offset: 0 usec, availability unknown)
Part of profile(s): output:analog-stereo, output:analog-stereo+input:mono-fallback
iec958-stereo-output: Digital Output (S/PDIF) (type: SPDIF, priority: 0, latency offset: 0 usec, availability unknown)
Part of profile(s): output:iec958-stereo, output:iec958-stereo+input:mono-fallback
Da mesma maneira, alsamixer
:
E, finalmente, speaker-test -D default -c 8
funciona, mas ainda funciona apenas no modo estéreo - ou seja, todos os canais estão sendo movidos para a esquerda, para a direita ou para ambos. speaker-test -D surround71:CARD=X,DEV=0 -c 8
volta com Broken configuration for playback: no configurations available: Invalid argument
.
Eu criei daemon.conf
e default.pa
modifiquei ~/.config/pulse
as configurações default-sample-channels
de , default-channel-map
e LFE, além de adicionar load-module module-combine channels=8 channel_map=front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
(acredito que tenho esse mapeamento na ordem certa, mas tentei vários - incluindo surround 5.1 - e nenhum funcionou).
Tudo o que li até agora indica que deveria funcionar imediatamente, caso contrário, as alterações acima fariam com que funcionasse. Cheguei até a instalar o pipewire, mas me deparei com outros problemas que não consegui entender. Também examinei o dcaenc, mas entendo que ele exige que o áudio recebido seja formatado usando o codec de áudio correto, o que obviamente não funciona para fones de ouvido para jogos.
Qualquer ajuda seria apreciada - especialmente se eles pudessem esclarecer o que está acontecendo nos bastidores.
Adição tardia: parece que aplay
também lista meu Vive como tendo surround 7.1, e o PA também se recusa a reconhecê-lo. Estranho.
Seus fones de ouvido não têm surround;) É o driver do Windows que tem!
Você só tem dois ouvidos, portanto, a menos que seus fones de ouvido fiquem realmente desajeitados, você não pode realmente ter um sistema surround nos próprios fones de ouvido. Felizmente, você não precisa fazer isso - os mecanismos que fazem seu cérebro perceber o áudio espacial são um tanto bem compreendidos e podem ser emulados (algo como: o som vem de longe? Atrasar um pouco e diminuir o volume, mixar para ambos os fones de ouvido e atenuam as altas frequências, porque a parte de trás da sua cabeça não as conduz muito bem.).
A Logitech diz que seus fones de ouvido possuem “DTS headphone X”. Isso é uma tecnologia! Ele capta vários fluxos e os calcula até um sinal estéreo que emula a percepção espacial bastante bem. Para fazer isso, alguém teve que desenvolver os algoritmos e calibrar o fone de ouvido (e é com isso que a Dolby ganha dinheiro: desenvolvendo algoritmos e formatos e licenciando-os).
Para os técnicos: você modela isso (em primeiro grau) como uma resposta de impulso aplicada aos canais surround para obter os comandos dos canais estéreo dos fones de ouvido.
Então, isso é uma coisa de software, não de hardware. O Windows precisa de alguns drivers proprietários para fazer isso. No Linux, seu sistema de som padrão "Pipewire" possui Filter Chains que podem aplicar esses canais simulados para você. Infelizmente, ainda não conheço uma interface gráfica amigável para isso.
Você precisa de alguns canais pré-calculados e, armado com eles, pode configurar uma cadeia de filtros que faz as contas para fornecer um som com efeito surround em seus fones de ouvido. Ainda não experimentei no pipewire - mas aqui está o exemplo do Virtual Surround do wiki do pipewire .