Claude 81b990a828 Add precise timestamp-based HTTP broadcast pacing
Implemented real-time pacing at the HTTP broadcast level based on audio
timestamps propagated from the pipeline. This provides much tighter control
over streaming bandwidth compared to the pipeline TimerNode alone.

Key changes:
- Created PcmChunk struct to carry both PCM bytes and timestamps
- Modified PCM channels from mpsc::channel<Vec<u8>> to mpsc::channel<PcmChunk>
- ByteStreamReader now extracts timestamps and shares them via Arc<RwLock<f64>>
- Broadcasters read current audio timestamp and pace output accordingly
- BROADCAST_MAX_LEAD_TIME set to 0.5s (vs 3.0s for pipeline TimerNode)

Benefits:
- Precise real-time delivery: ~92 KB/s for FLAC, ~86 KB/s for OGG-FLAC
- Lower latency for new clients (0.5s buffer vs 3s)
- Smoother streaming without bursts
- Works with both StreamingFlacSink and StreamingOggFlacSink

Tested:
- FLAC streaming: 92.27 KB/s average over 30s (verified with curl)
- OGG-FLAC streaming: 86.40 KB/s average over 30s
- Both formats correctly identified by file command
- Compilation successful with no errors

Affected files:
- streaming_flac_sink.rs: PcmChunk, ByteStreamReader, broadcast_flac_stream pacing
- streaming_ogg_flac_sink.rs: Same changes for OGG-FLAC variant
2025-11-12 08:50:10 +00:00
2025-11-03 14:45:37 +01:00
2025-09-07 12:14:50 +02:00
2025-10-05 22:03:13 +02:00
2025-09-06 17:45:28 +02:00
2025-10-29 22:36:36 +01:00
2025-10-29 22:35:53 +01:00
2025-10-29 22:35:53 +01:00
2025-11-03 14:45:37 +01:00
2025-11-03 14:45:37 +01:00
2025-10-05 22:03:13 +02:00
2025-10-20 19:50:58 +02:00
2025-11-03 14:45:37 +01:00
2025-10-05 22:03:13 +02:00

Développement de l'application PMOMusic en RUST

🚀 Démarrage rapide

Installation des dépendances (environnement sans sudo)

Pour compiler PMOMusic dans un environnement sans privilèges sudo (comme Claude Code) :

# 1. Installation automatique de libsoxr et libasound2 (une seule fois)
./setup-deps.sh

# 2. Créer le fichier setup-env.sh (une seule fois, voir INSTALL_LIBSOXR.md pour le contenu)
cat > setup-env.sh << 'EOF'
#!/bin/bash
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"
export RUSTFLAGS="-L $HOME/.local/usr/lib/x86_64-linux-gnu"
echo "Variables d'environnement configurées pour PMOMusic"
EOF

# 3. Configuration de l'environnement (à chaque nouvelle session)
source setup-env.sh

# 4. Compilation
cargo build

# 5. Test de l'exemple Radio Paradise
cargo run --package pmoparadise --example play_and_cache --features full -- 0

⚠️ Note : Le fichier setup-env.sh est dans .gitignore car il contient une configuration locale.

Documentation


Création de la structure

mkdir pizzicato
cd pizzicato
jj git init
touch Readme.md

Maintenant on peu créer l'application PMOMusic

cargo new PMOMusic

On ajoute un fichier Cargo.toml décrivant le workspace pizzicato qui ne contient que notre nouvelle application

[workspace]
members = ["PMOMusic"]

On crée le package pmoupnp

cargo new  pmoupnp --lib

Cela modifie automatiquement le fichier Cargo.toml créé juste avant. Dans ce package un sous module statevariable

cd pmoupnp/src
mkdir statevariable

Petite expériences jujutsu

  • Je veux voir l'historique
jj log
@  lkmlpmnk eric@coissac.eu 2025-09-12 09:48:38 a27b6a9a
│  On commence les states variables
○  mzvokmpk eric@coissac.eu 2025-09-12 09:32:27 926827f3
│  Retire le répertoir target du suivi
○  skknrvut eric@coissac.eu 2025-09-12 09:05:27 cbad5c34
│  Initialisation des l'arborescence de répertoires
◆  zzzzzzzz root() 00000000
  • Je veux me mettre dans un commit:
jj edit mzvokmpk

je veux créer un nouveau commit à la suite d'un autre et m'y placer

jj new mzvokmpk

mzvokmpk peut être @ pour dans le commit courant ou @- pour dans le parent

  • je veux arreter de suivre
    • un fichier
jj file untrack <filename> 
  • un répertoire
find dirname -type f -exec jj file untrack {} \;

Dans tous les cas ne pas oublier d'inscrire le fichier ou le repertoire dans le .gitignore

  • je veux déplacer un commit comme un sous commit d'un aute
jj rebase -d destination -r source

eventuellement faire un

jj resolve --all
jj rebase --continue

pour résoudre les conflits

Installer rust sur mac

brew install rustup-init
rustup-init
rustup default stable
Description
No description provided
Readme 242 MiB
Languages
Rust 73%
HTML 11.6%
Vue 9.5%
TypeScript 2.6%
Python 1.3%
Other 1.9%