So, Jeschäftsfreunde! In diesem Thread versicherte @Torben, daß der Trick mit dem stummen Abfahren von Titeln, z. B. von Instrumentals vor der vollen Stunde, nicht möglich sei. Ist es wohl auch nicht, aber er hatte dort selber einen Workaround vorgeschlagen, der aber aus irgendeinem Grunde nicht weiterverfolgt wurde. Soweit der Stand der Dinge.
Ich habe das nicht auf mir sitzen lassen, und daher zeige ich dem Boss jetzt mal, wo der Barthel den Rauscher holt!*
Im folgenden seht Ihr das neueste Produkt der TSD-Forschung (basierend auf Torbens Idee): Ein Skript, für solche, die ständig Ihr Backtiming vergessen (also wie mich). Es nimmt durch Knopfdruck (halbautomatisch also) den nächsten Titel zum Backtiming her, indem es ständig die CueIn-Marke nachführt, bis z. B. der zuständige Regler geöffnet wird. In diesem Falle ist dann der Titel automatisch so gekürzt worden, daß er zur vollen Stunde fertig sein wird. Mission accomplished!
Das Skript ist kombinierbar mit den hier schon vorgestellten Backtiming-Routinen – wie der betreffende (Schluß-) Titel ausgesucht wird, muß dann verfeinert werden. Damit wäre es dann zur Vollautomatik geworden. Ebenso könnte man die Soll-Ende-Zeit flexibel gestalten – all das nur als Anregung für weitere Forschungsarbeit. Leute mit Automation oder ohne Pult können das CueIn
durch ein FadeIn
ersetzen, es funktioniert im Prinzip genauso.
Weitere layoutmäßige Randbedingungen sind meiner Testumgebung geschuldet, ich hatte insbesondere
-
einen Button namens
BUTTON.1
(leuchtet nur) und -
einen (etwas breiteren) Button namens
BUTTON.4
(das ist der zum EInschalten)
am Start. Diese Buttons geben beim klicken jeweils einen gleichnamigen Befehl von sich. Zum Ausprobieren läßt sich die Zeit im mAirList-Universum einfach durch Doppelklick auf die Zeitanzeige in der Statuszeile verändern, damit Ihr nicht immer jeweils auf die volle Stunde warten müßt.
Wie gesagt: Allen Anzeige- und Rückmeldungsquatsch kann man auch weglassen oder nach seinem eigenen Gusto gestalten. Ihr seid dahingehend sicher kreativ.
Und jetzt geht es los:
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.GetDuration)/24/60/60; // … dessen Dauer feststellen
if NaechsterTitel.GetCuePosition(ptStartNext) <> 0 then // Falls StartNext gesetzt, dann dieses als Dauer nehmen
DauerNT := TimeValueToSeconds(NaechsterTitel.GetCuePosition(ptStartNext))/24/60/60;
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.
Spielt jetzt also der letzte Titel, der noch ganz in die Stunde paßt, so wandert bei Aktivierung der Funktion (ich habe sie hier zu Ehren des Mondlandungsjubiläums sehr apollomäßig B/T Auto
genannt) das CueIn des allerletzten Titels derart nach hinten, daß beim Titelstart dessen Schluß immer auf die volle Stunde trifft, sogar, wenn er eigentlich schon hätte anfangen müssen. Wollte man das gar nicht, läßt sich der Vorgang auch abbrechen, und alles ist wie vorher. Und wenn Ihr es Euch doch wieder anders überlegt habt, könnt Ihr die Funktion auch jederzeit wieder einschalten.
Ohne mich selber über die Maßen loben zu wollen: Ich finde das geil!
Punktgenaue Grüße
TSD
* Sollte der Verhinderungsgrund Arbeitsüberlastung gewesen sein, nehme ich diesen Satz selbstverständlich zurück!