Überplanungsskript

Liebe mAirList Gemeinde. Nachdem ich nun so nach und nach mein Layout an meine Bedürfnisse angepasst habe und damit schon recht zufrieden bin, bin ich an einem Punkt angelangt, an dem ich um eure Hilfe bitte. Eventuell kann man ja auch ein Feature-Request daraus machen, jedoch wäre ich mit einer Skript-Lösung durchaus zufrieden. (Oder das gesuchte gibts schon und ich bin einfach nur von dieser extremen Hitze bei uns zu erschöpft, um die Funktion zu finden.)
Worum gehts: Ich lasse mir mittels Mini-Scheduler Playlists erzeugen und an die aktuelle Playlist anhängen. Um genau xx:54:48 startet zu jeder Stunde der TOH Countdown gefolgt vom Stinger für die Nachrichten.
So jetzt gibts ja das Stumme abfahren von Songs von @Tondose und da kam mir dann die Idee, dass ich ein Feld haben möchte, welches mir die Überplanung der aktuellen Playlist anzeigt: (Links daneben der Countdown zum nächsten Fixelement, dieses Element kann man ja per GUI einbinden)


Da wo + oder - Zeit steht soll dann also entweder +mm:ss oder eben -mm:ss stehen. Beispiel: Wenn ein Sendeloch ist soll der Hintergrund des Elements (Statischer Text mit Fernsteuerungs-ID OVERLAP) rot sein und dann soll (folgendes Beispiel) in dem Element -0:37 stehen (Zeit des Sendeloches)

Wenn jedoch kein Sendeloch ist soll das so aussehen, dass der Hintergrund grün ist und der Text +1:49 stehen (so viel würde das Element also über

Jedoch kann es auch vorkommen, dass der letzte Song gar nicht mehr in die Stunde passt (Sollte nicht vorkommen, außer ich rede wieder zu viel und zu lange) dann soll der Text die Overlapzeit des Titels und die Zeit des nicht spielbaren Elements anzeigen. (Hintergrund Orange würde mir hier einfallen - Text also + 4:22)

Anhand dieser Playlist habe ich dann noch ein Beispiel, falls eine Moderation noch eingeplant ist, soll diese auch noch miteinberechnet werden

Text hier wäre (auch in orange) + 10:32
Letzterer Fall sollte zwar nicht zur Anwendung kommen, doch für ein sauberes Scripting wär es schon schön, solche Fälle auch zu haben.

Ich merk schon der Thread wird genau so zu lang wie meine Moderationen, jedoch hoffe ich dass ihr mir helfen könnt.
Vielleicht gibts ja auch einzelne Antworten auf meine Fragen:

  • Wie bekomme ich die Zeit des nächsten Fix-Timing-Elements per Skript?

  • Wie bekomme ich die Startzeit des letzten davor (spielbaren) geplanten Elements (Die Dauer des Elements und das Zeiten-Zusammenrechnen hab ich schon herausgefunden)

  • Wie bekomme ich im Skript heraus, ob der letzte Titel vor dem Fixelement aktuell als spielbar geplant wird, oder ob dieses übersprungen würde, je nachdem müsste das Skript ja auch die ungeplanten Elemente mit einbeziehen.

So das wars. Sollten noch Fragen auftauchen, dann immer her damit.
Grüße aus dem mittlerweile schon überhitzten Wien

1 Like

Es ist zwar nicht perfekt, aber ich habs so einigermaßen hinbekommen:

var
  DauerBF, LastZeit, FixedZeit: TDateTime;
  FixedIndex, PlayedItems: integer;
  FixedItem, BFItem: IPlaylistItem;

procedure OnLoad;
begin
  EnableTimer(100);
  PlayedItems := Playlist(0).GetNextIndex;
end;

procedure OnTimer;
begin
  if CurrentPlaylist.GetNextFixedTime > 0 then
  begin
    FixedItem := Playlist(0).GetNextFixedTimeItem;
    FixedIndex := Playlist(0).IndexOf(FixedItem);

    if FixedIndex = PlayedItems then
    begin

      ExecuteCommand('OVERLAP TEXT ! ' + FormatDateTime('hh:nn:ss', Playlist(0).GetMetadata(Playlist(0).IndexOf(FixedItem)).GetStartTime(sttCalculated)));
      ExecuteCommand('OVERLAP BACKGROUNDCOLOR #FFAA00');

    end
    else
    begin
      BFItem := CurrentPlaylist.GetItem(FixedIndex - 1);
      LastZeit := Playlist(0).GetMetadata(Playlist(0).IndexOf(BFItem)).GetStartTime(sttCalculated);
      FixedZeit := Playlist(0).GetMetadata(Playlist(0).IndexOf(FixedItem)).GetStartTime(sttCalculated);
      DauerBF := BFItem.GetEffectivePlaybackDuration / 86400;

      if LastZeit + DauerBF < FixedZeit then
      begin
        ExecuteCommand('OVERLAP TEXT - ' + FormatDateTime('hh:nn:ss', LastZeit + DauerBF - FixedZeit));
        ExecuteCommand('OVERLAP BACKGROUNDCOLOR #AA0000');
      end
      else if LastZeit + DauerBF >= FixedZeit then
      begin
        ExecuteCommand('OVERLAP TEXT + ' + FormatDateTime('hh:nn:ss', LastZeit + DauerBF - FixedZeit));
        ExecuteCommand('OVERLAP BACKGROUNDCOLOR #00AA00');
      end;
    end;
  end
  else
  begin
    ExecuteCommand('OVERLAP TEXT + 00:00:00');
    ExecuteCommand('OVERLAP BACKGROUNDCOLOR #00AA00');
  end;
end;

begin
end.

Mit diesem Script kann ich mir Sendelöcher anzeigen lassen (Sofern dieses NICHT vor dem ersten Element in der Playlist ist, das erste Element also eine Fixzeit hat (Es wird in Orange ein ! mit der Nächsten Fixzeit angegeben.))
Sendelöcher werden in rot angezeigt, der Text hat wie gewünscht das - davor.
Sollte sich ein Titel, oder mehrere nicht ausgehen ist das auch kein Problem es wird das gewünschte + angezeigt mit dem Hintergrund in Grün, wie ich anfangs wollte.
mAirList intern wird die Zeit weitergereicht, was für mich in diesem Fall gut ist, da ich den Code sehr einfach halten konnte, es wird nur vom Element vor dem FixElement gerechnet.
Beim Laden des Skripts wird der nächste Index abgerufen, da auch bereits gespielte Elemente als Index gerechnet werden (Sofern man eingestellt hat, dass zuletzt gespielte Elemente in der Playlist abgebildet sein sollen)
anbei noch vom Testsystem einige Screenshots:
Nächste Fixzeit, wenn erstes Element Fixzeit ist:
Nächste Fixzeit
Wenn Sendeloch in der Playlist ist:
Sendeloch
Sendung überplant:
Überplanung
Die Farben kann man natürlich im Script ändern
Wie gesagt nicht perfekt, (es gibt z.B. einen Fehler, wenn Titel nicht geladen werden können) aber für meine Bedürfnisse aktuell ausreichend.

2 Likes