Vollautomatische Ausspielung von Wiederholungen und Vorproduzierten Sendungen

PS: Ich liebe das Markdown vom neuen Forum.

Danke für die Ausführungen. Lange- und kurze Schreibweise bringe ich schon passend zusammen. Auch wenn ich die Syntax immer noch nicht verstanden habe. Schauen wir mal.

Ja, das ist wirklich klasse.

Jetzt muss ich mal sehen, wie ich das noch unterbringe.

Ich würde erst mal den Dateinamen, des aktuellen Items in eine Variable schreiben und .cue anhängen und dann das lesen der Cue Datei triggern.
Wobei ich da sicherlich noch abfangen muss, dass die Cue Datei nicht immer existiert und nur wenn sie existiert, soll sie auch gelesen werden.

const
  MAX_COUNT = 3;

var
  i: integer;
  count: integer;
  cue: IFilePlaylistItem;

begin
  CurrentPlaylist.BeginUpdate;
  try
    count := 0;
    for i := 0 to CurrentPlaylist.GetCount - 1 do
      if CurrentPlaylist.GetItem(i).GetItemType = pitShow then begin
	    Factory.CreateMetadataHandler(CurrentPlaylist.GetItem(i)).ReadNativeTags;
        CurrentPlaylist.GetItem(i).AutoSearchPosition(ptCueIn);
        CurrentPlaylist.GetItem(i).AutoSearchPosition(ptFadeOut);
        CurrentPlaylist.GetItem(i).AutoSearchPosition(ptCueOut);
		cue := FilePlaylistItem.GetFilename(CurrentPlaylist.GetItem(i))+'.cue';
		CurrentPlaylist.GetItem(i).GetCueData.LoadFromCueSheet(cue:);
        count := count + 1;
        if count = MAX_COUNT then break;
      end;
  finally
    CurrentPlaylist.EndUpdate;
  end;
end.

Ich muss dieses Thema noch mal aufgreifen.

Ein Re-Do des AutoCue ist ja seit Version 6.2 Obsolet, das kann ich ja einfach beim Element anhaken.
Wo ich aber immer noch nicht weiter bin ist das neuladen eines Cue-Sheets, was seit Version 6.2 ja noch deutlich interessanter geworden ist, weil man die jetzt sinnvoll bei einer Aufzeichnung erzeugen kann.

Also muss jetzt folgendes passieren.

  1. Syndication Zulieferung, gleichbleibender Dateiname an gleichbleibendem Verzeichnis. Ist ein Cue-Sheet vorhanden, dieses importieren. Ist keins vorhanden, ggf. vorhandene Extra-Cuepunkte löschen.

  2. Ausspielung von Wiederholungen. Der MiniScheduler muss sich anhand von Variablen die richtige Datei suchen. YYYY/KW/Wochentag/Stunde/*.mp3 (es kann hier nur eine liegen, Position im Vezeichnisbaum und Dateiname, sind jedes mal anders. Dann immer AutoCue und falls vorhanden, Cue-Sheet laden. Gelöscht werden muss hier nix, das passiert bereits vorher, es sind also niemals extra Cue-Punkte im Tag.

Hat da jemand eine Idee?

Ja, wenn die Cue-Daten einmal eingelesen sind, kann man sie sowohl im Element, im MMD file, in der Datenbank oder in der Plalyliste speichern, genau so wie alle andren META daten auch.

Entsprechend bleiben die erhalten. Das nutzen wir mehrfach täglich.

Wenn sich die Datei unter gleichem Dateinamen ändert, funktioniert das natürlich nicht mehr. Dazu habe ich noch einen anderen Thread offen aber offensichtlich lässt sich das im Moment auch nicht scripten.

Ja genau, das meinte ich… Beispiel: Ich kriege eine vorproduzierte Sendung Meine_ganz_tolle_Sendung.mp3 und das entsprechende Cue Sheet Meine_ganz_tolle_Sendung.mp3.cue. Diese wurde produziert am 19. August 2019. Nun folgt das Update (die Sendung läuft wöchentlich) der beiden Dateien am 26. August 2019. Inhalt der mp3 und der mp3.cue Datei sind jetzt natürlich anders. Die Titelübertragung ist dann die vom 19. August (Cue-Sheet) und nicht die neue vom 26. August ?!?

Und wenn die vorproduzierte Sendung den Anhang [Nummer der Kalenderwoche] erhält - entweder vom Zulieferer oder von dir?

Vielleicht kann man auch was basteln, dass man das Upload-Datum automatisiert vor das .mp3 einfügen lässt? :thinking:

Das Thema hatte ich hier: Vollautomatische Ausspielung von Wiederholungen und Vorproduzierten Sendungen
Schon mal auf gemacht, bisher aber leider noch keine Lösung gefunden. In der Scripting engine fehlt offensichtlich der Zugriff auf die extra Cues, jedenfalls konnte mir bisher noch niemand sagen, wie ich damit in Scripten umgehen müsste.

Ja… Manchmal ist das so eine Sache mit dem Wald und den Bäumen.

Ich habe mich mal wieder an meine Vollautomatisierung gemacht und das Script von weiter oben, vereinfacht. Wir gehen einfach die ganze Playliste durch, suchen nach dem Item Element “Sendung”, laden erst mal den ID3 Tag und falls eine existiert, auch die Cue-Datei.

var
  i: integer;
  cue: IFilePlaylistItem;

begin
  CurrentPlaylist.BeginUpdate;
  try
    for i := 0 to CurrentPlaylist.GetCount - 1 do
      if CurrentPlaylist.GetItem(i).GetItemType = pitShow then begin
        Factory.CreateMetadataHandler(CurrentPlaylist.GetItem(i)).ReadNativeTags;
        cue := FilePlaylistItem.GetFilename(CurrentPlaylist.GetItem(i))+'.cue';
        CurrentPlaylist.GetItem(i).GetCueData.LoadFromCueSheet(cue);
      end;
  finally
    CurrentPlaylist.EndUpdate;
  end;
end.

Muss ich das laden des Cue-Sheets in eine weitere “Try” Schleife packen oder reicht das erste try vor der for-Schleife dafür auch noch aus?
Ich habe es noch nicht getestet aber passt das halbwegs oder bin ich total auf dem Holzweg?

Hmm :man_facepalming: ich bekomme einen Error (10:81): Type mismatch.

Was mache ich denn schon wieder falsch? :thinking:

Du in diesem Falle gar nichts:

Das kann so nicht funktionieren, da CreateMetaDataHandler ein Objekt vom Typ IFilePlaylistItem benötigt, und nicht IPlaylistItem.

Allerdings bliebe Dein Code auch in der nächsten Zeile hängen:

[Error] (11:16): Unknown identifier 'FilePlaylistItem'

@Torben?


Sonntägliche Grüße

TSD

In meiner Zeitzone ist heute Samstag… wo bist du denn?

Da Urlaub, scheinbares Sonntagsempfinden. Um so besser!
 

Entspannte Grüße

TSD

1 Like
Factory.CreateMetadataHandler(CurrentPlaylist.GetItem(i).AsFile).ReadNativeTags;
1 Like

Gut, dann probiere mal folgendes, @shorty.xs:

var
  i: integer;
  Cue: string;
  Item: IPlaylistItem;
  Meta: IMetadataHandler;

begin
  CurrentPlaylist.BeginUpdate;
  try
    for i := 0 to CurrentPlaylist.GetCount - 1 do
      Item := CurrentPlaylist.GetItem(i);
      if CurrentPlaylist.GetItem(i).GetItemType = pitShow then begin
        Factory.CreateMetadataHandler(Item.AsFile).ReadNativeTags;
        Cue := IFilePlaylistItem(Item).GetFilename + '.cue';
        Item.GetCueData.LoadFromCueSheet(Cue);
      end;
  finally
    CurrentPlaylist.EndUpdate;
  end;
end.


Bereinigte Grüße

TSD

Ach, und die Zeile

Meta: IMetadataHandler;

ist überflüssig, nur vom Ausprobieren noch übrig.

Schlampige Grüße

TSD

Und: Die Zeile

if CurrentPlaylist.GetItem(i).GetItemType = pitShow then begin

sollte schöner heißen

if Item.GetItemType = pitShow then begin

Mußte schnell gehen heute morgen.

TSD

1 Like

Ich bin mal wieder in dieses Thema hier eingestiegen.

Diese Script Syntax bring mich noch mal um (den Vestand).
Das hier kam dann am ende raus.

var
  i: integer;
  Cue: string;
  Item: IPlaylistItem;

begin
  CurrentPlaylist.BeginUpdate;
  try
    for i := 0 to CurrentPlaylist.GetCount - 1 do
      Item := CurrentPlaylist.GetItem(i);
      if Item.GetItemType = pitShow then begin
        Factory.CreateMetadataHandler(Item.AsFile).ReadNativeTags;
        Cue := IFilePlaylistItem(Item).GetFilename + '.cue';
        Item.GetCueData.LoadFromCueSheet(Cue);
      end;
  finally
    CurrentPlaylist.EndUpdate;
  end;
end.

Problem: Es passiert nichts.
Nun wollte ich anfangen, den Fehler zu suchen ud wollte ganz simpel ein SystemLog einfügen.

Nach dem Item über Item := CurrentPlaylist.GetItem(i); gesetzt worden ist, möchte ich mir das ins Log schreiben. Ich hätte angenommen, dass das über SystemLog (Item); hätte funktionieren müssen. Stattdessen bekomme ich einen Type Missmatch. Wahlweise auch SystemLog (Item.GetItemType);

Das gleiche weiter unten, den Inhalt von Cue.

Verzweifelte Grüße

Ins Log kannst Du nur Daten vom Typ String, also Buchstaben, schreiben. Item ist aber ein IPlaylistItem. Vielleicht so:

  …
  SystemLog('Holleri ' + Item.GetTitle);
  …


Syntaktische Grüße

TSD

ich klinke mich mal mit ein. @shorty.xs und ich testen das gerade intensiver und sind auf der Spur.
Es passiert folgendes:
Wenn nur ein Item in der Playlist ist, dann funzt das Script und das Cuesheet wird geladen.
Existieren mehrere Items in der Playlist, dann passiert nichts. Das Script macht nichts.
@Tondose die letzte Hilfe kam von dir, hast du eine Idee warum da was ignoriert wird sobald mehrere Items in der Playlist sind? Die Items sind von unterschiedlichem Typ, also Sendung, Musik, Jingle. Bei Sendung soll das Cuesheet aktualisiert werden. Systemlog wird geschrieben wenn wie im ersten Fall beschrieben nur ein Item in der Playlist ist und ausgespielt wird. Danke und schönes Wochenende

var
  i: integer;
  Cue: string;
  Item: IPlaylistItem;

begin
  CurrentPlaylist.BeginUpdate;
  try
    for i:= 0 to CurrentPlaylist.GetCount - 1 do
      Item:= CurrentPlaylist.GetItem(i);
      if Item.GetItemType = pitShow then begin
        Factory.CreateMetadataHandler(Item.AsFile).ReadNativeTags;
        Cue:= IFilePlaylistItem(Item).GetFilename + '.cue';
	Item.GetCueData.LoadFromCueSheet(Cue);
	SystemLog(Cue);
      end;
  finally
    CurrentPlaylist.EndUpdate;
  end;
end.

Hm ok. Ich hab nochmal etwas rumprobiert und das Problem eingegrenzt:
Das Skript lädt das Cuesheet immer im letzten/unterstem Item wenn es vom Typ Sendung ist. Sind also z.B. 3 Items in der Playlist, 1=Sendung, 2&3=Musik dann macht das Skript nichts. Ich glaube wir wollten die Playliste komplett durchgehen und alle Items vom Typ Sendung aktualisieren, richtig @shorty.xs? Ich kann etwas Javascript und denke da eher an einen for each loop. Mh … mal sehen bin jetzt zu müde. Wenn jmd. Ideen hat, haut raus.