프로젝트 소개
CPAL(Cross-Platform Audio Library)은 오디오 입력 및 출력을 위한 저수준 Rust 라이브러리입니다. 기반 계층으로 설계되었으며, README에서는 더 높은 수준의 재생 및 캡처를 원하는 사용자에게 Rodio 또는 유사한 라이브러리를 사용하도록 안내합니다.
README에 설명된 기능:
- 오디오 호스트, 장치 및 지원되는 스트림 구성을 열거합니다.
- 안정적인 ID 또는 기본 입력/출력 역할로 장치를 조회합니다.
- 장치 메타데이터(이름, 제조업체, 유형, 버스 유형)를 검사합니다.
- 컴파일 타임 또는 런타임 샘플 형식으로 입력 및 출력 스트림을 구축합니다.
- 스트림의 버퍼 크기와 클록을 재생, 일시 정지 및 쿼리합니다.
플랫폼 및 기본 백엔드:
- Android: AAudio
- BSD: ALSA (선택 사항: JACK, PipeWire, PulseAudio)
- iOS, macOS, tvOS, visionOS: CoreAudio (macOS 선택 사항: JACK)
- Linux: ALSA (선택 사항: JACK, PipeWire, PulseAudio)
- WebAssembly: Web Audio API (선택 사항: Audio Worklet)
- Windows: WASAPI (선택 사항: ASIO, JACK)
선택적 기능으로는 asio, audioworklet, custom, jack, pipewire, pulseaudio, realtime, realtime-dbus, wasm-bindgen이 있습니다. README에는 빌드 의존성(예: Debian/Ubuntu에서 ALSA용 libasound2-dev, JACK, PipeWire 또는 PulseAudio를 사용하는 경우에도 필요), 백엔드별 최소 지원 Rust 및 OS/런타임 버전, Android(cargo-apk, JNI 컨텍스트 초기화), ASIO(CPAL_ASIO_DIR, LLVM/Clang, LIBCLANG_PATH, Visual Studio, MinGW-w64 교차 컴파일) 및 WebAssembly 설정 단계가 문서화되어 있습니다.
문제 해결 지침에서는 기본 장치 누락, ALSA/PipeWire/PulseAudio 장치 경합(사운드 서버가 ALSA 기본 장치를 점유할 때 DeviceBusy), 버퍼 크기 구성 및 지연 시간 트레이드오프, PipeWire 리샘플링 글리치, ALSA 실시간 우선순위 승격(SCHED_FIFO, CAP_SYS_NICE, rtprio 제한, D-Bus를 통한 rtkit), 빌드 오류를 다룹니다. 듀플렉스 장치에 대해서도 논의합니다. CPAL은 장치를 자체적으로 합성하지 않으며 캡처와 재생을 모두 이미 주장하는 장치가 필요하고, ALSA asym 플러그인 또는 JACK 클라이언트 포트가 옵션입니다.
저장소는 examples/ 아래에 예제(예: beep)를 제공하며, cargo run --example beep 및 플랫폼별 백엔드용 기능 플래그로 실행할 수 있습니다. 라이선스는 Apache-2.0입니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.