Skript für Next-Modus

Hi Torben,

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… :slight_smile:
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:

  1. 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.
  2. 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. :wink:

Danke im Voraus!

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.

Torben

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.

Torben

Danke, jetzt klappt’s wieder…

Hallo Torben.

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.

Kannst Du bitte mal helfen?

Zumindest den ersten Befehl hättest du leicht selbst reparieren können, hättest du den mehrfach erwähnten Thread gelesen.

So müsste es nun gehen:

begin CurrentPlaylist.LoadFromFile('Y:\Verzeichnisse\mAirList\playlists\' +FormatDateTime('YYYY-MM-DD-HH', now) + '.mlp', false); CurrentPlaybackControl.AutomationNext; end.

Torben

Danke für Deine Hilfe.
Ich bin nun mal kein Programmierer, nur ein dummer Radiomacher.

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…

Hier ist das Script für zwei Player:

[code]var
pl0, pl1: IPlayer;

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 :wink:

Torben

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.

Hi Torben,

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… :wink:

Grüße,
der Agent

Bin jetzt kein Pascal/Delphi-Profi mehr, aber als ich noch mit Turbo Pascal programmiert habe, gab es nur einen Else-Befehl pro If-Befehl…

Daran könnte es also liegen.

Christoph

Nein, das ist nicht das Problem.

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? :wink:

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.

Torben

Ah okay, aber dann erklärt es mir bitte nicht der Informatiker, sondern der Erklär-Bär in dir, ja? :smiley:

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?

War das nicht bereits geklärt? http://forum.mairlist.de/viewtopic.php?t=877&start=15

Das einzige, was Michels Script noch nicht kann, ist den nächsten freien Player zu bestimmen. Aber das ist ja dann auch leicht hinzukriegen.

Torben

Sorry, aber da verstehe ich leider nur Bahnhof und Kofferklau. :wink: 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.