Cartwall Fernsteuerung / Signalisation

Hallo Gemeinde!

In meinem Pult ist eine 10er Tastatur (für die Cartwall) eingebaut die Mittels I0-Warrior (über USB) mit dem Rechner und damit mit mAirList verbunden ist.
Die Tasten kann man auch beleuchten. Nun meine Frage… Gibt es seitens mAirList die Möglichkeit, nur die Plätze leuchten zu lassen die in der Cartwall auch tatsächlich belegt sind? Alle freien Plätze sollen dabei unbeleuchtet bleiben.

Da wirst Du Dir selber ein Script bauen müssen.
Es sollte ja möglich sein, den Status der Cartwall Player damit zu ermitteln und dann über den I/O Warrior den entsprechenden Port ein oder aus zu schalten. Je nachdem, wie das bei Dir verkabelt ist.

Danke für die Antwort.
Also wäre der Status jedes Cartplayers (ob geladen oder nicht) prinzipiell abfragbar?

Hat hier denn jemand so ein Script schon mal geschrieben?

Hier findest Du die Scripting Help, darin sollten die meisten (vermutlich sogar alle) verfügbaren Optionen aufgelistet sein.
https://www.mairlist.com/download/mAirList/v6.0/scriptinghelp/

Ich bin leider ein absoluter noob, was scripting angeht.

Dafür ist die Funktion OnCartwallPlayerStateChange in den Hintergrund-Scripts geeignet.

// Called when the state of a player on the current cartwall page changes
// (or the user switches to another page).
procedure OnCartwallPlayerStateChange(PlayerIndex: integer;
  OldState: TPlayerState; NewState: TPlayerState;
  Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem;
  OnAirMode: TCartwallOnAirMode);
begin
end;

Da kann man jetzt schön auf jeden einzelnen Player (PlayerIndex) und Zustand (NewState) reagieren.

Jetzt müsstest du nur mal konkret sagen, welcher IOWarrior-Ausgang denn bei welchem Player und welchen Zuständen (nur geladen? auch spielend? …) leuchten soll.

[quote=“Torben, post:5, topic:11368”]Da kann man jetzt schön auf jeden einzelnen Player (PlayerIndex) und Zustand (NewState) reagieren.

Jetzt müsstest du nur mal konkret sagen, welcher IOWarrior-Ausgang denn bei welchem Player und welchen Zuständen (nur geladen? auch spielend? …) leuchten soll.[/quote]
Oh, jetzt wird’s spannend. Da kann ich wieder was lernen. Müsste man ja auch relativ einfach auf z.B. Midi-Out umbauen können.
Für so’n Ovation launch pad oder ähnliches.

Ja, da gibt es sogar irgendwo ein Beispiel hier im Forum (nicht von mir).

Ich glaube, dieses Thema - oder verwandt - wird aktuell auch bei radioforen.de diskutiert.

Damit kann ich doch schon mal in den nächsten Tagen herumexperimentieren. Sehr schön! Die Zustands-Anzeige war das was ich mir vorgestellt hatte. Die entsprechende Taste auf dem Pult darf auch gern blinken wenn der Player aktiv ist. Das wäre dann aber Schritt 2 :wink:

Ich benötige nochmal Eure (Deine) Hilfe da ich nicht weiterkomme. Aktueller Stand ist, das mein Relais schaltet - im angefügten Beispiel Port 7 - aber egal welchen Player ich belade (1-10)

Nochmal zu meinem Vorhaben… beleuchtete 10er Cartwall-Fernsteuerung auf dem Pult - entsprechende Taste soll erst leuchten wenn Player beladen ist, blinken wenn der Player OnAir gerade läuft und das Licht soll erlischen wenn der Player geleert wird.

// Called when the state of a player on the current cartwall page changes
// (or the user switches to another page).
procedure OnCartwallPlayerStateChange(PlayerIndex: integer;
OldState: TPlayerState; NewState: TPlayerState;
Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem;
OnAirMode: TCartwallOnAirMode);
begin
IOWarriorRemote(0).SetPort(7, true);
end;

  1. Sache… das Script soll so verändert werden das man damit einen bestimmten Player anspricht (ich weiß nicht wie man dies schreibt. Meine Versuche es auf Player 1 zu beziehen scheitern (Schreibweisen wie PlayerIndex1 - PlayerIndex = 1 usw) führen zu Fehlermeldungen.
  2. Wie schreibt man den Befehl des Status? Meine Versuche NewState Loaded, :Loaded usw führen ebenfalls zu Fehlern)
  3. Ich benötige noch die Fortführung (zurücksetzen des Warriors sobald der Player geleert wird - Empty)

Alle meine Versuche mit dem von mir geschriebenen Script scheiterten… Ich poste es trotzdem mal, vielleicht findet jemand den Fehler. So habe ich es mir zumindest vorgestellt…

if (PlayerIndex= 1) and (NewState= psLoaded) then begin
IOWarriorRemote(0).SetPort(7, true);
end;
if (PlayerIndex= 1) and (NewState= psEmpty) then begin
IOWarriorRemote(0).SetPort(7, false);
end;
if (PlayerIndex= 1) and (NewState= psPlaying) then begin
PortFlashing[7] := true;
end;

Ich bedanke mich für Eure Hilfe!

Scheint ja ein komplizierteres Problem zu sein :smiley: Keiner traut sich. Außer der Peter (Lord Femto) Dafür vielen Dank!

Der aktuelle Stand ist der, das das Script umgeschrieben wurde, es aber funktioniert egal welchen Player man belädt. Idee ist, Player 1 wird beladen, die Beleuchtung von Taster 1 auf dem Pult geht an, usw bis Player 10. Welche Variable muss man ändern, damit sich das folgende Script nur auf Player 1 bezieht und beim beladen von Player 2 - 10 keine Aktion zeigt? Das kommt ja dann später :wink:

Port 15 ist mein aktueller freier Testport des im Pult verbauten IO Warrior.

procedure OnCartwallPlayerStateChange (PlayerIndex: integer; OldState: TPlayerState; NewState: TPlayerState;
Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem; OnAirMode: TCartwallOnAirMode);

var
row: integer;

begin

SystemLog(‘OnCartwallPlayerStateChange’);

row:= PlayerIndex - 1;

if (NewState = psLoaded) then
begin
IOWarriorRemote(0).SetPort(15, true);
end

else if (NewState = psEmpty) then
begin
IOWarriorRemote(0).SetPort(15, false);
end

else if (NewState = psLoading) then
begin
IOWarriorRemote(0).SetPort(15, true);
end;

end;

[quote=“Torben, post:5, topic:11368”]Dafür ist die Funktion OnCartwallPlayerStateChange in den Hintergrund-Scripts geeignet.

// Called when the state of a player on the current cartwall page changes
// (or the user switches to another page).
procedure OnCartwallPlayerStateChange(PlayerIndex: integer;
  OldState: TPlayerState; NewState: TPlayerState;
  Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem;
  OnAirMode: TCartwallOnAirMode);
begin
end;

Da kann man jetzt schön auf jeden einzelnen Player (PlayerIndex) und Zustand (NewState) reagieren.

Jetzt müsstest du nur mal konkret sagen, welcher IOWarrior-Ausgang denn bei welchem Player und welchen Zuständen (nur geladen? auch spielend? …) leuchten soll.[/quote]

Projekt ist fertig, das Pult umgebaut. Nun fehlt mir nur noch das Script damit die Tasten der Cartwall auch leuchten sobald ein Player geladen ist / geladen wird. Sobald er läuft, wäre es toll wenn die Taste blinkt.
Was du noch wissen wolltest Torben… die Bezeichnung … IOWarriorRemote(2) - Port 0 für Cartwalltaste 1 - dementsprechend Port 9 für Player 10.

Wer kann mir da bei dem Script helfen?

Das Script ist fertig, die Tasten der geladenen Player leuchten, sobald ein Player der Cartwall läuft blinkt die entsprechende Taste. Wird der Player geleert, erlischt das Licht.

Danke für die großartige Arbeit lieber Peter, alias Lord Femto! Ganz großes Kino…

Würdest Du Dein finales Script hier noch mal teilen?
Ich denke, das könnte dem einen oder anderen helfen.

Aber gerne doch! :wink:


IOWarriorCartwallbeleuchtung.mls (1.44 KB)

@Malte

Es ist an dein Script angelehnt. Da ich jedoch nicht der Programmierprofi bin, ist es bestimmt nicht gut programmiert. Falls du Verbesserungsvorschläge hast, nur zu.

[quote=“Lord_Femto, post:16, topic:11368”]@Malte

Es ist an dein Script angelehnt. Da ich jedoch nicht der Programmierprofi bin, ist es bestimmt nicht gut programmiert. Falls du Verbesserungsvorschläge hast, nur zu.[/quote]
Ich wüsste nicht welches Script ich da beigetragen habe, ich kann das nämlich auch nicht 8)

Greetz
Malte