Skip to content

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 (shuffle avec data.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 ​

CommandeParamètresDescription
play-Lecture
pause-Pause
next-Piste suivante
shuffledata.enabled (bool, optionnel)Activer/désactiver le shuffle
volumedata.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 ​

ThemeDescription
streamoosTheme StreamooS par defaut
minimal-darkVariante 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 ​

OSImplémentationStatut
WindowsWinRT natif via NAPI (native/)Fonctionnel
LinuxMPRIS (énumération D-Bus)Fonctionnel (Supporte tout lecteur compatible)
macOS-Hors périmètre (voir #314)

Commandes WS ​

CommandeDescription
start_monitoring / stop_monitoringDemarrer/arreter le polling
get_stateRecuperer l'etat courant
play / resumeLecture
pausePause
toggle_play / play_pauseBasculer play/pause
nextPiste suivante
prev / previousPiste precedente
set_overlay_configdata.enabled, data.radioSource, data.position, data.showArtwork, data.showProgress, data.theme
select_sourcedata.radioSource (auto, khinsider, smtc)

Themes d'overlay ​

ThemeDescription
streamoosTheme StreamooS par defaut
animal-crossingInspire Animal Crossing
retro-rpgBoite de dialogue RPG retro
modern-gamerHUD gamer moderne
ghibliPalette Ghibli douce
xpFenetre Windows XP
glassVerre depoli
noisyTexture granuleuse
minimal-darkVariante sombre minimaliste

Contrat d'etat (SmtcState) ​

typescript
{
  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èreKHInsiderSMTC
OAuth requisNonNon
Contrôle lectureOuiOui
MétadonnéesOuiOui
Update en temps réelThrottlé 3sPolling 1000ms
Dépendance externeURL playlistLecteur SMTC/MPRIS
StatutStableWindows stable / Linux partiel

Released under the MIT License.