Об этом проекте

CPAL (Cross-Platform Audio Library) — низкоуровневая библиотека Rust для ввода и вывода аудио. Она задумана как базовый слой; README направляет пользователей, которым нужно более высокоуровневое воспроизведение и запись, к Rodio или аналогичным библиотекам. Возможности, описанные в README: - Перечисление аудиохостов, устройств и поддерживаемых ими конфигураций потоков. - Поиск устройств по стабильному идентификатору или по роли устройства ввода/вывода по умолчанию. - Просмотр метаданных устройства: имя, производитель, тип и тип шины. - Создание потоков ввода и вывода с форматами сэмплов, определяемыми на этапе компиляции или во время выполнения. - Воспроизведение, пауза, а также запрос размера буфера и часов потока. Платформы и бэкенды по умолчанию: - 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 описаны зависимости для сборки (например, libasound2-dev на Debian/Ubuntu для ALSA, которая требуется даже при использовании JACK, PipeWire или PulseAudio), минимальные поддерживаемые версии Rust и ОС/рантайма для каждого бэкенда, а также шаги настройки для Android (cargo-apk, инициализация контекста JNI), ASIO (CPAL_ASIO_DIR, LLVM/Clang, LIBCLANG_PATH, Visual Studio, кросс-компиляция MinGW-w64) и WebAssembly. Руководство по устранению неполадок охватывает отсутствующие устройства по умолчанию, конфликты устройств ALSA/PipeWire/PulseAudio (DeviceBusy, когда звуковой сервер удерживает устройство ALSA по умолчанию), настройку размера буфера и связанные с ней компромиссы по задержке, глитчи ресемплинга PipeWire, повышение приоритета реального времени ALSA (SCHED_FIFO, CAP_SYS_NICE, лимиты rtprio, rtkit через D-Bus) и ошибки сборки. Обсуждаются дуплексные устройства: CPAL не составляет устройства самостоятельно и требует устройство, которое уже заявляет и захват, и воспроизведение, с плагином ALSA asym или портами клиента JACK в качестве вариантов. Репозиторий поставляет примеры в каталоге examples/ (например, beep), запускаемые командой cargo run --example beep с флагами функциональности для платформенно-специфичных бэкендов. Лицензия — Apache-2.0.