Sorry, hat etwas gedauert. Hier ist mein Entwurf für eine Lösung.
Ich habe mir der Übersichtlichkeit unter ‘F:\mAirList\teststation’ eine kleine Ordnerstruktur aufgebaut. Und zwar gibt es dort vier Unterordner:
- “music”: Enthält die Musik-Playlisten im Namensschema “YYYY-MM-DD-HH.m3u”.
- “ads”: Enthält die Playlisten für die Werbeblöcke, ebenfalls als M3U im Schema “YYYY-MM-DD-HH.m3u”.
- “news”: Enthält die Nachrichten als einzelne MP3s, wiederum im Schema “YYYY-MM-DD-HH.mp3”.
- “jingles”: Da sind der News-Opener und -Closer drin.
Beispiel für den aktuellen Inhalt der Ordner (nur mit Werbung für das Ende der heutigen 21h-Stunde und Nachrichten+Musik für die anschließende 22h-Stunde):
/news/2007-10-29-22.mp3
/jingles/news-open.mp3
/jingles/news-close.mp3
/music/2007-10-29-22.m3u
/ads/2007-10-29-21.m3u
Dazu kommt dann folgendes Script, das man rechtzeitig vor der vollen Stunde per Event-Scheduler startet:
[code]const
MusicDir = ‘f:\mAirList\teststation\music’;
AdsDir = ‘f:\mAirList\teststation\ads’;
NewsDir = ‘f:\mAirList\teststation\news’;
JinglesDir = ‘f:\mAirList\teststation\jingles’;
// Sekunden vor der vollen Stunde, bevor der News-Opener kommt
NewsDelay = 7;
var
ads: IContainerPlaylistItem;
pi: IPlaylistItem;
nextHour: TDateTime;
delay: single;
begin
// nächste Stunde als Delphi TDateTime berechnen
nextHour := (trunc(now *24) + 1) / 24;
// Werbung als Container laden
ads := CreateContainerPlaylistItem;
ads.GetPlaylist.LoadFromFile(AdsDir + FormatDateTime(‘yyyy-mm-dd-hh’, now) + ‘.m3u’, false);
IPlaylistItem(ads).SetTitle(‘Werbung’);
// ausrechnen, wann die Werbung starten muss, erstmal in Sekunden vor der vollen Stunde
delay := NewsDelay;
delay := delay + (IPlaylistItem(ads).GetDuration/10000000);
// jetzt umrechnen in TDateTime
delay := delay / (246060);
// Fixzeit setzen
IPlaylistItem(ads).SetStartTime(sttFixed, nextHour - delay);
CurrentPlaylist.Add(IPlaylistItem(ads));
// News-Opener einfügen
pi := CreatePlaylistItemFromFile(JinglesDir + ‘news-open.mp3’, true);
CurrentPlaylist.Add(pi);
// News einfügen
pi := CreatePlaylistItemFromFile(NewsDir + FormatDateTime(‘yyyy-mm-dd-hh’, nextHour) + ‘.mp3’, false);
CurrentPlaylist.Add(pi);
// News-Closer einfügen
pi := CreatePlaylistItemFromFile(JinglesDir + ‘news-close.mp3’, true);
CurrentPlaylist.Add(pi);
// Musik der nächsten Stunde einfügen
CurrentPlaylist.AppendPlaylist(CreatePlaylistFromFile(MusicDir + FormatDateTime(‘yyyy-mm-dd-hh’, nextHour) + ‘.m3u’));
end.[/code]
Das Script macht genau das, was ich oben beschrieben habe: 1. Die Werbung als Container laden. 2. Die Fix-Zeit des Containers so anpassen, dass die Werbung genau x Sekunden (ist oben konfigurierbar, Beispiel 7) vor der vollen Stunde zuende sind. 3. News-Opener, -Inhalt und -Closer anhängen. 4. Musik anhängen. Fertig 