quarta-feira, 9 de maio de 2012

Asus Xonar DG no ALSA (ou: drivers para Windows são sempre melhores?)

Até o momento (ALSA 1.0.25), uma combinação ruim Asus Xonar DG + Linux.

O driver é deficiente. Falta funcionalidade. Apenas a saída traseira funciona e ainda assim sem a possibilidade de você mudá-la para passar pelo circuito amplificador de fone de ouvido. As saídas frontais não funcionam e a entrada de linha/microfone (tanto traseira quanto frontal) não funciona.

É bug conhecido, que depende do pessoal do ALSA trabalhar no driver através de engenharia reversa, como disse Clemens Ladisch.

Drivers para Linux desenvolvidos na base da engenharia reversa não são novidade. Mas olhem...

Essa placa faz tudo por software (nem controle de volume tem no hardware). Ela ainda é uma opção interessante pois tem bons DACs e ADCs, fora o amplificador da TI para fones de ouvido e conexões frontais. O software que acompanha o driver para Windows, sem o qual muitas funcionalidade são perdidas, é muito mal escrito, não usando as variáveis de ambiente e tendo o péssimo hábito de ficar infinitamente fazendo polling no registro, que é conhecida má prática, além de desnecessária, visto que o Windows oferece uma API através da qual aplicações podem registrar-se para serem notificadas de alterações em determinada chave do registro.

Por outro lado, o driver do ALSA é um código simples e enxuto. Claro, incompleto por enquanto. Quando a questão do roteamento do sinal for resolvida, o driver terá toda a funcionalidade básica funcionando. O que o horroroso software da Asus faz, o PulseAudio faz também. Seu controle de volume é, no caso da Xonar DG, obrigatório (não existe controle no hardware) e ele pode aplicar equalização global da mesma forma. Uma ferramenta gráfica ao moldes do pulseaudio-equalizer (mas escrita em C, por favor) deveria existir no Gnome.

Talvez o que falte seja suporte a EAX e correlatos, coisa que no Windows é feita por software. Não impossível de implementar, mas improvável, pois é uma tecnologia patenteada pela Creative. Para o básico, contudo, a funcionalidade da placa no Linux, quando o driver for completado, por incrível que pareça, pode ser melhor que no Windows, porque o driver não terá no espaço de usuário um software horrendo como o monstrengo que é instalado no Windows. Um software bugado que faz seu PC gastar mais energia para nada e que não funciona direito com o perfil do usuário fora da unidade C. Num Linux moderno você terá o PulseAudio, um código maduro e eficiente. Nada de reinventar a roda. O driver (ALSA) faz a abstração de hardware e o resto é tarefa do sistema operacional, não de um software de terceiro escrito nas coxas.

Ah, e isso sem uma mísera ajuda da Asus! Compare com a recente enxurrada de código no ALSA vinda da Texas Instruments para seus SoC ARM. Ah, Android...

As APIs e SDKs do Windows são completas e bem documentadas, mas pelo fato de cada fabricante estar por contra própria quando desenvolve drivers para ele — sem reaproveitar outros códigos concorrentes que resolveram problemas similares —, drivers de boa qualidade para Windows nem sempre são realidade. Desenvolver para Windows não é sinônimo de expertise. Eu li um comentário falando disso numa discussão tempos atrás no LWN.net e me parece se aplicar com perfeição aqui.

[Atualização - 15/02/2014] Finalmente o driver foi completado e terá toda a funcionalidade básica funcionando no kernel 3.14!

2 comentários:

  1. Sei lá se você um dia vai ler isso aqui, mas esse POST me ajudou muito , não sabia se a placa já estava sendo completamente suportada e fiquei anos sem migrar oficialmente pro Linux por que não queria perder minha Xonar DG , obrigado.

    ResponderExcluir