audsw - trocar configurações do ALSA de forma fácil

Publicado por João Gabriel (última atualização em 11/12/2021)

[ Hits: 1.811 ]

Download audsw




Há muitos que ainda utilizam apenas o ALSA. Seja porque não gostam do PulseAudio / Pipewire, ou porque não vêem necessidade em utilizá-los, etc. No ALSA, para alterar a saída de áudio padrão é necessário modificar os arquivos de configuração ( /etc/asound.conf ou ~/.asoundrc ). Esse script serve para facilitar essa tarefa.

Primeiramente, crie um arquivo de configuração para cada saída de áudio que você quiser ter a possibilidade de usar como padrão. Exemplo: Supondo que hw:0,2 é uma saída HDMI e hw:1,3 é uma saída analógica frontal, você pode criar um arquivo /etc/asound-hdmi que usa hw:0,2 como dispositivo padrão; e depois outro arquivo /etc/asound-analog que usa hw:1,3 como dispositivo padrão. Você configura o script pra usar esses arquivos, e após isso poderá escolher o dispositivo de áudio padrão muito mais facilmente.

Antes de usar o script, modifique CARD_DESC para incluir uma descrição de cada dispositivo de áudio e modifique CARD_CONF para que aponte para os arquivos de configuração corretos.

Esse script não só pode ser utilizado para alterar os dispositivos de áudio padrão, mas também para outras funções que envolvem modificação do(s) arquivo(s) de configuração do ALSA, como habilitar / desabilitar DMIX, alterar o codec utilizado para resampling, etc.

PS: Os programas que usam ALSA só lêem os arquivos de configuração quando são iniciados, portanto, ao alterar o dispositivo de áudio padrão, é necessário reiniciar esses programas para as alterações se manifestarem.

  



Esconder código-fonte

#!/bin/bash

# Troca o dispositivo utilizado para saída
# de áudio no ALSA, através de symlinks.

# CARD_DESC é uma descrição do dispositivo de áudio, que será mostrada ao usuário.
# Os itens de CARD_CONF correspondem, um-a-um, respectivamente, com os itens em CARD_DESC.
# Devem apontar para o arquivo de configuração que deve ser utilizado.
CARD_DESC=("Saída HDMI" "Fone de Ouvido (frontal)" "Fone de ouvido (traseiro)")
CARD_CONF=("/etc/asound-hdmi.conf" "/etc/asound-fanalog.conf" "/etc/asound-banalog.conf")

# Caso você prefira utilizar o arquivo de configuração local a cada usuário,
#   troque o "/etc/asound.conf" abaixo por "$HOME/.asoundrc".
# PS: Ao usar o arquivo de configuração local, certifique-se de que
#   o seu usuário tem permissão para acessar os arquivos em CARD_CONF
ASOUND_PATH="/etc/asound.conf"

# CARD_DESC e CARD_CONF devem ter o mesmo tamanho para o funcionamento do script.
if [ "${#CARD_DESC[@]}" -ne "${#CARD_CONF[@]}" ]; then
    printf 'Os arrays CARD_DESC e CARD_CONF têm tamanhos diferentes.\n'
    exit 1
fi

# Não faz sentido usar o script com CARD_DESC ou CARD_CONF indefinidos.
if [ -z "${#CARD_DESC[@]}" ] || [ -z "${#CARD_CONF[@]}" ]; then
    printf 'Adicione pelo menos um dispositivo de som ao script.\n'
    exit 1
fi

if [ "$ASOUND_PATH" = "/etc/asound.conf" ]; then
    # É necessário ser root para modificar /etc/asound.conf
    [ $UID -ne 0 ] && { echo "$(basename $0): deve ser executado como root !"; exit; }
else
    # É desnecessário rodar esse script como root para modificar o ~/.asoundrc
    [ $UID -eq 0 ] && { echo "$(basename $0): não deve ser executado como root !"; exit; }
fi

COUNT=1

printf 'Escolha um:\n\n'

# "Itera sobre" os itens do array e mostra as opções disponíveis para o usuário
for i in "${CARD_DESC[@]}"; do
    printf '%d. %s' "$COUNT" "$i"
    
    # Se o arquivo de configuração do ALSA for um symlink para um
    # dos arquivos em CARD_CONF, destacamos a entrada correspondente.
    if [ "$(realpath $ASOUND_PATH)" = "${CARD_CONF[$((COUNT-1))]}" ]; then
        printf ' *'
    fi

    printf '\n'

    COUNT=$((COUNT+1))
done

printf '\n'
printf '> '

read choice

# Garante que o número será válido
until [[ "$choice" =~ ^[1-9]$ ]] && [ "$choice" -le "$COUNT" ]; do
    printf 'Resposta inválida.\n'

    printf '> '
    read choice
done

if [ -h "$ASOUND_PATH" ]; then
    # Se o arquivo de configuração já é um symlink, é 
    # necessário "deslinká-lo" antes de "relinká-lo"
    unlink "$ASOUND_PATH"
elif [ -f /etc/asound.conf ]; then
    # Se o arquivo de configuração é um arquivo comum, um 
    # backup é feito ao renomear o arquivo para <nome>.bak
    printf '* %s não é um symlink.\n' "$ASOUND_PATH"
    printf '* salvando um backup em %s.bak ...\n' "$ASOUND_PATH"

    mv "$ASOUND_PATH" "${ASOUND_PATH}.bak" 2>/dev/null
fi

# Testa se o arquivo de configuração existe.
if [ -f "${CARD_CONF[$((choice-1))]}" ]; then
    ln -s "${CARD_CONF[$((choice-1))]}" "$ASOUND_PATH"
else
    printf '%s não existe. crie-o ou edite CARD_CONF para apontar para o arquivo certo.\n' "${CARD_CONF[$((choice-1))]}"
    exit 1
fi

printf '%s agora é o dispositivo de áudio padrão.\n' "${CARD_DESC[$choice-1]}"

Scripts recomendados

Configurando acesso ao MS SQL Server nativo e via ODBC no Debian GNU/Linux

Monitoramento de Tráfego de rede

Acertando a hora da estação com o Observatório Nacional

Verificando roteamento em vários servidores Linux

Kill gráfico com gdialog


  

Comentários
[1] Comentário enviado por maurixnovatrento em 11/12/2021 - 12:59h


Bacana. pra quem usa o ALSA é uma mão na roda.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts