- Replace rodio dependency with cpal in pmoaudio/Cargo.toml - Add AudioSink node using cpal for direct hardware access - Add SharedBuffer for async/callback communication - Convert all audio formats to F32 for cpal - Improve latency and control over audio stream - Add WHY_CPAL.md explaining the technical choice - Update INSTALL_NOTES.md with ALSA requirements - Export AudioSink in lib.rs and mod.rs Benefits: - Minimal latency (no extra layers) - Direct hardware control - Lighter binary (~3.8 MB less) - Same ALSA dependency as rodio on Linux - Cross-platform (ALSA/JACK on Linux, CoreAudio on macOS, WASAPI on Windows)
1.8 KiB
1.8 KiB
Notes d'installation pour PMOMusic
Prérequis système
libsoxr (obligatoire pour pmoaudio - resampling)
La bibliothèque libsoxr est requise pour le resampling audio dans pmoaudio.
libasound2/ALSA (obligatoire pour pmoaudio - lecture audio sur Linux)
La bibliothèque ALSA est requise pour AudioSink via cpal sur Linux. Sur macOS et Windows, aucune dépendance externe n'est nécessaire (CoreAudio et WASAPI sont utilisés).
Installation :
# Debian/Ubuntu
sudo apt-get install libsoxr-dev libasound2-dev
# Fedora/RHEL
sudo dnf install libsoxr-devel alsa-lib-devel
# Arch Linux
sudo pacman -S libsoxr alsa-lib
# macOS (Homebrew) - ALSA non nécessaire sur macOS
brew install libsoxr
# Alpine Linux
apk add soxr-dev alsa-lib-dev
Sans privilèges root : Si vous n'avez pas les droits sudo, consultez INSTALL_LIBSOXR.md pour l'installation locale de libsoxr et libasound2.
Nouveaux composants
PlaylistSource (pmoaudio-ext)
Source audio qui lit une playlist pmoplaylist et diffuse les pistes en continu.
Feature : playlist
# Compiler avec la feature playlist
cargo build --package pmoaudio-ext --features playlist
⚠️ Important : Cette source émet du PCM avec sample_rate et bit_depth variables. Pour un flux homogène, ajoutez dans le pipeline :
ResamplingNode(normalise le sample_rate)ToI24Node/ToI16Node(normalise la profondeur de bits)
ResamplingNode (pmoaudio)
Nœud générique qui normalise le sample_rate vers une valeur cible fixe.
Usage :
let mut resampler = ResamplingNode::new(48000); // Force 48kHz
Compilation
# Compiler tout le workspace (nécessite libsoxr)
cargo build
# Compiler sans pmoaudio (si libsoxr manque)
cargo build --package pmoplaylist
cargo build --package pmoaudiocache
# etc.