Arquitetura avançada de som do Linux - Advanced Linux Sound Architecture

ALSA
Alsa v1.0.14 ubuntu7.1 en.png
Captura de tela do Alsamixer 1.0.14
Autor (es) original (is) Jaroslav Kysela
Desenvolvedor (s) Equipe ALSA
lançamento inicial 1998 ; 23 anos atrás ( 1998 )
Versão estável
1.2.5.1 / 14 de junho de 2021 ; 3 meses atrás ( 14 de junho de 2021 )
Escrito em C
Sistema operacional Linux
Modelo
Licença
Local na rede Internet alsa-project .org
A API do Linux é composta pela System Call Interface do kernel Linux, a GNU C Library (por GNU ), libdrm , libalsa e libevdev (por freedesktop.org ).
ALSA é parte do kernel Linux , enquanto PulseAudio é middleware, uma parte dos níveis mais baixos da pilha de desktop. O SDL também .

Advanced Linux Sound Architecture ( ALSA ) é uma estrutura de software e parte do kernel Linux que fornece uma interface de programação de aplicativo (API) para drivers de dispositivo de placa de som .

Alguns dos objetivos do projeto ALSA em seu início foram a configuração automática do hardware da placa de som e o manuseio elegante de vários dispositivos de som em um sistema. ALSA é lançado sob GPL-2.0-or-later e LGPL-2.1-or-later .

No Linux, servidores de som, como sndio , PulseAudio , JACK (edição e mixagem de áudio de baixa latência de nível profissional) e PipeWire , e APIs de nível superior (por exemplo , OpenAL , áudio SDL , etc.) funcionam com ALSA e seu som drivers de dispositivo do cartão. ALSA sucedeu a porta Linux mais antiga do Open Sound System (OSS).

História

O projeto para desenvolver ALSA foi liderado por Jaroslav Kysela, e foi baseado no driver de dispositivo Linux para a placa de som Gravis Ultrasound . Ele começou em 1998 e foi desenvolvido separadamente do kernel do Linux até ser introduzido na série de desenvolvimento 2.5 em 2002 (2.5.4–2.5.5).

Na versão 2.6, ele substituiu o sistema anterior, Open Sound System (OSS), por padrão (embora exista uma camada de compatibilidade com versões anteriores).

ALSA tem uma API maior e mais complexa do que o OSS, então pode ser mais difícil desenvolver um aplicativo que use ALSA como sua tecnologia de som. Embora o ALSA possa ser configurado para fornecer uma camada de emulação OSS, essa funcionalidade não está mais disponível ou não é instalada por padrão em muitas distribuições Linux.

Recursos

ALSA foi projetado com algumas características que não eram, na época de sua concepção, suportadas por OSS:

Além dos drivers de dispositivo de som, o ALSA agrupa uma biblioteca de espaço do usuário para desenvolvedores de aplicativos que desejam usar os recursos do driver por meio de uma interface de nível superior que a interface fornecida para interação direta com os drivers do kernel. Ao contrário da API do kernel, que tenta refletir os recursos do hardware diretamente, a biblioteca de espaço do usuário do ALSA apresenta uma abstração que permanece o mais padronizada possível em diferentes elementos de hardware subjacentes. Esse objetivo é alcançado em parte pelo uso de plug-ins de software ; por exemplo, muitas placas de som modernas ou chips de som embutidos não têm um controle de "volume principal". Em vez disso, para esses dispositivos, a biblioteca de espaço do usuário fornece um controle de volume de software usando o plug-in " softvol ", e o software de aplicativo comum não precisa se preocupar se tal controle é implementado por hardware subjacente ou emulação de software de tal hardware subjacente.

Formulários

Adicional à estrutura de software interno para o kernel do Linux, o projeto ALSA também fornece as ferramentas de linha de comando e utilitários alsactl, amixer, arecord/aplaye alsamixer, um ncurses baseados em TUI .

Há também GUIs programados por programadores de outros fabricantes , tais como o GNOME-Alsamixer (usando GTK ), Kmix, XFCE4-misturador, LXpanel, QasHctl, QasMixer, Pavucontrol, AconnectGUI, tapiir, polarbear, ALSAmixerGUI (usando FLTK ), ZynAddSubFX , Yoshimi e ainda mais.

Conceitos

Esta seção fornece uma visão geral dos conceitos básicos relativos ao ALSA.

Normalmente, o ALSA oferece suporte a até oito cartões , numerados de 0 a 7; cada placa é um dispositivo de kernel físico ou lógico com capacidade de entrada e saída. Além disso, cada cartão também pode ser endereçado por seu id , que é uma sequência explicativa como " Fone de ouvido " ou " ICH9 ".

Um cartão possui dispositivos , numerados a partir de 0; um dispositivo pode ser do tipo reprodução , o que significa que ele emite som do computador ou algum outro tipo, como captura , controle , cronômetro ou sequenciador ; o número do dispositivo 0 é usado por padrão quando nenhum dispositivo em particular é especificado.

Um dispositivo pode ter subdispositivos , numerados a partir de 0; um subdispositivo representa algum ponto final de som relevante para o dispositivo, como um par de alto-falantes. Se o subdispositivo não for especificado, ou se o subdispositivo número −1 for especificado, qualquer subdispositivo disponível será usado.

A interface de uma placa é uma descrição de um protocolo ALSA para acessar a placa; interfaces possíveis incluem: hw , plughw , default e plug: dmix . A interface hw fornece acesso direto ao dispositivo do kernel, mas não oferece suporte para mixagem de software ou adaptação de fluxo. O plughw e o padrão permitem a saída de som onde a interface hw produziria um erro.

Um aplicativo normalmente descreve a saída de som combinando todas as especificações acima mencionadas em uma string de dispositivo , que tem uma das seguintes formas (que diferenciam maiúsculas de minúsculas ):

  • interface: cartão, dispositivo, subdispositivo
  • interface: CARD = 1, DEV = 3, SUBDEV = 2 .

Um fluxo ALSA é um fluxo de dados que representa o som; o formato de fluxo mais comum é o PCM que deve ser produzido de forma a corresponder às características ou parâmetros do hardware, incluindo:

  • taxa de amostragem : geralmente 44,1 kHz em aparelhos de som domésticos ou 48 kHz em sistemas de home theater, mas até 88,2 kHz, 96 kHz ou mesmo 192 kHz para produção ou reprodução de áudio de alta fidelidade.
  • largura da amostra : medida em algum número de bits por amostra (como 8, 16, 24 ou 32 bits / amostra)
  • codificação de amostra : como endianness
  • número de canais : 1 para mono, 2 para estéreo ou 6 para AC-3 / IEC958

Implementações

A camada ALSA System on Chip (ASoC) visa fornecer melhor suporte para ALSA em sistemas embarcados que usam um design de sistema em chip (SoC).

Veja também

Referências

links externos

  • Website oficial
  • Policial, Mark. "Alsa WIKI" . AlsaOpensrcOrg . Arquivado do original em 29 de março de 2002 . Retirado em 18 de julho de 2021 . Algumas das razões pelas quais este site continua existindo são, ninguém do site oficial da ALSA jamais contribuiu com nada para este site (antes que o oficial existisse, este é anterior ao wiki oficial em alguns anos), ninguém o fez oficialmente ou sugeriu formalmente uma fusão, ninguém mais mostrou qualquer interesse sério em ajudar a fundi-los e, o mais importante, há um número significativo de referenciadores externos e acessos do Google que vêm diretamente para este site porque ele está aqui há muito tempo.
Várias camadas dentro do Linux, também mostrando separação entre o espaço do usuário e o espaço do kernel
Modo de usuário Aplicativos do usuário bash , LibreOffice , GIMP , Blender , 0 AD , Mozilla Firefox , ...
Componentes do sistema Daemons :
systemd , runit , udevd , polkitd , sshd , smbd ...
Gerenciador de janelas :
X11 , Wayland , SurfaceFlinger (Android)
Gráficos :
Mesa , AMD Catalyst , ...
Outras bibliotecas:
GTK , Qt , EFL , SDL , SFML , FLTK , GNUstep , ...
Biblioteca padrão C fopen, execv, malloc, memcpy, localtime, pthread_create... (até 2000 sub-rotinas )
glibc objetivos para ser rápido, MUSL e uClibc sistemas de destino embutidos, biônicos escritos para Android , etc. Todos pretendem ser POSIX / SUS -compatível.
Modo kernel Kernel Linux stat, splice, dup, read, open, ioctl, write, mmap, close, exit, Etc. (cerca de 380 chamadas de sistema)
O Linux kernel do sistema Call Interface (SIC, pretende ser POSIX / SUS -compatível)

Subsistema de agendamento de processos

Subsistema IPC

Subsistema de gerenciamento de memória

Subsistema de arquivos virtuais

Subsistema de rede
Outros componentes: ALSA , DRI , evdev , LVM , mapeador de dispositivos , Linux Network Scheduler , Netfilter
Linux Security Modules : SELinux , TOMOYO , AppArmor , Smack
Hardware ( CPU , memória principal , dispositivos de armazenamento de dados , etc.)