als mairlist-Neuling kenne ich mich noch nicht so gut aus, wie ich was realisieren kann in mAirList. Nun meine Frage:
zur Zeit bin ich dabei mairlist für einen nichtkommerziellen Radiosender zu konfigurieren. Nun habe ich eine Frage. Ist es möglich, in der Eventliste auch stündliche Events zu erstellen, die immer in Abhängigkeit von der Länge der Audiodateien einer m3u-Playlist ihren Startzeitpunkt selbstständig backgetimed erstellen?
D.h. angenommen stündlich wird ein event abgespielt der auf eine m3u-Playliste zugreift und die in der m3u-Playliste gespeicherten Audiodateien abspielen soll. Die m3u-Datei wird immer wieder aktualisiert, d.h. die Länge der Playliste ändert sich. Nun soll der event dann backgetimed starten um dann immer bei Sendezeit xx:00:00 am Ende anzukommen.
Beispiel:
es läuft eine automatisierte Sendung
die m3u-Datei “backtimer.m3u” ist 50 Sekunden lang
der event startet die m3u-Datei z.B. um 12:59:10
dann wird…
die m3u-Datei verändert, so dass diese “backtimer.m3u” dann 30
Sekunden lang ist
Es gab früher mal eine Option “Inverses Backtiming”, die ist aber inzwischen unter den Tisch gefallen. Wenn sich die Länge des Elementes jedesmal ändert, dann kommt man um ein bisschen Scripting sowieso nicht herum.
Ich habe dir mal folgendes Script zusammengehackt. Es macht grob folgendes:
Playlist-Element für die Datei erzeugen.
Fixzeit so setzen, dass das Element so startet, dass es exakt mit dem nächsten Stundenanfang endet.
Element an die passende Stelle in die Playlist einfügen.
Für Punkt 3 ist es wichtig, dass die errechneten Startzeiten aller Playlistelemente bekannt sind; es muss also entweder gerade ein Player aktiv sein (dann wird dessen Startzeit für das Backtiming genommen), oder du musst die Playlist-Option “Backtiming fortlaufend aktualisieren, solange kein Player aktiv ist” einschalten, dann klappt es auch “im Stand”.
Das Script kann dann zu einem beliebigen Zeitpunkt aufgerufen werden.
Zum Test kannst du auch die interne Uhr von mAirList verstellen (Doppelklick auf die Uhrzeit in der Statuszeile). Das Script nutzt die Funktion “FakeNow”, bedient sich also im Zweifel dieser “gefälschten Zeit”.
Ich freue mich auf dein Feedback.
var
i: integer;
d, fixtime: TDateTime;
pi: IFilePlaylistItem;
found: boolean;
begin
// Playlist-Element erzeugen, dabei die Länge ermitteln
pi := Factory.CreateFilePlaylistItem('d:\temp\test.mp3', [fitDuration]);
// Hier kann man dem Titel noch einen netten Namen usw. geben
pi.SetTitle('Test-Element');
// Beginn der nächsten Stunde ermitteln;
// Wir nehmen GetFakeNow, funktioniert auch mit interner Zeitverstellung.
d := trunc(Instance.FakeNow*24 + 1)/24;
// Fixzeit auf Stundenbeginn minus Länge setzen.
// Dazu müssen wir die Länge nach DateTime umrechnen.
fixtime := d - TimeValueToSeconds(pi.GetDuration)/24/60/60;
pi.SetStartTime(sttFixed, fixtime);
// Element in die Playlist einfügen.
// Dazu suchen wir das Element, das eine berechnete Startzeit hat,
// die größer als fixtime ist;
// wir sollten die Playlist sicherheitshalber solange sperren
found := false;
CurrentPlaylist.BeginRead;
try
for i := 0 to CurrentPlaylist.GetCount - 1 do
if CurrentPlaylist.GetBacktiming(i, btEstimated) > fixtime then begin
CurrentPlaylist.Insert(i, pi);
found := true;
end;
finally
CurrentPlaylist.EndRead;
end;
// Falls kein solches Element gefunden werden konnte, die Datei einfach
// am Ende der Playlist anhängen.
if not found then
CurrentPlaylist.Add(pi);
end.