Emulação de Pulseaudio para ALSA.
O programa fornece uma implementação parcial alternativa da API do Pulseaudio. Consiste em um script de carregador e várias bibliotecas compartilhadas com os mesmos nomes do Pulseaudio original, para que os aplicativos possam carregá -los dinamicamente e pensar que estão conversando com o pulseaudio. Internamente, nenhum daemon de mistura de som separado é usado. Em vez disso, a Apulse conta com os plugins dmix , dsnoop e plug da ALSA para lidar com várias fontes de som e capturar fluxos em execução ao mesmo tempo. plug -in dmix muxes vários fluxos de reprodução; O plug -in dsnoop permite que vários aplicativos capturem de um único microfone; e plug -in plug -in converte transparentemente o áudio entre vários formatos de amostra, taxas de amostra e números de canal. Por mais de uma década, o ALSA vem com esses plug -ins ativados e configurados por padrão.
apulse não foi projetado para ser uma substituição de pulseaudio. É inútil, pois isso será apenas reimplementação do Pulseaudio original, com a mesma arquitetura do cliente-daemon, exigida pelo conjunto de recursos completo. Em vez disso, apenas partes da API que são cruciais para aplicações específicas são implementadas. É por isso que há um script de carregador, chamado apulse . Ele atualiza o valor da variável de ambiente LD_LIBRARY_PATH para apontar também para o diretório em que as bibliotecas da Apulse são instaladas, disponibilizando -as para o aplicativo.
O nome vem de nomes de alsa e pulseaudio. Como aoss era uma camada de compatibilidade entre os programas OSS e o ALSA, apulse foi projetado para ser uma camada de compatibilidade entre aplicações PULSEAUDIO e ALSA.
Você precisa de bibliotecas ALSA e Glib instalado. Em distribuições baseadas em Debian, eles estão em pacotes libasound2-dev e libglib2.0-dev .
Para construir e instalar, execute no diretório de origem:
$ mkdir build && cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
$ make
# make install
Isso criará diretório chamado build e construir lá. É possível instalar apenas executando make install como root , como mostrado acima. Mas você não poderá desinstalar arquivos instalados. É por isso que é recomendável envolver arquivos em um pacote. Use checkinstall , ou alguma alternativa.
Se você deseja binários de 32 bits em máquina de 64 bits (por exemplo, para o Skype), use:
$ mkdir build && cd build
$ CFLAGS=-m32 cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
$ make
# make install
As versões recentes do GLIB usam diferentes arquivos .pc para i386 e amd64 . Para ajudar pkg-config a encontrar versões de 32 bits, use a variável PKG_CONFIG_PATH . Então, no Debian, será algo como:
$ PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig CFLAGS=-m32 cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
Existe uma maneira de configurar onde as bibliotecas APULSE serão instaladas, via variável APULSEPATH CMake. Por exemplo, se você deseja instalar bibliotecas no caminho padrão, /usr/lib , use
cmake -DAPULSEPATH=/usr/lib -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
Se as bibliotecas forem instaladas em um caminho regular da biblioteca, você não precisará executar aplicativos através do Wrapper apulse .
$ apulse <program-name> [program-parameters]
Variáveis de ambiente APULSE_CAPTURE_DEVICE e APULSE_PLAYBACK_DEVICE podem ser usados para configurar dispositivos de captura e reprodução. Experimente hw:0,0 , plughw:0,0 e similares. Consulte o Guia do usuário da ALSA para obter uma lista completa de nomes de dispositivos.
Por padrão, as bibliotecas da apulse são instaladas em um diretório separado, a fim de ocultá -las de todos os aplicativos.
A maioria das aplicações em estado selvagem, que suportam o PULSEAUDIO e o ALSA, tentam automaticamente qual sistema de som é usado. Primeiro, as aplicações tentam começar com Pulseaudio. As bibliotecas de clientes originais falham cedo se nenhum daemon Pulseaudio estiver em execução ou puder ser iniciado. Então eles mudam para o ALSA. A decisão é tomada uma vez, no começo. Funciona bem com Pulseaudio, mas não funciona com apulse . A última não tem daemons, diz felizmente que está tudo bem e é capaz de jogar áudio. Os aplicativos tentam chamar mais funções e, eventualmente, tocam em peças não implementadas, geralmente com falhas. Portanto, as bibliotecas estão ocultas e ficam visíveis apenas quando um programa é chamado através do Script de Wrapper apulse .
É possível instalar bibliotecas APULSE em /usr/lib . O script de wrapper não será necessário, mas todos os aplicativos tentarão usar a API PULSEAUDIO, apesar de poderem usar o ALSA.
Existe a propriedade RPath do formato executável da ELF, que é usado para especificar caminhos para procurar bibliotecas dinâmicas. É como ld_library_path variável, mas por executável. Como todo esse script do iniciador do apulse é definir o valor LD_LIBRARY_PATH Antes de iniciar um aplicativo, é possível assar caminhos para as bibliotecas da Apulse no próprio Target Executável. E assim, para lançá -lo como de costume, sem script auxiliar.
Por exemplo, para o Firefox, seria:
# patchelf --set-rpath /usr/lib/apulse /usr/lib/firefox/libxul.so
Por alguma razão, não funciona se o RPath estiver definido para /usr/lib/firefox/firefox , portanto, são necessárias algumas experiências para fazê -lo funcionar.
Grande parte da API do Pulseaudio não é implementada. Existem funções que não fazem nada e retornam alguns valores de arbitratia. Freqüentemente, se o aplicativo tentar chamar algo não implementado, ele trava ao tentar desreferenciar um ponteiro nulo. Por padrão, o nível de rastreamento é definido como 0 , o que significa que nenhuma mensagem é impressa na saída padrão. É possível aumentar esse valor para 1 , que mostra chamadas de função não implementadas, ou para 2 , que mostra todas as chamadas de função.
Para alterar o nível, use o parâmetro WITH_TRACE ao chamar cmake . Algo como cmake -DWITH_TRACE=1 ..
Construir o Apulse com rastreio Nível 1 não resolverá problemas, mas pelo menos ajudará a identificar se as falhas são causadas por funções não implementadas.
Apulse atua como um cliente ALSA genérico. Ele tenta abrir o dispositivo de áudio e, às vezes, falha. Na sua essência, a Apulse não faz mistura de áudio nem reamostragem. Em vez disso, ele depende dos plug -ins plug , dmix e dsnoop ALSA, que geralmente são ativados por padrão. Esses plugins lidam com várias fontes de áudio, realizando reamostragem e misturando de forma transparente. Há anos agora o ALSA vem com esses plugins ativados. O áudio funciona apenas sem configurar nada. Mas nem todo mundo usa configurações padrão.
Nas configurações personalizadas, o Apulse pode deixar de produzir e/ou capturar áudio. Não poderia haver som ou apenas um único fluxo de áudio tocando de cada vez. Também é possível que os adaptadores com misturadores de hardware, capazes de reproduzir vários fluxos, ainda não consigam lidar com vários fluxos de captura. Dependendo do hardware, você ainda pode precisar de plugins dmix ou dsnoop . Ou ambos.
Em outras palavras, para o Apulse funcionar, sua configuração deve ser capaz de reproduzir e capturar vários fluxos simultaneamente.
Se outros aplicativos a saída soarem bem, é possível que o aplicativo você esteja usando se restringe.
Por exemplo, o Firefox agora tem uma caixa de areia, que bloqueia o acesso ao arquivo. Ele tem uma lista predefinida de caminhos permitidos, mas os dispositivos ALSA não são incluídos por padrão. Felizmente, é possível adicionar esse caminho manualmente. Adicionar "/dev/snd/" a "segurança.sandbox.content.write_path_whitelist" o parâmetro em about:config . Observe que a barra de arrastar em "/dev/snd/" é necessária.
O Firefox 58 (noturno) apertou sua caixa de areia um pouco mais. Agora, as chamadas ioctl() também são proibidas, mas são usadas pelas bibliotecas da ALSA. Isso causa violação da Sandbox com o término subsequente do processo. A exceção pode ser adicionada definindo o parâmetro security.sandbox.content.syscall_whitelist in about:config . Esse campo aceita uma lista separada por vírgula de números de chamadas do sistema. Adicione lá 16 para x86-64 ou 54 para x86 ou braço.
O Firefox 60 se esforçou mais com seu conteúdo de sandbox, mas, ao mesmo tempo, moveu os acessos de áudio dos processos de conteúdo para o processo principal. Do Firefox 60, não são necessárias alterações nas configurações da caixa de areia.
O código -fonte é distribuído nos termos da licença do MIT. Consulte License.Mit para obter um texto completo.
/3rdparty/pulseaudio-headers contém parte do projeto pulseaudio e é distribuído nos termos LGPLV2.1+. Consulte o conteúdo dos arquivos para obter detalhes.