ist es möglich in einem Script den Typ des Playlist Items rauszulesen? Hintergrund ist, dass ich das Blinken der EOF Signalampel nur bei Elementen des Typs Musik haben möchte.
Hier der Ausschnitt des Scripts:
procedure OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer);
begin
if (PlaybackControl(0).GetAutomation = true) then begin
DisableTimer;
IOWarriorRemote(0).SetPort(0, false);
end;
if (PlaybackControl(0).GetAutomation = false) then begin
EnableTimer(700);
end;
end;
begin
if (PlaybackControl(0).GetAutomation = true) then begin
DisableTimer;
IOWarriorRemote(0).SetPort(0, false);
end;
if (PlaybackControl(0).GetAutomation = false) and (Item.GetItemType = pitMusic) then begin
EnableTimer(800);
end;
end;[/code]
Klar ist, dass ich eine zweite Abfrage brauche bei der zweiten IF/THEN Folge. Nun dachte ich, liest du den Typ des Elements mit GetItemType. Hierbei gab es den Fehler:
Oder anders gefragt. Gibt es in mAirlist eine Function aus der ich aus der ich GetItemType() des jetzt gerade spielenden Elements heraus extrahieren kann?
Denn wenn ich was mit for-Schleifen mache, rattert er logischerweise bis zum Ende der Playlist durch. Ich überlege mir mal heute Abend etwas.
Vielleicht mache ich auch “Summe aller Items” - “angezeigter Mülleimer am Anfang der Playlist” = Aktueller Titel. Anschließend noch eine If Playlist <= “angezeigter Mülleimer” then Abfrage.
Du musst natürlich Item auch irgendwie mit einem Wert versehen
procedure OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer);
var Item: IPlaylistItem;
begin
Item := PlaybackControl(PlaylistIndex).GetPlayer(PlayerIndex).GetItem;
if Item = nil then exit;
if (PlaybackControl(0).GetAutomation = true) then begin
DisableTimer;
IOWarriorRemote(0).SetPort(0, false);
end;
if (PlaybackControl(0).GetAutomation = false) and (Item.GetItemType = pitMusic) then begin
EnableTimer(800);
end;
end;
Krass. Klasse Torben und danke; es läuft einwandfrei. Vielleicht sollte ich echt nochmal Informatik studieren.
Darf ich nochmal nachhaken?
Nachdem die Variable Item definiert wurde, fütterst du sie mit der Info “PlaybackControl(PlaylistIndex).GetPlayer(PlayerIndex).GetItem”. Sprich, aus der aktuellen Playlist und dem laufenden Player entnimmt mAirlist ab EOFWarning die Item Informationen, richtig? Darauf wäre ich nie gekommen. Hatte immer versucht Werte aus der Playlist zu gewinnen. Unten in der If Abfrage wird vom Item der ItemType herausgenommen und mit pitMusic verglichen.
Wozu dient:
if Item = nil then exit;
Dient es dazu, wenn ein Player leerläuft und kein Element hat?
Genau. Das Script wird ja asynchron ausgeführt, also nicht exakt in dem Moment, wo die EOF-Warnung anläuft, sondern “kurz danach”, in einem anderen Thread.
Auch wenn es unwahrscheinlich ist: Theoretisch könnte es passieren, dass dein Script-Code erst läuft, wenn der Player inzwischen entladen wurde. Daher sicherheitshalber die Abfrage, ob auch wirklich ein Element geladen ist (Item <> nil).
Viele weitere Funktionen übergeben das zugehörige Item inzwischen schon als zusätzlichen Parameter. OnPlayerEOFWarning leider (noch) nicht, und ich fürchte, wenn ich das jetzt einfach hinzufüge, dann mache ich ganz vielen Leuten ihre Scripts kaputt. Also sparen wir uns das mal für einen zukünftigen Release auf.