audsw - trocar configurações do ALSA de forma fácil
Publicado por João Gabriel (última atualização em 11/12/2021)
[ Hits: 2.088 ]
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]}"
Instalação do Telegram Desktop via shell script
Script para configuração do jogo 0 A.D
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Comunicação entre sede e filial (5)
Agora temos uma assistente virtual no fórum!!! (242)
Quero saber sobre os melhores aplicativos de office para usar em 2024 ... (7)