stream: interleave a random jingle every two songs
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
1f6937f22c
commit
3469b2680c
3 changed files with 36 additions and 1 deletions
|
|
@ -49,4 +49,5 @@ services:
|
|||
- "8000:8000" # flux HTTP : http://localhost:8000/radio.mp3
|
||||
volumes:
|
||||
- ./cache:/cache:ro # lecture seule : secours + résolution des chemins
|
||||
- ./jingles:/jingles:ro # jingles intercalés toutes les 2 chansons
|
||||
restart: unless-stopped
|
||||
|
|
|
|||
0
jingles/.gitkeep
Normal file
0
jingles/.gitkeep
Normal file
|
|
@ -71,7 +71,41 @@ backup = playlist(
|
|||
|
||||
# fallback préfère la source principale et bascule sur le cache si elle n'a
|
||||
# rien de prêt. track_sensitive=true : on ne coupe pas un morceau en cours.
|
||||
radio = fallback(track_sensitive=true, [main, backup])
|
||||
music = fallback(track_sensitive=true, [main, backup])
|
||||
|
||||
# --- Jingles : intercalés toutes les 2 chansons -----------------------------
|
||||
# Le dossier /jingles (monté depuis ./jingles) est parcouru et lu au hasard.
|
||||
# reload_mode="watch" : un jingle ajouté/retiré est pris en compte à chaud.
|
||||
# Dossier vide → source jamais prête → le switch retombe simplement sur la
|
||||
# musique, sans jingle et sans plantage.
|
||||
jingles = playlist(
|
||||
mode="randomize", reload_mode="watch", check_next=audio_only, "/jingles"
|
||||
)
|
||||
|
||||
# On compte les morceaux de musique réellement diffusés : on_track ne se
|
||||
# déclenche que sur la source effectivement tirée par le switch (les sources
|
||||
# non sélectionnées ne sont pas consommées), donc les jingles ne comptent pas.
|
||||
song_count = ref(0)
|
||||
music = source.on_track(music, fun(_) -> song_count := song_count() + 1)
|
||||
|
||||
# Prédicat du switch : vrai quand 2 chansons ont été diffusées depuis le dernier
|
||||
# jingle. Il remet le compteur à zéro au passage pour repartir sur un cycle neuf.
|
||||
def time_for_jingle() =
|
||||
if song_count() >= 2 then
|
||||
song_count := 0
|
||||
true
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
# switch track_sensitive : la décision est prise aux frontières de morceaux, on
|
||||
# ne coupe donc jamais un titre. Si les jingles ne sont pas prêts (dossier vide),
|
||||
# le switch enchaîne directement sur la musique.
|
||||
radio = switch(
|
||||
track_sensitive=true,
|
||||
[(time_for_jingle, jingles), ({true}, music)]
|
||||
)
|
||||
|
||||
# Transition douce entre les morceaux : fondu enchaîné de 3 s. La fin du
|
||||
# morceau courant se fond dans le début du suivant.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue