dadurch, dass du die alten Skripte stillgelegt hast, funktioniert meine Next-Taste nicht mehr. Ich habe mir deine Hilfe-Datei für die Skripte geladen, da wird aber leider nirgendwo was angezeigt außer den Kategorien.
Aber da du ja deine Hilfe angeboten hast…
Aaalso: Ich brauche ein Skript, das den nächsten Titel anspielt und dabei den gerade laufenden ausblendet. Ich habe eine Playliste mit drei Playern. Bei dem Skript sollte folgendes möglichst gegeben sein:
Läuft in Player 1 ein Titel, so wird beim Abfahren des Skripts der laufende Titel ausgeblendet und der Titel in Player 2 gestartet. Das ganze natürlich auch umgekehrt: wenn in Player 2 ein Titel läuft, wird Player 1 gestartet.
Da Player 3 nur sporadisch (mit Jingles oder ähnlichem) belegt wird, wäre es toll, wenn das Skript irgendwie checken könnte, ob ein Element im Player 3 geladen ist und den Player davon abhängig in den Next-Modus miteinbezieht.
Wenn das nicht gehen sollte, wäre es klasse, wenn du irgendeine andere Lösung parat hättest.
Ausblenden geht zur Zeit nur über den Umweg Automation. Du müsstest also die Befehle SetAutomation(true), AutomationNext, SetAutomation(false) ausführen. Dann wird das mit dem dritten Player allerdings kompliziert …
Ich werde mal noch eine Methode für das Ausblenden hinzufügen.
Wäre gut, ließe sich das mit dem Player checken denn auch irgendwie machen?
Dieser “SetAutomation”-Befehl klappt im Moment ja auch nicht. Da kommt immer der Fehler “Unknown Identifier ‘SETAUTOMATION’”…
Dafür musst du nun das Interface IPlaybackControl benutzen:
CurrentPlaybackControl.SetAutomation(true)
Siehe meine Hinweismail im englischen Forum gestern. Ich hab die Interfaces mal etwas aufgeräumt. IPlaylist ist nun nur noch für die reinen Playlist-Daten zuständig, IPlaybackControl für die Playersteuerung.
Brauche auch Hilfe.
Nachfolgendes Script läuft auch nicht mehr.
Komme leider ohne Hilfe nicht weiter.
Es wird jeweils zur vollen Stunde ausgeführt.
Lief bisher einwandfrei.
begin
CurrentPlaylist.LOad(‘Y:\Verzeichnisse\mAirList\playlists’ + FormatDateTime(‘YYYY-MM-DD-HH’, now) + ‘.mlp’);
CurrentPlaylist.AutomationNext;
end.
Hi Torben,
hab gesehen, dass es ja jetzt diesen FadeOut-Befehl für das Skript gibt. Könntest du mir für meinen speziellen Fall noch mal Hilfe leisten, wie so ein Skript am besten aussehen könnte?
Wäre sehr nett…
begin
pl0 := CurrentPlaybackControl.GetPlayer(0);
pl1 := CurrentPlaybackControl.GetPlayer(1);
if pl0.GetState = PS_LOADED then begin
CurrentPlaybackControl.PlayerStart(0);
if pl1.GetState = PS_PLAYING then CurrentPlaybackControl.PlayerFadeOut(1);
end
else if pl1.GetState = PS_LOADED then begin
CurrentPlaybackControl.PlayerStart(1);
if pl0.GetState = PS_PLAYING then CurrentPlaybackControl.PlayerFadeOut(0);
end;
end.[/code]
Bei dreien wird’s kompliziert. Nehmen wir an, Player 1 läuft und sowohl in Player 2 als auch Player 3 ist was geladen? Welcher soll dann zuerst gestartet werden?
Vermutlich wirst du jetzt antworten: Derjenige, dessen Element weiter oben in der Liste steht. Das ist prinzipiell auch kein Problem. Du kannst über IPlayer.GetItem eine Referenz auf das Item bekommen und dann mit IPlaylist.IndexOf ermittelt, an welcher Position das steht. Und dann halt den Player mit dem Item mit der niedrigen Position starten … Davor hab ich jetzt vor dem Frühstück aber wirklich keine Zeit
Nehmen wir an, Player 1 läuft und sowohl in Player 2 als auch Player 3 ist was geladen? Welcher soll dann zuerst gestartet werden?Vermutlich wirst du jetzt antworten: Derjenige, dessen Element weiter oben in der Liste steht.
Ganz genau, das wäre am logischsten. ;-)
Du kannst über IPlayer.GetItem eine Referenz auf das Item bekommen und dann mit IPlaylist.IndexOf ermittelt, an welcher Position das steht. Und dann halt den Player mit dem Item mit der niedrigen Position starten ... Davor hab ich jetzt vor dem Frühstück aber wirklich keine Zeit ;)
Ich behaupte ja wirklich von mir, dass ich in Sachen Computer ein überdurchschnittliches Wissen habe, aber sorry - bei diesen Skript-Befehlen verstehe ich nur Bahnhof. Deswegen wäre es sehr, sehr genial, wenn du mir das Skript noch um den dritten Player erweitern könntest, so wie du's oben beschrieben hast.
Das wäre mir echt sehr wichtig, muss ja nicht unbedingt vor dem Abendessen sein... :-)
Danke für deine Mühe!
Ich träume ja noch immer von einer Scriptsammlung mit vielen Beispielen aus dem “praktischen Einsatz”. Das Ganze in Deutsch.
Es gibt zwar Codeschnipsel im englischen Forum, die mich aber
mit Grundkenntnissen in Englisch nicht in Ziel bringen.
Wäre schön, wenn hier weitere Beispiele hinzu kommen würden.
ich habe zwischenzeitlich dieses Skript erstellt, das aber leider nicht so wie von mir gewünscht funktioniert:
[code]var
pl0, pl1, pl2: IPlayer;
begin
pl0 := CurrentPlaybackControl.GetPlayer(0);
pl1 := CurrentPlaybackControl.GetPlayer(1);
pl2 := CurrentPlaybackControl.GetPlayer(2);
if pl0.GetState = PS_LOADED then begin
CurrentPlaybackControl.PlayerStart(0);
if pl1.GetState = PS_PLAYING then CurrentPlaybackControl.PlayerFadeOut(1);
if pl2.GetState = PS_PLAYING then CurrentPlaybackControl.PlayerFadeOut(2);
end
else if pl1.GetState = PS_LOADED then begin
CurrentPlaybackControl.PlayerStart(1);
if pl0.GetState = PS_PLAYING then CurrentPlaybackControl.PlayerFadeOut(0);
if pl2.GetState = PS_PLAYING then CurrentPlaybackControl.PlayerFadeOut(2);
end
else if pl2.GetState = PS_LOADED then begin
CurrentPlaybackControl.PlayerStart(2);
if pl1.GetState = PS_PLAYING then CurrentPlaybackControl.PlayerFadeOut(1);
if pl0.GetState = PS_PLAYING then CurrentPlaybackControl.PlayerFadeout(0);
end;
end.[/code]
Die dritte else-Bedingung wird nicht berücksichtigt. Ich wollte es so machen, dass immer wenn ich Player 3 von Hand belade, dieser als nächstes abgespielt wird, unabhängig von der Position des Elements in der Playlist.
Kannst du mir da helfen? Oder evtl. deine Idee von weiter oben verwirklichen? Das was du da oben schreibst, klingt so, als müsstest du es “nur noch” in ein paar Buchstaben fassen…
Der Informatiker in mir würde erklären: Das zweite und dritte “if” sind der “else”-Teil vom ersten “if”, demnach ist das zweite “else” das erste “else” vom zweiten “if” und nicht das zweite “else” vom ersten “if”. Alles klar?
Ich hab aber noch keine Zeit gehabt, mir das in Ruhe anzuschauen. Wenn ich endlich die 1.5.44 hochgeladen hab (ein paar Kleinigkeiten fehlen noch) wird es ja dank des neuen PlayerAutoLoad-Befehls eh alles einfacher.
Auch wenn ich dich hiermit mittlerweile wahrscheinlich tierisch nerve… Kannst du mir erklären, inwiefern mir der AutoLoadBefehl beim Umsetzen eines Next-Skriptes hilft? Gibt’s eine Möglichkeit, die Sache mit den else/if-Bedingungen anders hinzukriegen?
Ach herrje, wär das toll, wenn das mit der Next-Taste endlich mal klappen würde und das Skript auch berücksichtigen würde, was das nächste Element in der Playlist ist. Keine Chance, Torben?
Sorry, aber da verstehe ich leider nur Bahnhof und Kofferklau. Die Player sollen ja weiterhin automatisch be- und entladen werden (bis auf den dritten). Insofern versteh ich nicht, was mir die AutoLoad-Funktion helfen soll. Es geht ja auch darum, alles mit einem einzigen Hotkey zu machen und das mAirList prüft, welches das nächste Element in der Playlist ist.
Dazu müsste aber dieses Problem gelöst werden:
Bei dreien wird's kompliziert. Nehmen wir an, Player 1 läuft und sowohl in Player 2 als auch Player 3 ist was geladen? Welcher soll dann zuerst gestartet werden?
Vermutlich wirst du jetzt antworten: Derjenige, dessen Element weiter oben in der Liste steht. Das ist prinzipiell auch kein Problem. Du kannst über IPlayer.GetItem eine Referenz auf das Item bekommen und dann mit IPlaylist.IndexOf ermittelt, an welcher Position das steht. Und dann halt den Player mit dem Item mit der niedrigen Position starten ... Davor hab ich jetzt vor dem Frühstück aber wirklich keine Zeit ;)
Könntest du mir vielleicht noch mal die Ansätze für ein Skript liefern, das zu meinem mAirList-Desktop - wie auf der vorigen Seite beschrieben - passt? Das wäre sehr cool.