SAM Broadcaster : créer et utiliser des scripts PAL

PAL, pour Playlist Automation Language, permet d’automatiser SAM Broadcaster : rotation musicale, jingles, horaires, encodeurs, métadonnées et émissions distantes. Ce guide explique comment créer, tester et organiser vos premiers scripts PAL sans bloquer la diffusion.

SAM Broadcaster sait déjà enchaîner des titres, gérer plusieurs lecteurs et envoyer un flux vers un serveur de diffusion. Les scripts PAL permettent d’aller beaucoup plus loin en définissant précisément la logique de votre radio.

Vous pouvez, par exemple, programmer un jingle toutes les cinq chansons, imposer une catégorie à une heure donnée, démarrer les encodeurs automatiquement ou modifier les informations affichées dans le flux.

PAL reste propre à SAM Broadcaster. Sa syntaxe rappelle Pascal, tandis que ses classes donnent accès aux catégories, à la file d’attente, aux lecteurs, aux encodeurs et aux informations des morceaux.

Kinsta: Premium Managed WordPress hosting

Qu’est-ce qu’un script PAL ?

PAL signifie Playlist Automation Language. Il s’agit du langage de script intégré à SAM Broadcaster Pro.

Un script PAL peut intervenir sur presque toutes les étapes de l’automatisation :

  • choisir un titre dans une catégorie ;
  • ajouter un morceau en haut ou en bas de la file d’attente ;
  • respecter ou ignorer les règles de rotation ;
  • attendre un nombre déterminé de chansons ;
  • attendre une heure ou un intervalle précis ;
  • lancer ou arrêter les encodeurs ;
  • agir sur les lecteurs ;
  • modifier les métadonnées envoyées aux auditeurs ;
  • charger une playlist externe ;
  • connecter une émission distante ;
  • écrire des informations dans le journal de SAM.

PAL convient particulièrement aux tâches répétitives. Dès qu’une action doit suivre une règle prévisible, un script peut souvent éviter une intervention manuelle.

SAM Broadcaster Pro ou SAM Broadcaster Cloud ?

Ce guide concerne principalement SAM Broadcaster Pro, l’application Windows dans laquelle l’environnement PAL est directement intégré.

SAM Broadcaster Cloud propose sa propre logique d’automatisation avec des règles de rotation, des tâches et des blocs de programmation. Ne supposez donc pas qu’un script PAL conçu pour SAM Broadcaster Pro peut être copié tel quel dans l’offre Cloud.

Kinsta: Premium Managed WordPress hosting

Créer son premier script PAL

La création d’un script s’effectue depuis la fenêtre PAL de SAM Broadcaster.

  1. Dans SAM Broadcaster, ouvrez Menu → Window → PAL Scripts.
  2. Cliquez sur le bouton + pour ajouter un script.
  3. Choisissez l’emplacement du fichier portant l’extension .pal.
  4. Activez la création du fichier lorsqu’il n’existe pas encore.
  5. Validez l’ajout du script.
  6. Sélectionnez-le, puis ouvrez-le dans l’éditeur PAL intégré.

La fenêtre PAL permet ensuite de démarrer, suspendre ou arrêter chaque script. Elle indique également son état et peut le lancer automatiquement au démarrage de SAM.

Choisir un dossier dédié aux scripts

Évitez de disperser les fichiers PAL dans plusieurs répertoires. Créez un dossier dédié, par exemple :

C:\SAM\PAL\

Vous pourrez ensuite organiser les fichiers selon leur fonction :

C:\SAM\PAL\rotation\
C:\SAM\PAL\jingles\
C:\SAM\PAL\horaires\
C:\SAM\PAL\encodeurs\
C:\SAM\PAL\tests\

Cette organisation facilite les sauvegardes et limite les modifications accidentelles d’un script utilisé en production.

Découvrir l’éditeur PAL intégré

L’éditeur PAL intégré à SAM Broadcaster ne se limite pas à une simple zone de texte. Il permet de compiler le script, repérer les erreurs, afficher leur ligne et suivre la sortie produite par les commandes de journalisation.

Le workflow recommandé reste simple :

  1. modifiez le script ;
  2. enregistrez le fichier ;
  3. compilez-le ;
  4. corrigez toutes les erreurs signalées ;
  5. exécutez-le sur une copie ou une programmation de test ;
  6. contrôlez la file d’attente et le journal ;
  7. activez son démarrage automatique uniquement après validation.

L’éditeur permet également une exécution pas à pas. Cette fonction devient utile lorsqu’un script comporte plusieurs conditions ou manipule plusieurs objets.

Kinsta: Premium Managed WordPress hosting

Premier exemple : écrire dans la sortie PAL

Commencez par un script sans effet sur la diffusion. Il permet de vérifier que l’environnement fonctionne correctement.

WriteLn('Bonjour depuis mon premier script PAL');Langage du code : JavaScript (javascript)

Compilez puis exécutez le script. Le message doit apparaître dans le panneau de sortie de l’éditeur.

Sur les versions de SAM Broadcaster prenant en charge PAL.Log(), vous pouvez aussi écrire dans le journal des événements :

PAL.Log('Le script PAL a démarré', ltNotice);Langage du code : JavaScript (javascript)

Les niveaux disponibles permettent notamment de distinguer une information normale d’un avertissement. Cette journalisation facilite le diagnostic lorsqu’un script fonctionne en arrière-plan.

Comprendre la structure d’un script PAL

PAL utilise une syntaxe proche de Pascal. Les instructions se terminent généralement par un point-virgule.

Les commentaires

Documentez les réglages modifiables, les catégories utilisées et le but du script.

// Commentaire sur une ligne.

{ Commentaire
  sur plusieurs lignes. }Langage du code : JavaScript (javascript)

Les variables

Les variables doivent être déclarées avant leur utilisation :

var
  CategoryName : String;
  TrackCount   : Integer;
  IsEnabled    : Boolean;

CategoryName := 'Music (All)';
TrackCount   := 5;
IsEnabled    := True;Langage du code : JavaScript (javascript)

Choisissez des noms explicites. Un script diffusé pendant plusieurs années devient vite incompréhensible lorsqu’il contient uniquement des variables nommées a, b et x.

Les blocs begin et end

Lorsque plusieurs instructions dépendent de la même condition, regroupez-les dans un bloc :

if IsEnabled then
begin
  WriteLn('Automatisation activée');
  PAL.Log('Automatisation activée', ltNotice);
end;Langage du code : JavaScript (javascript)
Kinsta: Premium Managed WordPress hosting

Les commandes d’attente : la base d’un bon script PAL

Un script PAL ne doit pas vérifier une condition en permanence dans une boucle rapide. Utilisez les commandes d’attente prévues par SAM.

Les trois commandes fondamentales sont :

PAL.WaitForPlayCount(Count);
PAL.WaitForQueue(Count);
PAL.WaitForTime(Time);Langage du code : CSS (css)

Attendre plusieurs morceaux

PAL.WaitForPlayCount(5);
WriteLn('Cinq morceaux ont commencé leur lecture');Langage du code : JavaScript (javascript)

Le compteur diminue chaque fois qu’un nouveau morceau commence sur un lecteur.

Attendre un état précis de la file

PAL.WaitForQueue(2);
WriteLn('La file contient maintenant deux éléments');Langage du code : JavaScript (javascript)

Cette commande attend que la file contienne exactement le nombre demandé. Elle peut donc rester bloquée si un autre script maintient constamment davantage de titres dans la queue.

Attendre un intervalle

PAL.WaitForTime('+00:00:10');
WriteLn('Dix secondes se sont écoulées');Langage du code : JavaScript (javascript)

Le signe + indique un délai relatif.

Attendre une heure donnée

PAL.WaitForTime('14:30:00');
WriteLn('Il est 14 h 30');Langage du code : JavaScript (javascript)

Vous pouvez utiliser des masques horaires :

PAL.WaitForTime('XX:00:00');
WriteLn('Début de la prochaine heure');Langage du code : JavaScript (javascript)

XX représente ici la prochaine heure correspondante.

Attention aux horaires déjà dépassés

Une attente portant sur une heure fixe du jour peut être immédiatement considérée comme satisfaite lorsque cette heure est déjà passée.

Par exemple, si le script démarre à 17 heures :

PAL.WaitForTime('10:00:00');
WriteLn('Action de 10 heures');Langage du code : JavaScript (javascript)

l’action peut être exécutée immédiatement, puisque 10 heures est antérieur à l’heure actuelle.

Pour une programmation quotidienne plus robuste, prévoyez explicitement le prochain jour lorsque l’horaire est dépassé :

var
  NextRun : DateTime;

NextRun := T['10:00:00'];

if NextRun <= Now then
  NextRun := NextRun + 1;

PAL.WaitForTime(NextRun);
WriteLn('Exécution quotidienne à 10 heures');Langage du code : JavaScript (javascript)

L’ajout de 1 à une valeur DateTime correspond au jour suivant.

Créer une boucle PAL sans monopoliser le processeur

De nombreuses automatisations doivent se répéter. PAL permet de relancer automatiquement le script avec :

PAL.Loop := True;Langage du code : PHP (php)

Placez ensuite une véritable commande d’attente dans le script :

PAL.Loop := True;

PAL.WaitForPlayCount(5);
WriteLn('Action exécutée après cinq morceaux');Langage du code : PHP (php)

À la fin du fichier, SAM relance le script. Celui-ci attend à nouveau cinq morceaux.

Évitez en revanche les boucles sans pause :

// À éviter : boucle active sans attente.
while True do
begin
  WriteLn('Cette boucle ne laisse jamais le script respirer');
end;Langage du code : PHP (php)

Une telle boucle peut gaspiller du processeur, saturer la sortie et rendre SAM moins réactif.

Ajouter un titre aléatoire à la file d’attente

La classe Cat permet d’accéder aux catégories de la bibliothèque musicale.

Cat['Music (All)'].QueueBottom(smRandom, EnforceRules);Langage du code : CSS (css)

Cette ligne choisit aléatoirement un titre dans la catégorie Music (All), applique les règles de rotation, puis l’ajoute en bas de la file.

Pour le placer en tête :

Cat['Jingles'].QueueTop(smRandom, EnforceRules);Langage du code : CSS (css)

Le nom de la catégorie doit correspondre exactement à celui utilisé dans SAM Broadcaster.

Respecter ou ignorer les règles de rotation

EnforceRules demande à SAM de respecter les règles configurées pour la rotation. Selon la commande utilisée, NoRules permet de les ignorer.

N’utilisez NoRules que lorsque la répétition éventuelle du morceau ne pose aucun problème, par exemple pour un signal technique très précis.

Exemple : ajouter un jingle toutes les cinq chansons

PAL.Loop := True;

// Attendre cinq nouveaux morceaux.
PAL.WaitForPlayCount(5);

// Ajouter un jingle en tête de la file.
Cat['Jingles'].QueueTop(smRandom, EnforceRules);

PAL.Log('Un jingle a été ajouté à la file', ltNotice);Langage du code : PHP (php)

Ce script constitue une base simple. Une radio plus complexe devra également tenir compte des autres scripts qui alimentent la file et des éléments déjà programmés.

Le tutoriel SAM Broadcaster : jouer une pub ou un jingle toutes les cinq chansons détaille ce cas d’usage.

Exemple : jouer une promotion toutes les trente minutes

PAL.Loop := True;

// Attendre trente minutes.
PAL.WaitForTime('+00:30:00');

// Ajouter une promotion en tête de la file.
Cat['Promos (All)'].QueueTop(smRandom, EnforceRules);

PAL.Log('Promotion programmée', ltNotice);Langage du code : PHP (php)

Un intervalle relatif de trente minutes signifie que le délai repart après chaque exécution. Il ne garantit pas une diffusion exactement à la minute 00 ou 30 de chaque heure.

Pour viser la demi-heure suivante, utilisez plutôt un masque horaire adapté :

PAL.Loop := True;

PAL.WaitForTime('XX:30:00');
Cat['Promos (All)'].QueueTop(smRandom, EnforceRules);Langage du code : PHP (php)

Exemple : démarrer automatiquement les encodeurs

PAL peut parcourir les encodeurs configurés dans SAM et démarrer ceux qui sont arrêtés.

var
  I : Integer;

// Laisser SAM et sa base terminer leur démarrage.
PAL.WaitForTime('+00:00:10');

for I := 0 to Encoders.Count - 1 do
begin
  if not Encoders[I].Started then
  begin
    Encoders[I].Start;
    PAL.Log(
      'Encodeur démarré : ' + IntToStr(I),
      ltNotice
    );
  end;
end;Langage du code : JavaScript (javascript)

Le délai initial évite de solliciter les encodeurs avant que SAM, la base de données et la connexion réseau soient prêts.

Ce script doit être exécuté une seule fois au démarrage. N’activez pas PAL.Loop sans nécessité.

Exemple : démarrer les encodeurs et lancer un morceau

var
  I            : Integer;
  CategoryName : String;
  Player       : TPlayer;
  Song         : TSongInfo;

CategoryName := 'Music (All)';

// Attendre que SAM soit complètement disponible.
PAL.WaitForTime('+00:00:10');

// Démarrer les encodeurs arrêtés.
for I := 0 to Encoders.Count - 1 do
begin
  if not Encoders[I].Started then
    Encoders[I].Start;
end;

// Choisir un titre.
Song := Cat[CategoryName].ChooseSong(
  smRandom,
  EnforceRules
);

// Utiliser le lecteur disponible.
Player := IdlePlayer;
Player.QueueSong(Song);
Player.Play;

PAL.Log(
  'Lecture démarrée : ' +
  Song['artist'] + ' - ' +
  Song['title'],
  ltNotice
);

// Libérer les objets.
Player.Free;
Song.Free;Langage du code : JavaScript (javascript)

Testez ce script lorsque SAM est arrêté ou inactif. Il n’est pas conçu pour prendre le contrôle d’une diffusion déjà en cours.

Créer une rotation musicale variée

Une rotation cohérente ne consiste pas à sélectionner continuellement un titre au hasard dans toute la bibliothèque. Elle doit répartir les catégories et éviter les répétitions trop rapprochées.

Une logique simple peut alterner plusieurs catégories :

PAL.Loop := True;

Cat['Hits'].QueueBottom(smRandom, EnforceRules);
Cat['Gold'].QueueBottom(smRandom, EnforceRules);
Cat['Découvertes'].QueueBottom(smRandom, EnforceRules);
Cat['Gold'].QueueBottom(smRandom, EnforceRules);

PAL.WaitForQueue(2);Langage du code : PHP (php)

Le script recharge la file lorsqu’elle revient à deux éléments. Vérifiez toutefois qu’aucun autre script n’attend le même seuil ou ne maintient la queue à une autre longueur.

Consultez également le guide Script PAL pour SAM Broadcaster : créer une playlist variée par rotation automatique.

Programmer un style musical sur un créneau horaire

PAL peut modifier la rotation selon l’heure. Vous pouvez ainsi réserver une catégorie à une tranche nocturne, une émission spécialisée ou un rendez-vous hebdomadaire.

La logique générale consiste à :

  1. attendre le début du créneau ;
  2. vider ou compléter prudemment la file ;
  3. ajouter des morceaux de la catégorie souhaitée ;
  4. attendre la fin du créneau ;
  5. restaurer la rotation normale.

Le tutoriel Script PAL pour SAM Broadcaster : jouer un style de musique pendant un créneau horaire fournit un exemple spécialisé.

Programmer un signal horaire

Un signal horaire doit être placé suffisamment tôt dans la file pour approcher l’heure cible. La durée du morceau déjà en cours peut empêcher une synchronisation à la seconde près.

PAL.Loop := True;

PAL.WaitForTime('XX:00:00');
Cat['Time Signal'].QueueTop(smRandom, NoRules);Langage du code : PHP (php)

Ce script ajoute le signal lorsque l’heure est déjà atteinte. Il ne peut donc pas interrompre proprement un titre en cours pour garantir une précision absolue.

Pour une programmation plus précise, tenez compte de la durée des éléments présents dans la file et utilisez les fonctions prévues pour les événements fixes.

Le guide SAM Broadcaster : jouer un bip horaire avec un script PAL traite ce cas en détail.

Modifier les informations affichées dans le flux

Les métadonnées envoyées au serveur de streaming permettent d’afficher le titre, l’artiste ou un message personnalisé dans le lecteur des auditeurs.

Cette fonction peut servir à :

  • annoncer le nom d’une émission ;
  • faire défiler une information ;
  • masquer temporairement le titre réel ;
  • afficher une URL ou un message de la station ;
  • adapter les données pendant une émission distante.

Consultez le tutoriel Script PAL pour SAM Broadcaster : changer ou faire défiler les informations du flux audio.

Importer une playlist externe

SAM Broadcaster inclut traditionnellement un exemple PAL capable de charger une playlist M3U dont le nom dépend de la date.

var
  FileName : String;

FileName := FormatDateTime('yymmdd', Now) + '.m3u';

WriteLn('Chargement de : ' + FileName);

Queue.Clear;
Queue.AddList(
  'C:\Playlists\' + FileName,
  ipBottom
);

PAL.Loop := True;
PAL.WaitForTime('23:59:59');Langage du code : PHP (php)

Ce script suppose qu’un fichier correspondant à chaque date existe dans le dossier indiqué.

Queue.Clear efface toute la file. Utilisez cette commande avec prudence, surtout lorsque d’autres scripts ou animateurs ajoutent déjà des contenus.

Travailler avec des fichiers situés sur un autre disque

SAM Broadcaster peut utiliser des fichiers placés sur un autre disque local. Il suffit d’indiquer leur chemin complet lorsque la commande PAL attend un fichier ou une playlist.

Queue.AddList(
  'D:\Radio\Playlists\programme.m3u',
  ipBottom
);Langage du code : JavaScript (javascript)

Pour un chemin réseau, utilisez un emplacement accessible au compte Windows qui exécute SAM. Un lecteur réseau visible dans votre session interactive peut ne pas être disponible après un démarrage automatique.

Préférez alors un chemin UNC :

\\serveur-audio\radio\playlists\programme.m3uLangage du code : CSS (css)

Vérifiez les droits de lecture, la disponibilité du partage et le comportement du script lorsque le serveur distant ne répond pas.

Éviter les conflits entre plusieurs scripts PAL

Plusieurs scripts peuvent fonctionner simultanément, mais ils partagent les mêmes lecteurs, encodeurs et files d’attente.

Les conflits les plus fréquents apparaissent lorsque :

  • deux scripts remplissent la queue au même moment ;
  • un script vide la file préparée par un autre ;
  • plusieurs scripts utilisent le même seuil avec WaitForQueue() ;
  • deux scripts imposent des catégories différentes ;
  • un script démarre un encodeur que l’animateur souhaite garder arrêté ;
  • plusieurs scripts modifient les mêmes métadonnées ;
  • un événement horaire entre en concurrence avec une émission distante.

Attribuez une responsabilité claire à chaque fichier. Un script doit, autant que possible, gérer une seule fonction.

Rendre ses scripts PAL plus fiables

Centraliser les réglages

Placez les noms de catégories et les intervalles au début du fichier :

var
  JingleCategory : String;
  SongsBetween   : Integer;

JingleCategory := 'Jingles';
SongsBetween   := 5;Langage du code : JavaScript (javascript)

Vous éviterez ainsi de modifier la même valeur à plusieurs endroits.

Journaliser les actions importantes

PAL.Log(
  'Ajout d’un élément depuis la catégorie Jingles',
  ltNotice
);Langage du code : JavaScript (javascript)

Un script silencieux paraît souvent fiable jusqu’au jour où il cesse de fonctionner à trois heures du matin.

Ne pas ignorer toutes les règles

Les règles de rotation évitent notamment les répétitions rapprochées d’un artiste, d’un album ou d’un morceau. Utilisez EnforceRules par défaut.

Prévoir les catégories vides

Une catégorie vide ou renommée peut interrompre la logique du script. Contrôlez régulièrement les catégories utilisées et ne modifiez pas leur nom sans mettre à jour les fichiers PAL associés.

Tester les redémarrages

Un script peut fonctionner parfaitement lorsqu’il démarre le matin, puis exécuter immédiatement plusieurs actions lorsqu’il est relancé l’après-midi. Testez donc différents horaires de démarrage.

Sauvegarder les scripts séparément

Conservez une copie versionnée des fichiers PAL. Git convient très bien, même si SAM Broadcaster lui-même n’utilise pas ce système.

N’enregistrez pas dans le dépôt public des mots de passe, URL privées ou informations d’accès aux serveurs de diffusion.

Déboguer un script PAL

Lorsqu’un script ne produit pas le résultat attendu, commencez par distinguer une erreur de compilation d’une erreur logique.

Erreur de compilation

L’éditeur indique généralement la ligne, la colonne et la nature du problème. Vérifiez en priorité :

  • les points-virgules manquants ;
  • les parenthèses non refermées ;
  • les blocs begin sans end ;
  • les guillemets absents ;
  • les variables non déclarées ;
  • les noms de fonctions incorrects.

Erreur logique

Le script compile, mais son comportement reste incorrect. Ajoutez alors des messages avant et après chaque étape :

WriteLn('Avant l’attente');
PAL.WaitForPlayCount(5);
WriteLn('Après l’attente');

PAL.Log(
  'La commande WaitForPlayCount est terminée',
  ltNotice
);Langage du code : JavaScript (javascript)

Cette méthode permet de repérer l’instruction sur laquelle le script reste bloqué.

Le script reste en attente

Une commande d’attente peut fonctionner exactement comme prévu tout en donnant l’impression d’un blocage.

  • WaitForPlayCount() attend de nouveaux démarrages de morceaux.
  • WaitForQueue() attend une taille exacte de la file.
  • WaitForTime() attend l’heure ou la date calculée.

Affichez la condition attendue dans le journal et observez la file d’attente avant de conclure à une panne.

Checklist avant d’activer un script sur la radio

  • Le fichier possède l’extension .pal.
  • Le script compile sans erreur.
  • Les catégories existent et portent exactement le bon nom.
  • Les chemins vers les fichiers sont accessibles.
  • Chaque boucle contient une attente ou une condition de sortie.
  • Les horaires déjà dépassés sont correctement gérés.
  • Le script ne vide pas inutilement la file.
  • Les règles de rotation sont respectées lorsque nécessaire.
  • Les actions importantes sont journalisées.
  • Les autres scripts actifs ne manipulent pas les mêmes éléments.
  • Le fonctionnement après redémarrage a été testé.
  • Une copie du fichier précédent est disponible.

Aller plus loin avec SAM Broadcaster et Icecast

Les scripts PAL pilotent la programmation dans SAM Broadcaster. Ces guides permettent d’approfondir chaque automatisation et de compléter la chaîne de diffusion.

Questions fréquentes

Que signifie PAL dans SAM Broadcaster ?

PAL signifie Playlist Automation Language. Ce langage intégré à SAM Broadcaster permet d’automatiser les playlists, catégories, horaires, encodeurs, lecteurs et métadonnées.

Où créer un script PAL ?

Ouvrez Menu → Window → PAL Scripts, puis cliquez sur le bouton d’ajout. Choisissez ou créez un fichier portant l’extension .pal, puis ouvrez-le dans l’éditeur intégré.

Comment lancer automatiquement un script PAL ?

Ouvrez la configuration du script dans la fenêtre PAL, puis activez l’option de démarrage automatique. Testez d’abord son comportement lorsque SAM est lancé à différents moments de la journée.

Comment jouer un jingle toutes les cinq chansons ?

Utilisez PAL.WaitForPlayCount(5), puis ajoutez un titre de la catégorie des jingles avec QueueTop() ou QueueBottom(). Activez ensuite PAL.Loop pour répéter l’opération.

Pourquoi mon script PAL reste-t-il bloqué ?

Il attend probablement une condition qui n’est jamais atteinte. Vérifiez notamment la valeur passée à WaitForQueue(), les horaires, les noms des catégories et les actions des autres scripts.

Peut-on utiliser plusieurs scripts PAL en même temps ?

Oui, mais ils partagent les lecteurs, la file, les catégories et les encodeurs. Évitez que plusieurs scripts manipulent simultanément la même ressource sans coordination.

PAL fonctionne-t-il avec SAM Broadcaster Cloud ?

Les scripts présentés ici ciblent SAM Broadcaster Pro. SAM Broadcaster Cloud possède ses propres outils de rotation, tâches et programmation. Les deux environnements ne doivent pas être confondus.

Conclusion

PAL transforme SAM Broadcaster en véritable moteur d’automatisation radiophonique. Une courte instruction peut ajouter un jingle, attendre un horaire, charger une playlist ou démarrer les encodeurs.

Commencez par un script simple. Compilez-le, journalisez ses actions et observez son effet sur la file. Ajoutez ensuite les conditions, horaires et rotations progressivement.

La principale difficulté ne vient pas de la syntaxe. Elle vient des interactions entre les scripts, les règles de rotation et la programmation existante.

Un bon script PAL doit donc faire trois choses : attendre intelligemment, agir précisément et laisser suffisamment de traces pour expliquer ce qu’il a fait.

Sources et documentation

Demandez à l'IA son opinion
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.

39 réflexions au sujet de “SAM Broadcaster : créer et utiliser des scripts PAL”

  1. bonjour et merci pour ce code bien pratique .
    Pouvez vous m expliquer comment faire si les musiques sont stockées sur un autre disc dur sur le pc que là ou est installé Sam Broadcast svp ?

    merci d avance

    Répondre
  2. salut matt ,merci pour le script ,helas ce dernier ne marchait plus avec moi ,il m’indique compilé et nul erreur n’est généré et apparait en fonctionnement mais se ne sont pas les fraguements audio que j’ai choisis qui sont joués seul celles stockeé dans history ,merci pr votre reponse ,aurevoir

    Répondre
  3. @ skudfm : il faut importer les chansons dans la catégorie Tracks : dans la fenêtre Playlist, aller dans le dossier Tracks et appuyer sur la flèche du + vert. Il faut ensuite sélectionner les morceaux ou le répertoire à importer.

    @ youssef : il se peut que le fichier soit corrompu. Il suffit alors de le recréer et de ré-enregistrer. Bien veiller également à ce que la catégorie Tracks soit bien à jour de ce que vous voulez jouer.

    Répondre
  4. salut matt ,merci d’avoir repondu mais le probleme persiste ,j’ai enregistré les deux scripts dans 2 fichiers separés .pal ,leur etat ds la fenetre pal script m’indique « waiting for 4 trucks to play  »
    l’autre de meme « waiting for 1 trucks to play  »
    voila les changements que j’ai porté au 1er script

    PAL.Loop := True ;
    CAT['Tracks'].QueueBottom(smLemmingLogic,EnforceRules) ;
    CAT['Station IDs (All)'].QueueBottom(smLRP,NoRules) ;
    repeat
        PAL.WaitForPlayCount(1) ;
    until Queue.Count 

    et j’ai ajouter mes fichiers audio ds trucks et ds Station IDs (All)comme indiqué merci pr vos explications,et si possible y’a t il une maniere de diffuser des reportages depuis l’exterieure c.a.d moi et un autre pr plus de professionalisme aucune indication sera la bien venu ,merci encore.

    Répondre
  5. salut matt,
    stp je demande de bref reponses a ces questions:
    1-lister sa radio dans audiorealm est il payant ou bien gratuit.
    2-dans la partie station details dans je n’arrive pas a completer l’info sur AIM et ICQ # ,ou pui’je les retrouver.

    merci d’avance coordialement

    Répondre
  6. Salut youssef,

    Pour vérifier que le script PAL fonctionne bien :
    1. crée un nouveau script PAL vierge et copie le script dedans.
    2. compile-le et enregistre-le.
    3. importe tes fichiers dans la catégorie Tracks.
    4. lance le menu Tools > Maintenance > Verify songs pour vérifier que toutes les chansons sont accessibles. Cela devrait fonctionner sans problèmes.

    Pour diffuser des reportages depuis l’extérieur – il faut enregistrer le reportage puis le diffuser à l’antenne. On ne peut pas véritablement faire du 100% direct.

    Je n’ai pas listé ma radio dans Audiorealm parce que le principe me semble un peu obscur : la documentation est assez floue et on ne sait pas bien s’il y aura quelque chose à payer au bout du compte. Autant dire que cela ne vaut pas vraiment le coup, d’autant plus qu’Audiorealm recense principalement des radios US.

    Pour rentrer tes coordonnées, il suffit de remplir les informations dans File > Configuration > Station details.

    Répondre
  7. Bonjour,

    Je recherchais des infos sur Sam The B.
    J’en ai déjà trouver ici.
    Quelqu’un a-t-il déjà mis plusieurs programmes radios différents avec Sam qui doivent tourner sur le même PC et envoyer en streaming ?
    Merci par avance de vos réponses d’experts.

    Répondre
  8. bonjour,

    J’ai un petit problème, mon script fonctionne qu’a moitier.
    De temps en temps il n’ajoute que des musiques et pas de jingles, apres il s’arrete tout seul (par dans l’execution) mais il n’ajoute aucune musique dans la Queue :S

    Je vais essayer de faire ce que tu as dis, mais c’est très bizzar :S

    Si non chapeau, car tu es un des rares sites qui parle de SAM ;)

    merci ;)

    Répondre
  9. Salut vtnet,

    Essaie de recréer ton script PAL et de l’enregistrer sous un autre nom, il arrive qu’il se corrompe avec l’usage.

    Merci pour le compliment :)

    Répondre
  10. Bonjour, pouvez récapitulez l’utilité de ce script ? et est-il possible de creer des listes de diffusion aléatoire ? du style: jingle, musique, jingle ???

    Merci d’avance de votre aide.

    Répondre
  11. bonjour,

    effectivement grace a un tel script vous pouvez mettre une musique un jingle une musique …

    pour la liste de diffusion aleatoire, pour mois cela se fait automatiquement avec le script qui met musique/jingle/musique

    bye

    Répondre
  12. Je voudrais savoir comment on fais pour enregistrer la chanson si on l’accélaire car moi sa marche pas.Meme si je l’enregistre, la chanson reste normale. J’ai besoin d’aide.Merci d’avance.

    Répondre
  13. Bonjour,

    Quelqu’un pourrai-t-il me dire comment je peux sortir un listing des chansons jouées par le SAM ( la playlist des chansons jouées quoi)

    Merci d’avance

    Wallace

    Répondre
  14. Salut Ludovic,

    J’ai écrits ces scripts PAL pour mes propres besoins, je n’ai pas vraiment d’autres idées de script. Ceux-là me permettent d’automatiser les playlists et jingles.

    Répondre
  15. Merci de ta réponse. Moi j’avais pensé a un script de decrochage, exemple, une emission de un des DJ de Toulouse commence et grace au script pal il c’est a quel heure le faire et si pas de son de l’autre coté au bout d’un moment de reprendre la playlist du SB.

    Un autre du style de celui ci que tu as proposé pour le titrage dans le player, un message a chaque changement d’emission exemple faire apparaitre 10 Minutes avant que prochainement Rave partie commence a la fin de celle ci le prochain programme.

    Sur le site de SB moi l’anglais pas trop pour moi.

    Répondre
  16. Bonjour,

    Je gère la radioweb du RIAQ ( http://www.riaq.ca) et certaines émissions doivent partir à heure fixe. J’utilisais le «Event Scheduler» de Sam 4, mais ce n’est pas fiable! J’ai trouvé la programmation suivante que j’ai adaptée. Je clique sur RUN dans «PAL script» et ça débute à l’heure tel que prévu. Seul problème: il arrive que l’émission passe 2 fois de suite! Quelqu’un peut aider ?

    René

    
    var P    : TPlayer;
    PAL.Loop := True;
    var mytime : DateTime;
    var I : Integer;
    
    var start_time, end_time : DateTime;
    
    mytime := now;
    start_time := T['08:59:00'];
    end_time:= T['08:59:20'];
    
    {Check if this is the right day of the week}
     if DayOfWeek(Now) = Thursday then begin
    
           if( mytime >= start_time) and (mytime <= end_time) Then begin
    
    {## Detect the empty player and queue a station ID in it}
    P := IdlePlayer;
    if P  nil then begin
    
     {## Detect the active player and start the fade-out}
    
    
         Queue.addfile('http://www.riaqmedia.com/MP3/2008/carrefour.mp3',iptop);
    
    
     P := ActivePlayer;
     if P  nil then P.FadeToNext;
             { Wait a while to make sure time is AFTER end_time }
            PAL.WaitForTime(T['+00:01:00']);
    
                 end;
          end;
    
    end;
    
    Répondre
  17. Bonjour,

    je travaille au lancement de la webradio de mon école, on utilise sam et music 1 mais je ne comprends rien quand on me parle de script.

    Comment dois-je faire pour exporter de music 1 jusqu’à Sam ?

    Merci

    Répondre
  18. salut Matt,

    je reviens à nouveau pour te demander quelque chose au risque que le sujet existe déjà mais j’ai pas trouvé (désolé si c’est le cas) je suis confronté a un problème d’affichage de jaquette sur la page playlist de mon site.En effet après avoir interoger mon hébergeur shoutcast, il m’a précisé qu’il me suffisait d’englober tout ça dans le tag iD3 de mes mp3 et lors de mes diffusions la jaquette apparaitrait ok , dans mon SAM j’ai fait le test en prenant un titre je suis allé dans info song et je lui ai attribué via amazone la jaquette ça pas de prob puis j’ai actualisé le tag et ensuite j’ai envoyé ce titre en direct.Mais là vérification faite la jaquette n’apparait pas sur ma page playlist! Que faire ?? Dois-je activer quelque chose sur le soft mais ou ? Dans l’encoder ? Je ne sais pas j’ai cru lire quelque part une histoire de script pour ça ce qui m’étonne …qu’en penses-tu ?

    ps: tous mes mp3 sont taggés avec les jaquettes stockées sur mon HD , elles apparaissent bien sur lors de la lecture dans la fenêtre de SAM
    Amicalement,
    j-yves

    Répondre
  19. Salut jyes,

    Je ne me suis pas encore penché sur l’affichage des pochettes sur un site. A l’époque, cela avait l’air bien compliqué quand on n’utilisait pas le site livré avec SAM.

    Il y a une option qui concerne les pochettes dans SAM > General > Local Picture directory. Je l’ai utilisé une fois : à chaque chanson jouée, SAM récupérait la pochette chez Amazon, remplissant le disque d’images qui ne me serviront jamais. Du coup, j’ai abandonné cette option.

    J’écrirai un article si jamais je trouve une alternative qui ne demande pas trop de ressources.

    Répondre
  20. salut matt,

    peux-tu me dire comment faire pour que ma playlist jouée en mode « auto dj » (elle comporte environ 2000 titres) ne s’arrêtes pas ! car au bout d’un certain moment je me retrouve en mode queue !! Et à la fin elle s’arrête…

    merci,

    jyes

    Répondre
  21. Salut jyes,

    J’ai été confronté à ce problème hier soir, à ma grande surprise ! J’ai édité les options de SAM > Config > Playlist rotation rules > Clockwheel logic module et j’ai ajouté un ReScan du répertoire où se trouvent mes chansons.

    Je n’ai plus qu’à attendre et voir si cela fonctionne.

    Autre solution manuelle : relancer le script PAL de playlist et se remettre en mode auto-DJ.

    Répondre
  22. Bonjour Matt,
    Y’orait-il un script par chez toi qui permettrait de rescaner un répertoire donné et de d’ajouter les morceaux qui ne sont pas présent d’une catégorie donnée et de les rajouté dans celle ci ?
    Merki!

    Répondre
  23. Salut Etann86,

    Pour scanner automatiquement un répertoire ainsi que tous ses répertoires et ajouter le contenu à SAM, tu peux utiliser cette commande dans un script PAL :

    DIR['g:\music\'].Rescan;
    Répondre
  24. Re salut,
    Ce bout de script scan et ajoute à la file d’attente!
    Mais puis-je scannet ajouter les nouveau fichier dans une catégorie défini?
    Par exemple si je rajoute un nouveau répertoire dans ma catégorie « SmoothJazzé, comment lui dire d’ajouter ce qu’il a scnné dans ma catégorie smoothjazz?

    Répondre
  25. Rebonjour Matt,
    J’ai vu dans la doc de pal qu’on pouvait via un script, modifier le volume de chaque des deck avec une propriété volume.
    Sais-tu comment ça se programme ?
    decka.volume = 255;
    DeckB.volume = 100;
    A cose de mon handicap visuel, je ne peux pas modifié le volume à la main et cette méthode m’arrangerai.
    Merci à toi

    Répondre
  26. Salut Etann86,

    Je ne sais pas comment on peut modifier le volume avec un script PAL. Je touche rarement au volume (qui est réglé à la moitié), je laisse aux auditeurs le soin de régler le son comme ils veulent.

    Répondre
  27. Salut Matt,
    Encore une p’tite question !!!
    Le big boss de Sam :)
    Voilà, tout fonctionne à peu près correctement sauf qu’au bout de 2 ou 3 jours, la lecture s’arrête!
    Y’at-il un moyen de détecter l’arrêt du deck et de le remettre en play s’il est arrêté, plus de X Secondes ?
    Merci !

    Répondre
  28. Bonjour Matt,

    j’ai vu que tu as laissé un commentaire, ou tu aborde le sujet, concernant le rescan d’un dossier.

    Je souhaiterais savoir si il serait possible que SAM, scan le dossier dans lequel il pioche les fichiers pour qu’il soit maintenu à jour.
    De cette façon, je n’aurais qu’a ajouter mes fichiers et il en tiendra compte pour sa programmation, sans avoir besoin à chaque fois de supprimer le répertoire et d’y ajouter le dossier.

    Imaginons un dossier « Dance » par quel commande devrais-je appeler le scan automatique avant d’en extraire les fichiers?

    Merci d’avance pour la réponse, si cela est possible bien évidement.

    Bonne journée ;)

    Répondre
    • Bonjour Matt,

      Je pense que tu es passé a côté de ma question, celle-ci à été posté pendant la période ou le nom de domaine étais indisponible, à moins que tu n’ai peut-être pas de réponse à ma question.
      Je me permet de la reposer ^^ :
      Penses-tu qu’il serait possible que le script scan automatiquement un répertoire avant qu’il ajoute les titres dans la « Queue » ?

      De cette manière, je n’aurais qu’a ajouter régulièrement mes fichiers dans les répertoires respectif et il seront automatiquement pris en compte sans avoir a les ajouter au fur et a mesure dans la base de SAM.

      Merci pour la réponses ou au moins de sa lecture ! lol
      A ++ ;)

      Répondre
      • Salut Ulrich,

        Essaie ceci :
        1- crée un script PAL
        2- mets-cette ligne de code :

        SUBDIR['c:\music\'].Rescan;

        3- sauvegarde le script PAL et lance-le.

        Cela scanne un répertoire ainsi que tous ses sous-répertoires et les ajoute à la playlist normalement. Pour ajouter les fichiers trouvés à la suite de ta liste de lecture, rajoute cette ligne :

        SubDir['c:\music\'].QueueBottom(smWeighted, EnforceRules);

        C’est à tester (je lance SAM sous linux avec Wine et il a un peu de mal avec les chemins des lecteurs), sous Windows cela devrait fonctionner.

  29. Bonjour,voila j’utilise sam depuis maintenant un an ,et je vous remerci de tous vos bon conseil afin de bien l’utiliser !
    Une petite question me trotte depusi le début de mon utilisation et j’espére vraimenent que vous allez pouvoir m’aider!
    J’utilise sam pour creez mes playlist que je diffuse ensuite avec un autre procédé ! y a t’il moyen d’enregistré les playlists enchainé ?
    Il y a bien la fonction  » enregisté » mais il me sépare les titres à chaque fois !!
    Merci de votre aide !!

    Répondre
  30. Salut SAM,

    J’utilise SAM Broadcaster pour une diffusion 24h/24. Je souhaiterai insérer des jingles entre les chansons. C’est la raison pour laquelle j’ai copié le script Pal que tu as proposé.
    Ce dernier répond à mes besoins, mais le seul soucis c’est que le jingle se déclenche en coupant la chanson suivante.

    En schématisant la situation :

    Lorsque la chanson n°1 se termine, la chanson n°2 vient à son tour.Mais au moment où la chanson n°2 commence, le jingle se déclenche et coupe cette dernière. Et au lieu de reprendre la chanson n°2, qu’il a coupé auparavant, ça passe directement sur la chanson n°3.

    J’espère que tu aurais une solution à m’apporté. Merci

    Répondre

Laisser un commentaire