ALSA를위한 Pulseaudio 에뮬레이션.
이 프로그램은 Pulseaudio API의 대체 부분 구현을 제공합니다. 로더 스크립트와 원래 Pulseaudio와 동일한 이름을 가진 다수의 공유 라이브러리로 구성되므로 응용 프로그램은 동적으로로드하여 Pulseaudio와 대화하고 있다고 생각할 수 있습니다. 내부적으로 별도의 사운드 믹싱 데몬이 사용되지 않습니다. 대신 Apulse는 ALSA의 dmix , dsnoop 및 plug 플러그인에 의존하여 여러 사운드 소스를 처리하고 동시에 작동하는 스트림을 캡처합니다. dmix 플러그인 muxes 여러 재생 스트림; dsnoop 플러그인은 단일 마이크에서 여러 응용 프로그램을 캡처 할 수 있습니다. plug 플러그인은 다양한 샘플 형식, 샘플 속도 및 채널 번호로 오디오를 투명하게 변환합니다. ALSA는 현재 10 년 이상 동안 기본적 으로이 플러그인을 활성화하고 구성합니다.
apulse Pulseaudio의 드롭 인 교체로 설계되지 않았습니다. 완전한 기능 세트에서 요구하는 동일한 클라이언트-데몬 아키텍처와 함께 원래 Pulseaudio를 다시 구현하기 때문에 무의미합니다. 대신, 특정 응용 프로그램에 중요한 API의 일부만 구현됩니다. 그렇기 때문에 apulse 라는 로더 스크립트가 있습니다. LD_LIBRARY_PATH 환경 변수의 값을 업데이트하여 Apulse의 라이브러리가 설치된 디렉토리를 가리켜 응용 프로그램에서 사용할 수 있도록합니다.
이름은 Alsa와 Pulseaudio의 이름에서 나옵니다. aoss 는 OSS 프로그램과 ALSA 사이의 호환성 계층 이었으므로 apulse Pulseaudio 응용 프로그램과 ALSA 간의 호환 층으로 설계되었습니다.
ALSA 라이브러리와 glib가 설치해야합니다. 데비안 기반 분포에서는 libasound2-dev 및 libglib2.0-dev 패키지에 있습니다.
구축 및 설치하려면 소스 디렉토리에서 실행하십시오.
$ mkdir build && cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
$ make
# make install
그것은 build 라는 디렉토리를 만들고 빌드를 만들 것입니다. 위와 같이 make install root 로 설치하는 것만으로 설치할 수 있습니다. 그러나 설치된 파일을 제거 할 수 없습니다. 그렇기 때문에 파일을 패키지로 랩핑하는 것이 좋습니다. checkinstall 또는 일부 대안을 사용하십시오.
64 비트 기계 (예 : Skype의 경우)에서 32 비트 바이너리를 원한다면 다음을 사용하십시오.
$ mkdir build && cd build
$ CFLAGS=-m32 cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
$ make
# make install
최근 GLIB 버전은 i386 및 amd64 에 다른 .pc 파일을 사용합니다. pkg-config 32 비트 버전을 찾을 수 있도록 PKG_CONFIG_PATH 변수를 사용하십시오. 따라서 데비안에서는 다음과 같습니다.
$ PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig CFLAGS=-m32 cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
APULSEPATH Cmake 변수를 통해 Apulse 라이브러리가 설치 될 위치를 구성하는 방법이 있습니다. 예를 들어 라이브러리를 기본 경로 /usr/lib 에 설치하려면 사용하십시오.
cmake -DAPULSEPATH=/usr/lib -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
라이브러리가 일반 라이브러리 경로에 설치된 경우 apulse 래퍼를 통해 응용 프로그램을 실행할 필요가 없습니다.
$ apulse <program-name> [program-parameters]
환경 변수 APULSE_CAPTURE_DEVICE 및 APULSE_PLAYBACK_DEVICE 사용하여 캡처 및 재생 장치를 구성 할 수 있습니다. hw:0,0 , plughw:0,0 등을 시도하십시오. 장치 이름의 전체 목록은 ALSA 사용자 안내서를 참조하십시오.
기본적으로 apulse 의 라이브러리는 모든 응용 프로그램에서 숨기기 위해 별도의 디렉토리로 설치됩니다.
Pulseaudio와 ALSA를 모두 지원하는 Wild의 대부분의 응용 분야는 어떤 사운드 시스템이 사용되는지 자동 측정을 시도합니다. 먼저 응용 프로그램은 Pulseaudio로 시작하려고합니다. Pulseaudio 데몬이 실행 중이거나 시작할 수없는 경우 원래 클라이언트 라이브러리가 일찍 실패합니다. 그런 다음 그들은 Alsa로 전환합니다. 처음에는 한 번 결정됩니다. Pulseaudio와 잘 작동하지만 apulse 에서는 작동하지 않습니다. 후자는 데몬이 없으며, 행복하게 모든 것이 괜찮으며 오디오를 재생할 수 있다고 말합니다. 그런 다음 응용 프로그램은 더 많은 기능을 호출하고 결국 충돌로 구현되지 않은 부품을 터치합니다. 따라서 라이브러리는 숨겨져 있으며 apulse Wapper 스크립트를 통해 프로그램이 호출 될 때만 볼 수 있습니다.
Apulse 라이브러리를 /usr/lib 에 설치할 수 있습니다. 래퍼 스크립트가 필요하지 않지만 ALSA를 사용할 수 있음에도 불구하고 모든 응용 프로그램은 Pulseaudio API를 사용하려고합니다.
ELF 실행 파일 형식의 RPATH 속성이 있으며 동적 라이브러리를 검색하는 경로를 지정하는 데 사용됩니다. LD_LIBRARY_PATH 변수와 같지만 실행 가능합니다. apulse Launcher 스크립트는 애플리케이션을 시작하기 전에 LD_LIBRARY_PATH 값을 설정하는 것이므로 APULSE 라이브러리로가는 경로를 대상 실행 파일 자체로 굽을 수 있습니다. 그리고 도우미 스크립트없이 평소와 같이 시작합니다.
예를 들어, Firefox의 경우 다음과 같습니다.
# patchelf --set-rpath /usr/lib/apulse /usr/lib/firefox/libxul.so
어떤 이유로 rpath가 /usr/lib/firefox/firefox 자체로 설정된 경우 작동하지 않으므로 일부 실험이 작동하도록해야합니다.
Pulseaudio API의 많은 부분이 구현되지 않았습니다. 아무것도하지 않고 임의의 값을 반환하는 기능이 있습니다. 종종 애플리케이션이 구현되지 않은 것을 호출하려고하면 널 포인터를 피하려고 시도하는 동안 충돌합니다. 기본적으로 추적 레벨은 0 으로 설정되어있어 표준 출력에 메시지가 인쇄되지 않습니다. 해당 값을 1 으로 늘릴 수 있으며, 이는 모든 기능 호출을 보여주는 모임되지 않은 함수 호출 또는 2 로 표시 할 수 있습니다.
레벨을 변경하려면 cmake 호출 할 때 WITH_TRACE 매개 변수를 사용하십시오. cmake -DWITH_TRACE=1 ..
추적 레벨 1을 사용한 Apulse를 구축하면 문제가 해결되지 않지만 최소한 구현 된 기능으로 인해 충돌이 발생하는지 확인하는 데 도움이됩니다.
Apulse는 일반 ALSA 클라이언트 역할을합니다. 오디오 장치를 열려고 시도하고 때로는 실패합니다. 핵심적으로 Apulse는 오디오 믹싱이나 리샘플링을 수행하지 않습니다. 대신 plug , dmix 및 dsnoop ALSA 플러그인에 의존하며 일반적으로 기본적으로 활성화됩니다. 이 플러그인은 여러 오디오 소스를 처리하여 리샘플링을 수행하고 투명하게 믹싱합니다. 몇 년 동안 ALSA에는 해당 플러그인이 활성화되었습니다. 오디오는 아무것도 구성하지 않고 작동합니다. 그러나 모든 사람이 기본 설정을 사용하는 것은 아닙니다.
사용자 정의 구성에서 Apulse는 오디오를 출력 및/또는 캡처하지 못할 수 있습니다. 전혀 소리가 나지 않거나 한 번에 하나의 오디오 스트림 만 재생할 수 있습니다. 여러 스트림을 재생할 수있는 하드웨어 믹서가있는 어댑터는 여전히 여러 캡처 스트림을 처리 할 수 없을 수도 있습니다. 하드웨어에 따라 여전히 dmix 또는 dsnoop 플러그인이 필요할 수 있습니다. 또는 둘 다.
다시 말해, apulse가 작동하려면 설정을 동시에 연주하고 캡처 할 수 있어야합니다.
다른 응용 프로그램이 출력 사운드가 잘 작동하면 사용중인 애플리케이션이 제한 자체를 제한 할 수 있습니다.
예를 들어, Firefox에는 이제 파일 액세스를 차단하는 샌드 박스가 있습니다. 허용 된 경로의 사전 정의 된 목록이 있지만 ALSA 장치는 기본적으로 포함되지 않습니다. 다행히도 그 경로를 직접 추가 할 수 있습니다. "/dev/snd/"를 "security.sandbox.content.write_path_whitelist"에 추가하십시오 about:config "/dev/snd/"의 후행 슬래시가 필요합니다.
Firefox 58 (야간)은 샌드 박스를 조금 더 강화했습니다. 이제 ioctl() 호출도 금지되어 있지만 ALSA 라이브러리에서 사용됩니다. 이로 인해 후속 프로세스 종료로 샌드 박스 위반이 발생합니다. 매개 변수를 설정하여 예외를 추가 할 수 있습니다. security.sandbox.content.syscall_whitelist in about:config . 해당 필드는 쉼표로 분리 된 시스템 호출 번호 목록을 수용합니다. x86-64의 경우 16 , x86 또는 ARM의 경우 54 추가하십시오.
Firefox 60은 콘텐츠 샌드 박스를 더 많이 불렀지 만 동시에 오디오 액세스를 컨텐츠 프로세스에서 주요 프로세스로 옮겼습니다. Firefox 60에서 샌드 박스 설정의 변경 사항은 필요하지 않습니다.
소스 코드는 MIT 라이센스의 조건에 따라 배포됩니다. 전체 텍스트는 License.mit을 참조하십시오.
/3rdparty/pulseaudio-headers 에는 Pulseaudio 프로젝트의 일부가 포함되어 있으며 LGPLV2.1+ 용어에 따라 배포됩니다. 자세한 내용은 파일의 내용을 참조하십시오.