Script "light logging"in Sub-Playliste

Liebe Community!
Ich versuche nun schon seit einigen Tagen ein Script zu erstellen, um die Sub-Playliste auch loggen zu können, da man im Logging ja nur die Haupt-Playliste loggen kann. (kleinere Spielerei um das Scripten besser zu verstehen…) Dies funktioniert zwar schon sehr gut, aber 1-2 dinge klappen nicht so wie ich will…

  pi := IPlaylistItem(Playlist(1).GetItem(0));
  StringList := TStringList.Create;
  StringList.Add(pi.GetTitle); 
  StringList.Add(pi.GetArtist);
  StringList.Add(FormatTimeValue('hh:mm:ss', false, pi.GetEffectivePlaybackDuration));

Also: Titel, Interpret und Dauer funktionieren schon, aber ich würde gerne noch den ElementTyp und die Original-URL des Songs bekommen.

  StringList.Add(pi.GetItemType);

Im Forum kann man zwar die Funktionen einsehen, diese sind aber von Version 1.5.15, also hab ich die Script.chm der 6er Version heruntergeladen und mir die Funktionen angesehen, aber ich seh mich da leider nicht durch.

Vielleicht kann mir ja jemand von euch weiterhelfen bzw. auf die Sprünge helfen
Danke schon mal für die Hilfe
Patrick

Geht so nicht. Daran bin ich auch schon gescheitert. Die ItemTypes sind Bestandteil einer sogenannten Enumeration, einer definierten Aufzählung von … ja was eigentlich, Konstanten. Die heißen zwar etwa pitMusic, man kommt aber nicht direkt an den String. Du müßtest Dir so etwas bauen wie

function FindType(Item: IPlaylistItem): string;
var
  Type: string;
begin
  if Item.GetItemType = pitMusic then
    Type := 'Musik'
  else if Item.GetItemType = pitVoice then
    Type := 'Sprache'
  else if Item.GetItemType = pitNews then
    Type := 'Nachrichten'
  // usw.
  else if Item.GetItemType = pitWeather then
    Type := 'Weather'
  else
    Type := 'ohne Typ';
  Result := Type;
end;

Einbauen ins Skript über

  StringList.Add(FindType(pi));

(ungetestet)


Aufgezählte Grüße

TSD

1 Like

Danke liebe @Tondose das hat schon prima geklappt!
Falls jemand auch vom Script was brauchen kann für die Zukunft erwähn ich hier noch, dass der Bezeichner Type anscheinend intern verwendet wird und man daher eine andere Bezeichnung für den String nehmen muss. (Sonst kommt -im System-Log- eine Fehlermeldung).
Jetzt würde ich noch bitte die URL des Songs (Also den Pfad der .mp3-Datei) benötigen. Hast du da vielleicht auch einen Tipp auf Lager?
Patrick.

Guter Einwand. Das kommt davon, wenn man das auf der Couch freihändig zusammenkloppt.

Den Pfad hatten wir kürzlich im Nachbarthread:

Pfad := IFilePlaylistItem(pi).GetFilename;

… mit Pfad: string;. Hatte ich oben vergessen.

Ergänzte Grüße

TSD

1 Like

Danke erst Mal für die Hilfe. Auch der Pfad funktioniert wunderbar. Jetzt noch eine letzte Frage: Wenn ich die Ramp noch mitloggen will, dann hätte ich es so gemacht:

StringList.Add(pi.GetCuePosition(Ramp1)

Aber ich bekomme den Error Unknown identifier 'Ramp1'"

Irgenwie ist da noch der Hund drinnen…

Wieder so eine Falle: Die Cue-Positionen heißen mAirList-intern ptRamp1, ptCueIn usw.

Damit nicht genug: Dauern und Positionen werden in mAirList in TTimeValue gemessen, 1 ist hier eine Sekunde. Damit man ihn formatieren (String!) kann, muß der Wert zuvor noch in das Pascal-übliche TDateTime-Format umgerechnet werden.

Das Ergebnis (wiederum ungetestet) müßte danach so aussehen:

StringList.Add(FormatDateTime('n:ss', pi.GetCuePosition(ptRamp1) / 86400));

Reklamationen bitte hier posten.

Grüße aus dem Handgelenk

TSD

1 Like

Funktioniert Perfekt!
Dass intern pt… verwendet wird hatte ich zwar zwischenzeitlich herausgefunden, aber auf die Formatierung wäre ich im Leben nie gekommen. Danke liebe @Tondose für deine Hilfe.
Schönen Samstag noch.
Patrick

1 Like