feat: Add RadioParadiseStreamSource - pmoaudio node for Radio Paradise

Implement a new pmoaudio source node that streams Radio Paradise blocks
with automatic TrackBoundary insertion at the correct timing.

Features:
- Downloads and decodes FLAC blocks from Radio Paradise API
- Queue management for block IDs via push_block_id()
- Recent blocks cache (10 blocks) to avoid re-downloads
- Automatic TrackBoundary insertion based on sample count timing
- Converts Song metadata to TrackMetadata with cover URLs
- Timeout of 3 seconds for new block IDs (radio real-time)
- Support for 16-bit and 24-bit FLAC audio

Architecture:
- RadioParadiseStreamSourceLogic: Pure business logic implementing NodeLogic
- RadioParadiseStreamSource: Wrapper using Node<> pattern
- Uses logic_mut() for push_block_id() configuration

The node emits:
- TopZeroSync at block start
- TrackBoundary before each song (with same order as next chunk)
- Audio chunks (I16 or I24)
- EndOfStream on timeout or completion

New pmoaudio feature gate with dependencies on:
- pmoaudio, pmoflac, pmometadata, futures-util
This commit is contained in:
Claude
2025-11-04 23:28:13 +00:00
parent 8b0317f88d
commit e084e75faa
4 changed files with 411 additions and 0 deletions

4
Cargo.lock generated
View File

@@ -2908,11 +2908,15 @@ dependencies = [
"ffmpeg-next",
"flacenc",
"futures",
"futures-util",
"hex",
"hound",
"pmoaudio",
"pmoaudiocache",
"pmoconfig",
"pmocovers",
"pmoflac",
"pmometadata",
"pmoplaylist",
"pmoserver",
"pmosource",