Introdução ao ALSA e sua API em C e Python

24/09/2014 Alexandre Vicenzi 2 min de leitura

O ALSA (Advanced Linux Sound Architeture) é um framework para kernel space e user space para manipular dispositivos de áudio. No kernel space o ALSA é a API padrão para a criação dos devices drivers de dispositivos de áudio, e no user space o ALSA existe como uma API para permitir a configuração dos dispositivos de áudio que tenham seu device driver implementado com o framework ALSA. Um exemplo de um programa que utilize a API user space do ALSA é o alsamixer.

Abaixo uma imagem do alsamixer executando em uma máquina desktop:

mixer

Nesta tela podemos ver algumas configurações da placa de áudio e podemos interagir com esta. Para uma descrição mais completa da API, e do porque ela foi criada clique aqui.

A documentação da API pode ser encontrada aqui. Para os controles básicos de áudio, tal como nível de volume e configuração de microfone, é utilizada a API mixer-controls do ALSA.

Para ilustrar o funcionamento básico do ALSA seguem dois exemplos de códigos que permitem alterar o volume de de áudio de uma máquina com Linux. Estes código podem ser baixados no nosso github. Um dos exemplos será na linguagem C e o outro será em Python. O primeiro exemplo é na linguagem C, que basicamente diz quais os valores limite do volume da placa de áudio e também permite ao usuário trocar o nível do volume.

Para compilar este programar basta executar:


g++ volume.c -o volume -lasound

Onde o arquivo salvo tem o nome volume.c.

Executando em minha máquina, tenho a seguinte saída:


[[email protected] ~]$ ./volume 40000
Volume mínimo: 0 e máximo: 65536
Volume atual: 40000

Abaixo se encontra um exemplo da utilização do ALSA em Python.

Neste exemplo em python, pode-se ver alguns usos do framework ALSA, como pegar e setar configurações de placas e níveis de áudio.

Se você tiver algum problema na execução desses códigos, ou tem alguma dúvida, poste nos comentários!

Não se esqueça se de cadastrar no nosso feed. Até mais!

Autores: Marcos Paulo de Souza e Alexandre Vicenzi