- 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)
75 lines
1.8 KiB
Markdown
75 lines
1.8 KiB
Markdown
# 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** :
|
|
|
|
```bash
|
|
# 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`
|
|
|
|
```bash
|
|
# 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** :
|
|
```rust
|
|
let mut resampler = ResamplingNode::new(48000); // Force 48kHz
|
|
```
|
|
|
|
---
|
|
|
|
## Compilation
|
|
|
|
```bash
|
|
# Compiler tout le workspace (nécessite libsoxr)
|
|
cargo build
|
|
|
|
# Compiler sans pmoaudio (si libsoxr manque)
|
|
cargo build --package pmoplaylist
|
|
cargo build --package pmoaudiocache
|
|
# etc.
|
|
```
|