Script PAL pour SAM Broadcaster : jouer un bip horaire

Ce script PAL permet de jouer un bip horaire au début de chaque nouvelle heure. Il faut pointer vers le fichier son qui contient les bips.


{Script PAL - Bip horaire par Matt - www.skyminds.net}
function ActivePlayer:TPlayer; forward;

{On attend la bonne heure}
PAL.WaitForTime(T['XX:00:00']);

{On ajoute le fichier bip}
Queue.Addfile('C:\bip.wav',ipTop);
ActivePlayer.FadeToNext;

{On lance le bon deck}
function ActivePlayer:TPlayer;
begin
if DeckA.Status = psPlaying then
Result := DeckA
else
Result := DeckB;
end;
Code language: PHP (php)

Intérêt un peu limité mais bon, on ne sait jamais, cela peut vous être utile.

Envie d'ajouter des fonctionnalités exceptionnelles à votre site WordPress ou WooCommerce? Je suis là pour vous aider.

Explorons les possibilités ensemble »

Articles conseillés :

Matt

Matt Biscay est développeur WordPress et WooCommerce certifié chez Codeable, ainsi que sysadmin qualifié et enseignant-chercheur. Passionné par le code performant et les solutions sécurisées, je m'efforce d'offrir une expérience utilisateur exceptionnelle sur chaque projet.

Vous avez aimé cet article ? Vous avez un projet en tête et vous pensez que je pourrais vous aider à le concrétiser ? N'hésitez pas à me contacter, je serais ravi de discuter avec vous de votre projet !

18 pensées sur “Script PAL pour SAM Broadcaster : jouer un bip horaire”

  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