[gelöst] IPlaybackControl

Hallo zusammen

Wie kann ich in meinen Script den Befehl “IPlaybackControl: PlayerLoad” einsetzten?

Danke für einen Hinweis.
Michel

Die Funktion erwartet zwei Parameter: 1. Die Nummer des Players (der erste hat die Nummer 0), und 2. eine Referenz auf das Item, das du laden möchtest. Dieses muss aus der zugehörigen Playlist (IPlaybackControl.GetPlaylist bzw. CurrentPlaylist) stammen. Du kannst es zum Beispiel einfach über seine Nummer referenzieren (das erste hat ebenfalls die Nummer 0):

CurrentPlaybackControl.LoadPlayer(0, CurrentPlaylist.GetItem(5));

lädt das sechste Element in den ersten Player.

Torben

Hallo Torben

Herzlichen Dank fürs Antworten. Jetzt kann es endlich weitergehen.

Genial. Leider erscheint die Meldung [Error] (2:26): Unknown indentifier ‘LOADPLAYER’ mit

CurrentPlaybackControl.PlayerLoad(0, CurrentPlaylist.GetItem(2));

klappt es :slight_smile:

Michel

Wie kriege ich den gerade markierten Element aus der Playlist raus?

Geht nicht, weil die Objekte nicht wissen, was gerade markiert ist.

IPlaybackControl und IPlaylist verwalten nur die reinen Daten. Sogenannte Kontrollklassen. Was du auf dem Bildschirm siehst, ist ein weiteres Objekt, das über genau die gleichen Interfaces (IPlaybackControl und IPlaylist) auf diese Kontrollklassen zugreift und deren Inhalt darstellt. Daher wissen die Kontrollklassen nichts über “markiert oder nicht”.

Torben

Aha, so geht das. Staune immer wieder wie flexibel das ganze mAirList ist. Genial

Somit muss ich nun ermitteln, welches Element das Nächste ist.
Hmm, mal sehen ob ich das hin kriege.

Michel


  1. Ersten freien Player ermitteln
    // Brauche ich nicht, da ich nur geschlossene Fader (Player läuft nicht) öffnen kann

  2. Erstes freies Element ermitteln, das gerade nirgendwo anders gespielt wird. Das ist nicht ganz trivial, vor allem, wenn man auch Dummys und Breaks in der Playlist hat, aber durchaus machbar.

  3. Den Player mit diesen Item laden.
    // Funktioniert seit 1.5.43

  4. Den Player starten.
    // Funktioniert

Naja, das ist eine übliche Programmiertechnik, Kontrollklassen und GUI zu trennen. Im Prinzip würde mAirList also auch ohne Fenster funktionieren, zumindest eine fertige Playlist abspielen können. Außerdem kann man so sehr leicht die GUI-Elemente austauschen. Ich hab zum Beispiel vor längerer Zeit mal eine Version gebastelt, deren Oberfläche wie Raduga aussah. Aber steckte halt mAirList drin :slight_smile: Genauso habe ich ja vor, demnächst die Playlist-Darstellung komplett neu zu schreiben. Das heißt, ich brauche nur eine neue GUI-Klasse, die Kontrollklassen bleiben gleich.

Wie es ausschaut, willst du sowas wie eine Next-Taste programmieren, ja? Wie ist denn das Szenario? Ist der Player bereits geladen oder noch nicht?

Torben

Weiss nicht ob dies einer Next Taste gleichkommt. Auf jedenfall würde diese Funktion nur im Asssist Mode gebraucht.

Folgendes Ziel möchte ich erreichen:
Wir haben insgesammt 3 Player die jeweils beim Faderstart das nächste Element laden und abspielen sollen. Eventuell brauche ich für jeden Player ein eigenes Script, dass jeweils beim Faderstart abgearbeitet wird.

Folgendes Script habe ich bereits:

begin CurrentPlaybackControl.PlayerLoad(1, CurrentPlaylist.GetItem(1)); CurrentPlaybackControl.PlayerStart(1); end.
Die Player werden nach einem Faderstop entladen und ist somit leer.

Michel

Hallo Torben

Im Live Assist kann der Player definiert werden, dass der Player automatisch geladen wird. Dies ist eigentlich genau die Funktion die ich brauche. Nur, dass ich den Ladezeitpunkt selber per Script auslösen kann.

Weist Du was ich meine?

Michel

Ja, verstehe ich. Ich denke mal darüber nach, ob ich das eventuell als Script-Funktion zur Verfügung stellen kann. Es gibt den Lade-Algorithmus natürlich irgendwo tief im Innern von IPlaybackControl (aber derzeit in Routinen versteckt, die man nicht aus dem Script heraus aufrufen kann). Wenn ich das in eine Funktion auslagere, die man einzeln pro Player aufrufen kann, wäre dir vermutlich schon sehr geholfen.

Torben

Könnte natürlich verstehen, wenn Du diesen Algorithmus nicht als Script offenlegen möchtest. Mir würde es reichen, wenn ich diesen Algorithmus mit einer Funktion per Script ansprechen könnte und so das nächste Element zurück bekomme.

Eigentlich würde ein Sendebefehl reichen: “Lade nun den Player erneut” Genau so wie es mAirList im Moment macht, eben halt nur manuell.

:wink:

Mit offenlegen hat das nichts zu tun.

Den Algorithmus für “Lade Player x mit dem nächsten freien Element” gibt es im Code natürlich schon. Er ist derzeit irgendwo implizit eingebaut in dem Algorithmus für “Lade alle Player, die AutoLoad eingeschaltet”. Was ich nun tun muss, ist “Lade Player x”, als einzelne Prozedur auszugliedern, die man dann auch aus einem Script heraus aufrufen kann. Von meinem Code gebe ich dadurch nichts preis, ich muss ihn nur etwas umorganisieren. Das dürfte sehr leicht möglich sein.

Torben

Danke schön. Da lass ich mich mal einfach überraschen.

Michel

Alles klar, wird in 1.5.44 drin sein, heißt dann PlayerAutoLoad.

WOW. Mir fehlen die Worte…

Ganz herzlichenn Dank
Michel

Als Nicht-Programmiererfahrener frage ich mich, ist die Funktion nun irgendwie aufrufbar? Wenn ja, wie lautet das Script?

Danke

Hello Powerfm_ch

Das ganze ist ziemlich einfach. Pro Player eine sep. Textdatei erstellen (z.B. PlayerA_starten.mls).
PlayerA = 0, PlayerB= 1 usw.

begin 
  CurrentPlaybackControl.PlayerAutoLoad(0);
  CurrentPlaybackControl.PlayerStart(0);
end.

Anschliessend beim Hotkey oder IO Device anstelle von “PLAYER 1-1 START” einfach RUNSCRIPT "D:\mairlist\scripts\PlayerA_starten.mls eintragen.

Jetzt musst Du nur noch einstellen, dass mAirList den Player nicht automatisch lädt. Config -> “player automatisch laden” deaktivieren.

Viel Spass
Michel

Lieber Torben

Heute war es soweit: Der Scriptbefehl “PlayerAutoLoad” wurde im Studio getestet und machte einen spitzen Eindruck. Laden und Abspielen funktionieren zügig (keine spürbare Verzögerung). Unser Head of music war vor Begeisterung fast nicht mehr von den Fadern weg zu kriegen :slight_smile:

Ganz herzlichen Dank für Dein Engagement
Michel

Super! es funktioniert!

Jetzt bin ich mit mAirList vollends glücklich.

Merci Michel und natürlich auch Torben :slight_smile:

Bitte schön.