So, bitte sehr:
var // Das übliche: Variablen deklarieren …
NaechsteVolleStunde, DauerNT, AktuelleZeit, AktuellerCue, UrsprCueIn: TDateTime;
SollBacktimen: boolean;
NaechsterTitel: IPlaylistItem;
procedure OnLoad; // … und Startbedingungen festlegen
begin
ExecuteCommand('BUTTON.4 OFF');
ExecuteCommand('BUTTON.4 TEXT B/T Auto');
SollBacktimen := false;
end;
procedure BacktimingAus; // Abschaltprozedur
begin
SollBacktimen := false
DisableTimer;
ExecuteCommand('BUTTON.4 OFF');
ExecuteCommand('BUTTON.4 TEXT B/T Auto');
ExecuteCommand('BUTTON.1 OFF');
NaechsterTitel.SetColor($EEEEEE);
NaechsterTitel.SetCuePosition(ptCueIn, UrsprCueIn);
end;
procedure OnExecuteCommand(Command: string);
begin
if (Command = 'BUTTON.4') AND NOT SollBacktimen then begin // Auto-Backtimer einschalten
ExecuteCommand('BUTTON.4 ON'); // Den Schalter schön leuchten lassen
SollBacktimen := true; // Zustand merken
NaechsterTitel := CurrentPlaylist.GetItem(CurrentPlaylist.GetNextIndex); // Nächsten ("Stand jetzt") Titel bestimmen und …
DauerNT := TimeValueToSeconds(NaechsterTitel.GetAudibleDuration)/24/60/60; // … dessen Dauer feststellen
UrsprCueIn := NaechsterTitel.GetCuePosition(ptCueIn); // Ursprüngliches CueIn merken
NaechsterTitel.SetColor($00FF00); // Grüne Marke setzen, damit man's weiß
NaechsteVolleStunde := frac((Instance.FakeNow*24+1)/24
- frac(Instance.FakeNow*24)/24); // Nächste volle Stunde bestimmen (die Methode mit "trunc" geht bei mir aus irgendeinem Grunde nicht)
EnableTimer(500); // Timer in Halbsekundenschritten loslaufen lassen
end
else if (Command = 'BUTTON.4') AND SollBacktimen then begin // Alles wieder ausschalten
BacktimingAus;
end;
end;
procedure OnTimer;
begin
AktuelleZeit := frac(Instance.FakeNow); // Aktuelle Systemzeit ohne Jahr bestimmen
if AktuelleZeit > NaechsteVolleStunde - DauerNT then begin // Wenn kritische Backtimingzeit erreicht, dann …
ExecuteCommand('BUTTON.1 ON'); // … laß etwas leuchten
AktuellerCue := AktuelleZeit - (NaechsteVolleStunde - DauerNT); // Aus Randbedingungen aktuelle Cuezeit errechnen
NaechsterTitel.SetCuePosition(ptCueIn, AktuellerCue * 86400); // Titel bekommt laufend neues CueIn (in Sekunden) verpaßt (oder FadeIn, dann "ptFadeIn")
end;
ExecuteCommand('BUTTON.4 TEXT ' + FormatDateTime('hh:nn:ss', NaechsteVolleStunde - DauerNT) + ' '
+ FormatDateTime('nn:ss', AktuellerCue)); // Anzeigen: Sollstartzeit Nächster Titel, CueIn
if AktuelleZeit >= NaechsteVolleStunde then // Beim Erreichen der vollenStunde abschalten
BacktimingAus;
end;
begin
end.
Die gesuchte Funktion heißt GetAudibleDuration
! (Warum ich auf meinem System das Fade-Out nicht höre ist eine ganz andere Baustelle und hat mich tüchtig in die Irre geführt.)
Beharrliche Grüße
TSD