Files
pmomusic/INSTALL_LIBSOXR.md
Claude 971f0ba9d6 test: Add comprehensive test coverage for PlaylistSource and ResamplingNode
This commit adds extensive unit and integration tests for the audio pipeline
components that were previously untested.

## ResamplingNode Tests (pmoaudio/src/nodes/resampling_node.rs)
- Added 7 test functions covering:
  - Helper function tests: extract_channels_i16/i24
  - Reconstruction tests: reconstruct_chunk_i16/i24
  - Logic tests: passthrough when sample rate matches
  - Async tests: verify sync markers pass through unchanged
  - Integration test: actual 44.1kHz → 48kHz resampling

## PlaylistSource Tests (pmoaudio-ext/src/sources/playlist_source.rs)
- Added 10 test functions covering:
  - Stream validation: valid/invalid channel counts and bit depths
  - PCM conversion: bytes_to_segment for I16/I24/I32 formats
  - Mono/stereo handling: verify channel duplication
  - Error handling: unsupported bit depth rejection
  - Type safety: compilation verification

## Bug Fixes
- Fixed imports: Node and NodeLogic moved from nodes to pipeline module
- Fixed AudioCache import: use pmoaudiocache::Cache with alias
- Fixed API calls in ResamplingNode:
  - BitDepth::from_audio_chunk() → match pattern
  - .stereo() → .get_frames()
  - .to_i32() → .as_i32() for I24
  - .sample_rate() → .get_sample_rate()

## Documentation
- Added INSTALL_LIBSOXR.md with detailed installation instructions
- Documents local libsoxr installation without sudo privileges
- Provides troubleshooting guide for build and test environments

All tests pass successfully (17 tests total: 7 ResamplingNode + 10 PlaylistSource).
2025-11-05 14:16:12 +00:00

3.5 KiB

Installation de libsoxr sans droits sudo

Ce document explique comment installer libsoxr localement sans privilèges administrateur, nécessaire pour compiler pmoaudio avec le support de resampling.

Contexte

Le crate soxr (utilisé par ResamplingNode) nécessite la bibliothèque système libsoxr. Dans un environnement sans droits sudo, voici comment l'installer localement.

Méthode : Installation locale via apt-get download

1. Télécharger les packages .deb

cd ~/.local
apt-get download libsoxr-dev libsoxr0

Cela télécharge les fichiers .deb sans les installer système-wide.

2. Extraire les packages

dpkg -x libsoxr-dev_*.deb .
dpkg -x libsoxr0_*.deb .

Les fichiers sont extraits dans ~/.local/usr/lib/x86_64-linux-gnu/ et ~/.local/usr/include/.

3. Configurer les variables d'environnement

Ajouter à votre ~/.bashrc ou exporter dans votre session :

export PKG_CONFIG_PATH="/root/.local/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH"
export LD_LIBRARY_PATH="/root/.local/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"

IMPORTANT: Remplacer /root/ par le chemin de votre home directory ($HOME ou ~).

4. Vérifier l'installation

pkg-config --libs --cflags soxr

Devrait retourner :

-I/root/.local/usr/include -L/root/.local/usr/lib/x86_64-linux-gnu -lsoxr

Utilisation avec Cargo

Pour les builds réguliers

Les variables d'environnement suffisent pour cargo build et cargo run.

Pour les tests

Les tests nécessitent également la configuration du linker. Deux options :

Option A : Configuration locale du projet (NON RECOMMANDÉ pour le versioning)

Créer .cargo/config.toml dans chaque crate :

[build]
rustflags = ["-L", "/root/.local/usr/lib/x86_64-linux-gnu"]

⚠️ NE PAS committer ces fichiers - ils contiennent des chemins spécifiques à votre installation.

Option B : Variables d'environnement pour cargo test

export PKG_CONFIG_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH"
export LD_LIBRARY_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
cargo test

Pour d'autres distributions

macOS (avec Homebrew)

brew install libsoxr

Debian/Ubuntu (avec sudo)

sudo apt-get install libsoxr-dev

Fedora/RHEL

sudo dnf install soxr-devel

Troubleshooting

Erreur : "Package 'soxr' was not found"

  • Vérifier que PKG_CONFIG_PATH contient le bon chemin
  • Vérifier que le fichier soxr.pc existe dans ce répertoire
  • Pour cargo build : vérifier LD_LIBRARY_PATH
  • Pour cargo test : utiliser la configuration rustflags (Option A ci-dessus)

Le test compile mais échoue au runtime

error while loading shared libraries: libsoxr.so.0: cannot open shared object file

Solution : Ajouter LD_LIBRARY_PATH également pour l'exécution :

export LD_LIBRARY_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
cargo test

Notes pour Claude Code sessions

Pour les futures sessions Claude :

  1. Exporter les variables d'environnement en début de session
  2. NE PAS créer de fichiers .cargo/config.toml dans le projet
  3. Si nécessaire pour les tests, les créer localement mais ne pas les committer
  4. Documenter toute difficulté d'installation ici

Références