Sources Audio (Radios)
StreamooS intègre deux sources audio indépendantes : KHInsider Radio et SMTC (System Media Transport Controls, le lecteur média du système). Chacune tourne dans son propre contexte et synchronise son état vers les overlays via WebSocket.
L'intégration directe à l'API Spotify a été retirée (ADR-012). Spotify reste pilotable, mais comme n'importe quelle autre application, à travers SMTC.
KHInsider Radio
Lecture de musique de jeux depuis les playlists KHInsider.
Architecture
La fenêtre cachée charge l'URL de la playlist KHInsider configurée dans .env.local (KHINSIDER_URL). Le handler scrape le DOM de la fenêtre pour lire la piste en cours, le temps écoulé, et la durée.
Comportement
- Watchdog : vérifie l'état toutes les 5s. Si aucune update depuis 15s, la fenêtre est marquée "stale" et un retry est déclenché.
- Shuffle persistant : reste actif jusqu'à désactivation manuelle explicite (
shuffleavecdata.enabled: false). - Throttling : les updates de position (
progressMs) sont émises au maximum toutes les 3s pendant la lecture stable. Les transitions (play/pause/next) sont immédiates. - Chargement différé : la fenêtre KHInsider n'est instanciée qu'au premier usage.
Commandes WS
| Commande | Paramètres | Description |
|---|---|---|
play | - | Lecture |
pause | - | Pause |
next | - | Piste suivante |
shuffle | data.enabled (bool, optionnel) | Activer/désactiver le shuffle |
volume | data.value (0–100) | Régler le volume |
get_state | - | Recuperer l'etat courant |
activate | - | Activer le module |
deactivate | - | Desactiver le module |
diagnostic | - | Informations de debug de la fenetre |
Themes d'overlay
| Theme | Description |
|---|---|
streamoos | Theme StreamooS par defaut |
minimal-dark | Variante sombre minimaliste |
SMTC (System Media Transport Controls)
Lecture des métadonnées du lecteur audio/vidéo actif sur le système, sans OAuth. Permet également de contrôler la lecture.
Fonctionne avec : l'application Spotify, YouTube Music, Tidal, VLC, Windows Media Player, et tout lecteur exposant SMTC (Windows) ou MPRIS (Linux).
Architecture
Interpolation Locale
Pour garantir une progression visuelle fluide entre les mises à jour throttlées (3s) et les ticks de polling (1000ms), l'interface du Dashboard effectue une interpolation locale de 1s en utilisant le timestamp lastUpdatedAt.
Polling intelligent
Le polling de 500ms est suspendu automatiquement dans ces conditions :
- App réduite en tray + aucun client WS connecté
- Système en veille (via
powerMonitor)
Il reprend immédiatement à la réactivation.
Disponibilité par OS
| OS | Implémentation | Statut |
|---|---|---|
| Windows | WinRT natif via NAPI (native/) | Fonctionnel |
| Linux | MPRIS (énumération D-Bus) | Fonctionnel (Supporte tout lecteur compatible) |
| macOS | - | Hors périmètre (voir #314) |
Commandes WS
| Commande | Description |
|---|---|
start_monitoring / stop_monitoring | Demarrer/arreter le polling |
get_state | Recuperer l'etat courant |
play / resume | Lecture |
pause | Pause |
toggle_play / play_pause | Basculer play/pause |
next | Piste suivante |
prev / previous | Piste precedente |
set_overlay_config | data.enabled, data.radioSource, data.position, data.showArtwork, data.showProgress, data.theme |
select_source | data.radioSource (auto, khinsider, smtc) |
Themes d'overlay
| Theme | Description |
|---|---|
streamoos | Theme StreamooS par defaut |
animal-crossing | Inspire Animal Crossing |
retro-rpg | Boite de dialogue RPG retro |
modern-gamer | HUD gamer moderne |
ghibli | Palette Ghibli douce |
xp | Fenetre Windows XP |
glass | Verre depoli |
noisy | Texture granuleuse |
minimal-dark | Variante sombre minimaliste |
Contrat d'etat (SmtcState)
{
connected: boolean // lecteur detecte
isPlaying: boolean
title: string
artist: string
albumTitle?: string
artworkUrl?: string
progressMs: number
durationMs: number
radioSource: 'khinsider' | 'smtc'
mediaApp: string // app id detecte (AUMID Windows / bus MPRIS), '' si inconnu
mediaAppLabel: string // libelle humain, '' si inconnu
lastUpdatedAt: number // timestamp Unix ms
platform?: string // 'win32' | 'linux' | 'darwin'
overlayConfig: {
enabled: boolean
radioSource: 'auto' | 'khinsider' | 'smtc'
position: OverlayPosition
showArtwork: boolean
showProgress: boolean
theme: RadioOverlayTheme
}
}Comparaison des sources
| Critère | KHInsider | SMTC |
|---|---|---|
| OAuth requis | Non | Non |
| Contrôle lecture | Oui | Oui |
| Métadonnées | Oui | Oui |
| Update en temps réel | Throttlé 3s | Polling 1000ms |
| Dépendance externe | URL playlist | Lecteur SMTC/MPRIS |
| Statut | Stable | Windows stable / Linux partiel |
