audsw - trocar configurações do ALSA de forma fácil
Publicado por João Gabriel (última atualização em 11/12/2021)
[ Hits: 2.060 ]
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.
#!/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]}"
Listar o número de arquivos de um diretório
Script simple backup em Fita DAT
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Preciso resolver um erro de DPKG (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (2)
Não to conseguindo resolver este problemas ao instalar o playonelinux (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta