Replace rodio with cpal for AudioSink
- 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)
This commit is contained in:
74
INSTALL_NOTES.md
Normal file
74
INSTALL_NOTES.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# 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.
|
||||
```
|
||||
Reference in New Issue
Block a user