SAM Broadcaster : jouer un bip horaire avec un script PAL

Un bip horaire permet de marquer le début d’une nouvelle heure dans une webradio. C’est simple, reconnaissable, et cela donne un côté “antenne” assez propre quand c’est bien intégré.

Avec SAM Broadcaster, on peut automatiser ce bip avec un script PAL. Le script attend le bon moment, ajoute le fichier audio dans la file d’attente ou le joue via un player auxiliaire, puis recommence à l’heure suivante.

Le but n’est pas seulement de faire jouer un bip.wav. Le vrai sujet est de le faire sans couper brutalement un morceau, sans casser la programmation, sans oublier le script après un redémarrage, et sans envoyer un test foireux en direct. L’auditeur pardonne beaucoup. Mais pas toujours un bip à 14h37.

Principe du script PAL

PAL, pour Playlist Automation Language, permet d’automatiser des actions dans SAM Broadcaster : ajouter des titres, attendre une heure précise, lancer une catégorie, manipuler la queue ou réagir à certains événements.

Pour un bip horaire, le principe est simple :

  1. préparer un fichier audio court ;
  2. indiquer son chemin au script PAL ;
  3. attendre le début de l’heure ;
  4. jouer ou insérer le bip ;
  5. recommencer à l’heure suivante.

La commande PAL importante est :

PAL.WaitForTime(T['XX:00:00']);Code language: CSS (css)

Elle demande au script d’attendre le prochain début d’heure. La documentation Spacial recommande justement les commandes WaitForXXX, dont PAL.WaitForTime(), pour éviter les boucles qui tournent inutilement en continu.

Préparer le fichier audio du bip

Commencez par créer un fichier audio court, propre et normalisé.

Recommandations :

  • durée courte : 1 à 5 secondes ;
  • format simple : WAV ou MP3 ;
  • niveau sonore cohérent avec votre antenne ;
  • pas de silence trop long au début ;
  • nom de fichier simple ;
  • chemin local stable.

Exemple de chemin :

C:\SAM\jingles\bip-horaire.wavCode language: CSS (css)

Évitez les chemins dans Downloads, sur le Bureau ou dans un dossier synchronisé avec un cloud. Un bip horaire doit vivre dans un dossier stable. Pas dans un coin où Windows, OneDrive ou votre futur vous-même peuvent le déplacer.

Méthode 1 : ajouter le bip en haut de la queue

La méthode la plus simple consiste à ajouter le fichier audio en haut de la queue au début de chaque heure.

Script PAL :

{ Script PAL - Bip horaire simple pour SAM Broadcaster }

PAL.Loop := True;

while True do
begin
  PAL.WaitForTime(T['XX:00:00']);

  Queue.AddFile('C:\SAM\jingles\bip-horaire.wav', ipTop);
end;Code language: PHP (php)

Ce script attend le début de l’heure, ajoute le bip en haut de la queue, puis recommence.

Avantage : il est simple et peu intrusif.

Limite : le bip ne jouera pas forcément exactement à la seconde près si un morceau est déjà en cours. Il sera placé en haut de la queue et jouera au prochain enchaînement. Pour beaucoup de webradios, c’est suffisant et plus propre qu’une coupure forcée.

Méthode 2 : jouer le bip immédiatement

Si vous voulez forcer le bip au début de l’heure, vous pouvez ajouter le fichier puis passer au titre suivant. C’est proche de l’ancien script historique.

{ Script PAL - Bip horaire avec passage immédiat }

function ActivePlayer: TPlayer; forward;

PAL.Loop := True;

while True do
begin
  PAL.WaitForTime(T['XX:00:00']);

  Queue.AddFile('C:\SAM\jingles\bip-horaire.wav', ipTop);
  ActivePlayer.FadeToNext;
end;

function ActivePlayer: TPlayer;
begin
  if DeckA.Status = psPlaying then
    Result := DeckA
  else
    Result := DeckB;
end;Code language: PHP (php)

Cette version force le passage vers le bip en utilisant le player actif.

Avantage : le bip passe beaucoup plus près du début de l’heure.

Limite : cela peut couper un morceau, un jingle, une chronique ou une intervention. À utiliser uniquement si votre format d’antenne accepte ce comportement.

Pour une radio musicale, je préfère souvent la première méthode. Pour une horloge stricte type top horaire, news ou programme très formaté, la seconde peut se défendre.

Méthode 3 : utiliser une catégorie dédiée

Une approche plus propre consiste à placer le bip dans une catégorie SAM dédiée, par exemple TimeSignal ou Bip horaire, puis à demander au script de jouer un élément de cette catégorie.

Cette méthode est plus maintenable si vous voulez remplacer le bip sans modifier le script. Vous changez simplement le fichier dans SAM Broadcaster.

Exemple conceptuel :

{ Script PAL - Bip horaire depuis une catégorie }

PAL.Loop := True;

while True do
begin
  PAL.WaitForTime(T['XX:00:00']);

  Cat['TimeSignal'].QueueTop(smRandom, EnforceRules);
end;Code language: PHP (php)

Ce script prend un élément depuis la catégorie TimeSignal et le place en haut de la queue.

Avantage : vous pouvez gérer le bip depuis la bibliothèque SAM, avec les métadonnées, catégories et règles habituelles.

Limite : il faut que la catégorie existe exactement avec le même nom. Une faute d’espace ou d’accent suffit à casser le script. PAL est patient, mais pas télépathe.

Faut-il jouer le bip exactement à 00:00 ?

Tout dépend de votre format d’antenne.

ObjectifMéthode conseillée
Bip discret entre deux titresAjouter le bip en haut de la queue
Top horaire strictForcer le passage au bip
Journal ou rendez-vous à heure fixeUtiliser une horloge de programmation plus complète
Radio musicale soupleÉviter les coupures forcées
Antenne très formatéeUtiliser catégorie dédiée, AUX player ou clockwheel

Un bip pile à l’heure est satisfaisant sur le papier. Mais s’il coupe le refrain final d’un morceau toutes les heures, il devient vite moins charmant.

Tester le script sans attendre une heure

Pour tester le script, ne restez pas assis devant SAM à attendre 59 minutes. Modifiez temporairement l’heure cible.

Exemple : attendre la prochaine minute :

PAL.WaitForTime('+00:01:00');Code language: JavaScript (javascript)

Ou tester une heure précise proche :

PAL.WaitForTime(T['14:35:00']);Code language: CSS (css)

Une fois le test validé, remettez :

PAL.WaitForTime(T['XX:00:00']);Code language: CSS (css)

Testez toujours hors antenne ou sur un serveur de test si possible. Un script PAL qui part en boucle en direct, c’est un excellent moyen de transformer un bip horaire en art contemporain.

Tester le fichier avant de lancer le script

Avant d’accuser PAL, vérifiez que le fichier audio est lisible par SAM Broadcaster.

  • importez le fichier dans SAM ;
  • jouez-le manuellement dans un deck ;
  • vérifiez le niveau sonore ;
  • vérifiez qu’il n’a pas de silence au début ;
  • vérifiez que le chemin du fichier est correct ;
  • évitez les caractères spéciaux dans le nom de fichier.

Un bon nom de fichier :

bip-horaire.wavCode language: CSS (css)

Un nom à éviter :

BIP HORAIRE FINAL V2 (ok vraiment).wavCode language: CSS (css)

Le second peut fonctionner. Mais il vous jugera silencieusement depuis le dossier.

Éviter les doublons de bip

Si vous lancez plusieurs scripts PAL similaires, vous pouvez ajouter deux fois le bip dans la queue. Vérifiez donc vos scripts actifs.

Avant le direct :

  • ouvrez la fenêtre PAL Scripts ;
  • arrêtez les anciens scripts de test ;
  • gardez une seule version du script horaire active ;
  • surveillez la queue au changement d’heure ;
  • vérifiez les logs ou messages éventuels de SAM.

Deux bips à la même heure, c’est rarement deux fois plus professionnel.

Alternative : jouer le bip quelques secondes avant l’heure

Si votre fichier audio contient plusieurs “pips” qui doivent se terminer exactement à l’heure pleine, programmez-le quelques secondes avant.

Exemple : un signal de 5 secondes lancé à XX:59:55 pour arriver à l’heure pleine.

PAL.WaitForTime(T['XX:59:55']);Code language: CSS (css)

C’est le principe utilisé par certains signaux horaires : plusieurs bips courts avant le top exact.

Attention toutefois : si vous forcez un fade à ce moment-là, vous couperez ce qui est en cours cinq secondes avant l’heure. C’est acceptable dans une radio très formatée, moins dans une programmation musicale souple.

Version avec bip à 5 secondes de l’heure

Voici une version simple qui ajoute le bip en haut de queue à 5 secondes de l’heure.

{ Script PAL - Signal horaire à 5 secondes de l'heure }

PAL.Loop := True;

while True do
begin
  PAL.WaitForTime(T['XX:59:55']);

  Queue.AddFile('C:\SAM\jingles\bip-horaire.wav', ipTop);
end;Code language: PHP (php)

Si vous voulez forcer le passage immédiat :

{ Script PAL - Signal horaire forcé à 5 secondes de l'heure }

function ActivePlayer: TPlayer; forward;

PAL.Loop := True;

while True do
begin
  PAL.WaitForTime(T['XX:59:55']);

  Queue.AddFile('C:\SAM\jingles\bip-horaire.wav', ipTop);
  ActivePlayer.FadeToNext;
end;

function ActivePlayer: TPlayer;
begin
  if DeckA.Status = psPlaying then
    Result := DeckA
  else
    Result := DeckB;
end;Code language: PHP (php)

Choisissez cette option seulement si le format d’antenne le justifie.

Dépannage : le bip ne joue pas

Si le bip ne se joue pas, vérifiez ces points :

  • le script PAL est bien démarré ;
  • le chemin du fichier est correct ;
  • le fichier existe encore à cet emplacement ;
  • SAM peut lire le fichier manuellement ;
  • le script n’est pas bloqué sur une heure passée ;
  • le fichier n’est pas déjà dans une catégorie mal nommée ;
  • la queue n’est pas verrouillée par un autre script ;
  • un autre script PAL ne vide pas la queue juste après.

Si vous utilisez une catégorie, vérifiez le nom exact. TimeSignal, Time Signal et Timesignal ne sont pas forcément équivalents.

Dépannage : le bip joue trop souvent

Si le bip se répète, cherchez d’abord une boucle mal contrôlée ou plusieurs scripts actifs.

Points à vérifier :

  • un seul script horaire est lancé ;
  • le script contient bien PAL.WaitForTime() dans la boucle ;
  • le test +00:01:00 n’a pas été oublié ;
  • un autre script ne joue pas aussi un top horaire ;
  • la catégorie utilisée ne contient pas plusieurs versions du même bip.

Le classique : on teste à la minute, tout fonctionne, puis on oublie de remettre l’heure pleine. Résultat : un bip toutes les minutes. Très utile pour mesurer le regret.

Dépannage : le bip coupe les morceaux trop brutalement

Si le bip coupe les titres trop brutalement, retirez ActivePlayer.FadeToNext et contentez-vous de placer le bip en haut de la queue.

Version douce :

Queue.AddFile('C:\SAM\jingles\bip-horaire.wav', ipTop);Code language: JavaScript (javascript)

Version forcée :

Queue.AddFile('C:\SAM\jingles\bip-horaire.wav', ipTop);
ActivePlayer.FadeToNext;Code language: JavaScript (javascript)

La version douce respecte mieux la programmation. La version forcée respecte mieux l’horloge. À vous de choisir le chef d’orchestre.

Checklist avant mise en antenne

  • Créer un fichier audio court, propre et normalisé.
  • Le placer dans un dossier stable.
  • Tester la lecture manuelle dans SAM.
  • Choisir entre insertion en queue et passage forcé.
  • Tester le script avec une heure proche.
  • Remettre T['XX:00:00'] après les tests.
  • Arrêter les anciens scripts de test.
  • Surveiller la queue au premier changement d’heure.
  • Faire un test hors antenne si possible.
  • Sauvegarder la configuration SAM.

Articles liés sur SkyMinds

À retenir

Pour jouer un bip horaire dans SAM Broadcaster, utilisez un script PAL basé sur PAL.WaitForTime(). La version la plus douce ajoute le bip en haut de la queue à chaque nouvelle heure.

PAL.Loop := True;

while True do
begin
  PAL.WaitForTime(T['XX:00:00']);

  Queue.AddFile('C:\SAM\jingles\bip-horaire.wav', ipTop);
end;Code language: PHP (php)

Si vous avez besoin d’un top horaire strict, vous pouvez forcer le passage avec FadeToNext, mais cela peut couper ce qui est en cours.

Le bon choix dépend de votre antenne : souple et musicale, ou stricte et formatée. Dans tous les cas, testez hors direct, gardez un seul script actif, et évitez de transformer un bip horaire en métronome infernal.

Sources

Gravatar for Matt Biscay

Je suis Matt Biscay, développeur WordPress & WooCommerce certifié chez Codeable, administrateur système et enseignant.

J’aide les entreprises à créer, optimiser et fiabiliser leurs sites WordPress avec une approche technique propre : performance, sécurité, maintenance, développement sur mesure et résolution de problèmes complexes.

Sur Skyminds, je partage des tutoriels WordPress, WooCommerce, Linux et administration système, avec des solutions testées sur des cas réels et pensées pour durer.

Découvrez mes services WordPress et WooCommerce.

18 pensées sur “SAM Broadcaster : jouer un bip horaire avec un script PAL”

  1. bjr Matt bravo pr le script(pal) et si a la place du fichier je veux fait passer 1 playlist? j’ai essayé de modifier ton script en mettant (c:playlist.m3u’,ipTop) à la place du fichier mp3, malheuresement ça ne marche pas comme je veux, ou alors je me suis trompé quelque part? aide moi stp. Merci d’avance.

    Reply
  2. Samut zenith,

    Si tu veux charger une playlist, il faut que tu utilises la fonction AddList() et non Addfile(). Essaie ceci :

    {On ajoute le fichier bip}
    Queue.AddList('C :playlist.m3u',ipTop)
    Reply
  3. Merci pour ta reponse Matt effectivement ça marche nickel.
    1 autre inquietude stp, il y t-il un moyen pour equilibrer le niveaux du volume des chanson?
    une fois encore merci pour ta reponse

    Reply
  4. Bonjour, merci pour le script,

    par contre si on ne veux pas que la lecture se fasse sur un deck (et donc “coupe” le titre qui est en cours de diffusion), comment s’y prend on ?

    L’option de lire le bip horaire avec le SoundFX pourrait etre une solution, avec un parametre permettant de gerer le fade de Deck en cours de lecture.

    quelqu’un a une idée sur le code que ca donnerait? mes competences en pal sont plus que limitée (j’ai déjà bien galeré pour comprendre qu’avec un “PAL.Loop := True ; le script se repetera de lui meme :( )

    Tant que j’y suis, peut on trouver des tutos “super simple” sur le Palscript (genre avec des exemples concrets) quelque part? pas evident de comprendre le Pal quand le seul language qu’on connait est le html ;)

    Reply
  5. Salut le script fonctionne mais je suis obligé de le reactiver apres chaque heure.
    Y a t il une soluce pour qu il reste tout le temps actif.
    Merci

    Reply
  6. salut à tous,

    voila, jai donc utiliser le script pour le bip horaire, MAIS, étant assez créatif, jai décider de mettre un top horaire correspondant a chaque heure :

    PAr exemple a 1h le MR dit ” Il est 1h “.

    sauf que le script ne fonctione pas dans ce cas la.

    en duplicant les ligne et en changeant les (‘XX:00:00’) par les heures corespondantes et les adresses de fichiers correspondant, soit ca lance tous les top horaires au démarage de sam ou alors il execute le meme bip horaire pendant 1h.

    comment faire pour obtenir un script qui soit capable de lancer un top horaire different a chaque heure sans se planter ??

    merci ce serai suuuper top de chopper ca parceque j’en ai suuuper besoin.

    et un grand merci a tous pour votre boulo….

    Reply
  7. je suis arrivé a faire mon scripte pour ajouter des fichiers au sommet du conducteur pour les top-h sans couper la zik en cour. Ce scripte ne se répète pas car il est commendé par un évènement dans event schedulder sui lance le scriptre a XX:59.00.

    function ActivePlayer:TPlayer ; forward ;
    
    {On attend la bonne heure}
    PAL.WaitForTime(T['XX:59:45']) ;
    
    {On ajoute le fichier bip}
    Cat['decro'].QueueTop(smRandom,NoRules) ;
    Cat['apprentissage'].QueueTop(smRandom,NoRules) ;
    Cat['ecologie'].QueueTop(smRandom,NoRules) ;
    Cat['sécurité routière'].QueueTop(smRandom,NoRules) ;
    Cat['l'ennemi intime'].QueueTop(smRandom,NoRules) ;
    Cat['top-h'].QueueTop(smRandom,NoRules) ;
    
    {On lance le bon deck}
    function ActivePlayer:TPlayer ;
    begin
    if DeckA.Status = psPlaying then
    Result := DeckA
    else
    Result := DeckB ;
    end ;

    il faut bien penser a mettre la liste des fichiers à lire a l’envers dans le scripte pour que dans le conducteur ils soient dans le bon sens
    mais le blem c’est que là il ajoute que la première et la dernière ligne et avec des retour à la ligne entre chaque catégorie ça revient au même, simplement là ça les ajoutent d’un coup.

    Donc pour résumer, ce scripte ajoute les fichiers au sommet du conducteur sans lancer la zik, mais il y a que le top-h et le décro qui s’ajoutent vous pouvez m’aider à trouver pourquoi SVP ?

    Reply
  8. Salut,

    Suivant ce à quoi correspondent tes catégories, je mettrais :

    Cat['decro'].QueueTop(smRandom,NoRules) ;
    Cat['apprentissage'].QueueTop(smLemmingLogic,EnforceRules) ;
    Cat['ecologie'].QueueTop(smLemmingLogic,EnforceRules) ;
    Cat['sécurité routière'].QueueTop(smLemmingLogic,EnforceRules) ;
    Cat['l'ennemi intime'].QueueTop(smLemmingLogic,EnforceRules) ;
    Cat['top-h'].QueueTop(smRandom,NoRules) ;

    decro et top-h sont les deux seules catégories à ne pas suivre les règles (pas plus de X diffusions).

    Reply
  9. RE…

    Je souhaite donc savoir si par hasard, quelqu’un sais si il existe un script qui balance un TOP H different a chaques heures ?
    jai une petite impression que ma demande ne conçerne persone… ouinnn !!

    en fait j’aimerai un bip horaire different de chaques heures sans que ces derniers soient ajoutées en BDD.

    pour lemoment rien de rien ! jai essayer plusieurs combinaisons mais sans succes..

    merci a vous de m’aider….

    Reply
  10. Salut,

    Disneyweb, je crois que tu ce que tu cherches ressemble à ceci :

    function ActivePlayer:TPlayer; forward;
    PAL.Loop := True;
     
    const TimeHeader  : String = 'E:StationPromoTimesheader.mp3';
    const TimeHours   : String = 'E:StationPromoTimesHours';
    const TimeMinutes : String = 'E:StationPromoTimesMinutes';
    const MyGMTZone   : Integer =  10;
    
    var C,N          : Integer;
    var fname        : String;
    var fnamehh      : String;
    var fnamemm      : String;
    var ampm         : String;
    var E : DateTime = Queue.ETA;    // Return the length of the queues
    var hh,mm,ss,ms : Integer;
    
    N := 0;
    while N < 24 do begin
    
     
    
       DecodeTime(Now,hh,mm,ss,ms);
       if (hh = 0) then hh := 24;
       WriteLn('The Time Is ' IntToStr(hh) ':' IntToStr(mm));
    
       //WriteLn('Wait for 10 Minutes');     // Say time every ten minutes
       //PAL.WaitForTime(T[' 00:10:00']);
    
       //PAL.WaitForPlayCount(1);
       //DecodeTime(Now,hh,mm,ss,ms);
      
       E := Queue.ETA;                   // You could even wait for the current
         DecodeTime(E,hh,mm,ss,ms);        // cue length of time to finish
              if (hh <= 9) then
           fnamehh := '0' IntToStr(hh) '.mp3'       //get the right file name
         else
           fnamehh := IntToStr(hh) '.mp3';         //get the right file name
             WriteLn(fnamehh);
    
        if (mm <= 9) then
           fnamemm := '0' IntToStr(mm) '.mp3'      //get the right file name
         else
           fnamemm := IntToStr(mm) '.mp3';        //get the right file name
             WriteLn(fnamemm);
    
      
       WriteLn('SayTime at ' IntToStr(hh) ':' IntToStr(mm));        // Just checking
       //PAL.WaitForTime(E);
    
       // you need to reverse the order, mm - hh - header, so that the header
     // ends up in queuetop.
     //Queue.AddFile(TimeMinutes fnamemm,ipTop);
     //Queue.AddFile(TimeHours fnamehh,ipTop);
     //Queue.AddFile(TimeHeader,ipTop);
     //ActivePlayer.FadeToNext;         // then fade to say the time.
     
     Queue.AddFile(TimeHeader,ipBottom);
     Queue.AddFile(TimeHours fnamehh,ipBottom);
     Queue.AddFile(TimeMinutes fnamemm,ipBottom);
     PAL.WaitForTime(E);
     PAL.WaitForQueue(4);            // wait till the queue fills again - 4 or more
                                      // but what does it do in the even that
                                                                       
    
     N := N 1;
    end;
    
    function ActivePlayer:TPlayer;
    begin
    if DeckA.Status = psPlaying then
    Result := DeckA
    else
    Result := DeckB;
    end; 
    

    Voici les sons de l'heure en anglais, à toi de les enregistrer/trouver en français. N'oublie pas de modifier le chemin vers les fichiers MP3 dans les 5 premières lignes du script.

    Reply
  11. Bonjour Matt,
    J’ai fait un top horaire avec 24 fichiers différents.
    Tout fonctionne très bien sauf à 00H
    Lorsque les 23H son passé, il cherche le 00H mais il ne le trouve pas car c’est le 00H du lendemain.
    Comment puis-je parer à ce problème ?
    J’ai testé de le mettre à 23:59:59 pour voir.
    Voici mon script :

    PAL.Loop := True;
    function ActivePlayer:TPlayer; forward;
    PAL.WaitForTime('01:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires1H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    PAL.WaitForTime('02:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires2H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('03:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires3H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('04:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires4H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('05:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires5H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('06:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires6H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('07:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires7H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('08:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires8H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('09:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires9H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('10:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires\10H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('11:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires\11H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    PAL.WaitForTime('12:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires\12H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('13:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires\13H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('14:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires\14H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('15:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires\15H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('16:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires\16H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('17:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires\17H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
      PAL.WaitForTime('18:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires\18H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('19:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires\19H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('20:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires\20H.mp3',ipTop);
                               ActivePlayer.FadeToNext;
    
     PAL.WaitForTime('21:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires\21H.mp3',ipTop);
                               ActivePlayer.FadeToNext;
    
                      PAL.WaitForTime('22:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires\22H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    PAL.WaitForTime('23:00:00');
      Queue.AddFile('D:\RadioDpk\Top Horaires\23H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
      PAL.WaitForTime('23:59:59');
      Queue.AddFile('D:\RadioDpk\Top Horaires0H.mp3',ipTop);
      ActivePlayer.FadeToNext;
    
    function ActivePlayer:TPlayer; 
    begin 
    if DeckA.Status = psPlaying then 
    Result := DeckA 
    else 
    Result := DeckB; 
    end;
    Reply
    • bonjour, j’ai essayé ce script et il me lit tous les top horaires d’un seul coup arf. moi aussi j’aurais aimé diffuser un top horaire different a chaque heure. :( qi quelqu’un peut m’aider je susi preneur. merci

      Reply
  12. Salut Matt,
    Oui, ça marche à 23H59.
    Par contre, j’ai encore un problème lol… La radio tourne 24H/24 ce qui est logique… Le problème c’est qu’au bout de 72heures, elle s’arrête. Y’at-il un moyen de savoir dans un script pal, la détection de l’arr^t des deck et de les remettre en marche en cas d’arrêt ?

    Reply
  13. Salut,
    Voici mon script si ça peu t’aider.
    Il te fodra donc 24 tophoraire
    J’ai pas trier, y’a d’autres trucs que je lance via ce script

    ///Script de Top Horaire
    ///Scripts qui boucle
    PAL.Loop := True;
    ///Déclaration de fonction
    function ActivePlayer:TPlayer; forward;

    ///Déclaration des variables
    ///var Mtn : DateTime = Now;

    ///Script qui attend l'heure 00:00:000
    PAL.WaitForTime('01:00:00');
    ///CONDITION
    ///Ajout du fichier 00H.mp3 dans la file d'attente en début de celle-ci
    Queue.AddFile('D:\RadioDpk\Top Horaires1H.mp3',ipTop);
    ///Passe à l'élément suivant de la file d'attente, soi le fichier 00H.mp3
    ActivePlayer.FadeToNext;
    ///exétéra

    PAL.WaitForTime('02:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires2H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('03:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires3H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('04:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires4H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('05:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires5H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('06:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires6H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('07:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires7H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('08:00:00');
    Queue.Clear;
    cat['ChroniqueHumour'].QueueTop(smLemmingLogic,EnForceRules);
    Queue.AddFile('D:\RadioDpk\Top Horaires\EcouteSkech.mp3',ipTop);
    Queue.AddFile('D:\RadioDpk\Top Horaires8H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('09:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires9H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('10:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires\10H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('11:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires\11H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('12:00:00');
    Queue.Clear;
    cat['ChroniqueHumour'].QueueTop(smLemmingLogic,EnForceRules);
    Queue.AddFile('D:\RadioDpk\Top Horaires\EcouteSkech.mp3',ipTop);
    Queue.AddFile('D:\RadioDpk\Top Horaires\12H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('13:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires\13H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('14:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires\14H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('15:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires\15H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('16:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires\16H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('17:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires\17H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('18:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires\18H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('19:00:00');
    Queue.Clear;
    cat['ChroniqueHumour'].QueueTop(smLemmingLogic,EnForceRules);
    Queue.AddFile('D:\RadioDpk\Top Horaires\EcouteSkech.mp3',ipTop);
    Queue.AddFile('D:\RadioDpk\Top Horaires\19H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('20:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires\20H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('21:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires\21H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('22:00:00');
    Queue.Clear;
    IF(DayOfWeek(Now) = Monday) OR (DayOfWeek(Now) = Wednesday) OR (DayOfWeek(Now) = Friday) THEN
    BEGIN
    CAT['ChroniqueNaissementVotre'].QueueTop(smLemmingLogic,EnForceRules);
    END;
    Queue.AddFile('D:\RadioDpk\Top Horaires\22H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('23:00:00');
    Queue.AddFile('D:\RadioDpk\Top Horaires\23H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    PAL.WaitForTime('23:59:59');
    Queue.AddFile('D:\RadioDpk\Top Horaires0H.mp3',ipTop);
    ActivePlayer.FadeToNext;

    ///Création de la fonction déclarée précédemment
    ///qui renverra l'identifiant du deck en cours
    function ActivePlayer:TPlayer;
    begin
    if DeckA.Status = psPlaying then
    Result := DeckA
    else
    Result := DeckB;
    end;

    Seul problème, dès que tu lances ce script il te joue tous les top horaires jusqu’au bon.
    Je travaille sur une version qui ne le fera pas !
    Bonne utilisation

    Reply
    • Un immense merci a toi en tout cas pour cette reponse. je vais deja faire le tri dans le script.
      Tiens moi au courant dès que tu penses avoir trouvé le moyen de supprimer le demarrage de tous les top horaires au lancement.
      Encore mille mercis

      Reply
  14. Salut à tous,

    j’ai utilisé le script de MATT, il fonctionne très bien, je l’ai adapté à ma façon sur SAM. Mais il y a un problème. D’habitude le bip horaire se lance au bon moment. Je me suis aperçu que, si un titre de ta playlist commence à un début d’heure (ex: 01h00) et qu’à ce moment-là, normalement, le bip se déclenche….eh ben, ce bip horaire sera diffusé juste après le titre. Quelqu’un aurait une idée?

    Merci d’avance

    Reply
  15. Bonjour,

    Effectivement un trés bon script ma question es la suivante j’ai pris le script il fonctione nikel mais il charge toujours les heures serai t’il possible que je ne doit pas a chaque fois le remettre manuellement en fonction mais en automatique je voudrais que je n’ai plus a me soucier de a chaque fois le remettre a manuellement je vous donne mon script j’ai peut-etre oublier une commande
    merci d’avance de votre aide

    function ActivePlayer:TPlayer; forward;
    
    PAL.WaitForTime(T['00:00:00']);
    Queue.Addfile('C:0h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['01:00:00']);
    Queue.Addfile('C:\1h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['02:00:00']);
    Queue.Addfile('C:\2h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['03:00:00']);
    Queue.Addfile('C:\3h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['04:00:00']);
    Queue.Addfile('C:\4h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['05:00:00']);
    Queue.Addfile('C:\5h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['06:00:00']);
    Queue.Addfile('C:\6h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['07:00:00']);
    Queue.Addfile('C:\7h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['08:00:00']);
    Queue.Addfile('C:\8h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['09:00:00']);
    Queue.Addfile('C:\9h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['10:00:00']);
    Queue.Addfile('C:\10h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['11:00:00']);
    Queue.Addfile('C:\11h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['12:00:00']);
    Queue.Addfile('C:\12h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['13:00:00']);
    Queue.Addfile('C:\13h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['14:00:00']);
    Queue.Addfile('C:\14h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['15:00:00']);
    Queue.Addfile('C:\15h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['16:00:00']);
    Queue.Addfile('C:\16h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['17:00:00']);
    Queue.Addfile('C:\17h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['18:00:00']);
    Queue.Addfile('C:\18h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['19:00:00']);
    Queue.Addfile('C:\19h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['20:00:00']);
    Queue.Addfile('C:\20h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['21:00:00']);
    Queue.Addfile('C:\21h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['22:00:00']);
    Queue.Addfile('C:\22h.wav',ipTop);
    ActivePlayer.FadeToNext;
    PAL.WaitForTime(T['23:00:00']);
    Queue.Addfile('C:\23h.wav',ipTop);
    ActivePlayer.FadeToNext;
    
    function ActivePlayer:TPlayer;
    begin
    if DeckA.Status = psPlaying then
    Result := DeckA
    else
    Result := DeckB;
    end;
    Reply

Opinions