# Advanced Linux Sound Architecture

Advanced Linux Sound Architecture (conhecido pela sigla ALSA) é um componente do núcleo visando substituir o original Open Sound System (OSS) para fornecer device drivers para placas de som. No início, alguns dos objetivos do projeto ALSA eram a configuração automática do hardware da placa de som e a manipulação elegante de múltiplos dispositivos em um sistema. Alguns frameworks, como o JACK, usam o ALSA para permitir obter uma edição e mixagem de áudio profissional de baixa latência.
Liderado por Jaroslav Kysela, o projeto começou a partir de um device driver Linux para a placa de som Gravis Ultrasound, em 1998 e foi desenvolvido separadamente do núcleo Linux até que foi introduzido na série de desenvolvimento 2.5 em 2002 (2.5.4-2.5.5).. Na versão 2.6, substituiu o OSS como padrão, devido a uma camada de compatibilidade anterior existente.

## Características do ALSA

ALSA foi projetado para utilizar alguns recursos que não foram, no momento da sua concepção, suportados pelo OSS:
* Síntese MIDI baseado em hardware.
* Mixagem de hardware em múltiplos canais.
* Operação Full-duplex.
* Device drivers para multiprocessadores e thread-safe
Para fornecer funcionalidades mais claras, ALSA possui uma API maior e mais complexa do que o OSS, mas que pode dificultar o desenvolvimento de aplicações que utilizam ALSA como sua tecnologia de áudio. No entanto, ALSA também fornece uma camada opcional de emulação do OSS, sendo assim uma API OSS mais simples e portável pode ser usada.
Além dos device drivers de áudio, ALSA também disponibiliza uma biblioteca do Espaço de usuário para desenvolvedores de aplicações que querem utilizar as funcionalidades do driver com um nível de API mais alto do que a interação direta com os drivers do núcleo. Ao contrário da API do núcleo, que tenta refletir diretamente as capacidades do hardware, a biblioteca do espaço de usuário do ALSA apresenta uma abstração que é a mais semelhante possível para todos os diferentes hardwares. Isto é feito em partes pelo uso de plugins de software. Por exemplo, muitas placas de som ou componentes de som internos mais modernos não possuem um controle de "volume principal", então para estes dispositivos a biblioteca oferece um software de controle de volume, ao invés do plugin "softvol", e permitindo que os aplicativos de nível superior não se preocupem com isso.

## Conceitos do ALSA

Esta seção fornece uma visão geral dos conceitos básicos relativos ao ALSA.
Normalmente, ALSA suporta até oito placas numeradas de 0 a 7. Cada placa é um dispositivo físico ou lógico do núcleo com capacidade de entrada, saída ou controle de som e também pode ser endereçado por seu id que é uma string explicativa como Headset ou ICH9. Se a placa é omitida, isso significa placa 0 ou placa default, onde a maioria dos sons é tocado e que é determinado pelo sistema operacional. Placas tem devices numerados começando por 0. Um device pode ser do tipo playback, que significa que sai som do computador, ou outro tipo como captura, controle, temporizador ou sequenciador. Se o device é omitido, isso significa device 0. Um device pode ter subdevices numerados começando por 0 que representam por exemplo um par de alto-falantes ou outro ponto final de áudio relevante para o device. Se o subdevice é -1 ou omitido, isso significa qualquer subdevice. A interface é uma descrição de um protocolo ALSA para acesso, como hw, plughw, default e plug:dmix. A interface hw fornece acesso direto ao device do núcleo, mas nenhum software de mixagem ou adaptação de stream, enquanto que plughw ou default habilitam saída de áudio aonde a interface hw produziria um erro.
Uma aplicação normalmente descreve a saída de áudio, combinando todas as informações anteriores em uma device string, em um formato como interface:placa,device,subdevice ou interface:CARD=1,DEV=3,SUBDEV=2. A device string é sensível ao tamanho da letra (maiúscula ou minúscula).
Um stream ALSA é um fluxo de dados representando som. O mais comum formato stream é PCM e sua codificação deve casar com o hardware ou o som não será tocado. Parâmetros são: taxa de amostragem que é 44.1 kHz para estéreos, e 48 kHz para home theater, um tamanho da amostra medido em bits, como 8, 16, 24 ou 32, uma codificação da amostra, um número de canais, 1 para mono, 2 para estéreo ou 6 para AC-3/IEC958 e o ALSA precisa armazenar também um parâmetro que determina com qual frequência a atenção da CPU é requerida.