Script Stop/Pause im Zusammenhang mit Lautstärke

Hallo Liebe mAirList Welt!
Mein Name ist Patrick und ich bin seit letzten Freitag auch glücklicher Besitzer einer mAirList-Lizenz.
Nun habe ich am Wochenende gelesen, dass man mit Scripts auch eigene Befehle einfügen kann. Super für mein Vorhaben!
Ich betreibe mAirList mit einem Behringer XTouch Compact. Mit dem Button unter dem jeweiligen Regler für den Player starte ich den Player. Nun möchte ich ein Script schreiben, bei welchem die Laustärke des Players ausgelesen wird. Wenn der Regler unten ist (sprich stumm abgespielt wird), dann soll mit einem weitern Druck auf den Button (des XTouch) der Player gestoppt werden, ist der Regler jedoch auf, dann soll der Player in die Pause gehen.
Ich habe gestern bereits etwas probiert und mich da an diesen Thread gehalten:

Script Zustände erfassen

Ich hab in der Konfiguration beim Befehl des Midi-Controllers (drücken, wenn Player onAir) den selbst erstellten Befehl reingeschrieben:

PLAYER 1-1 AUS

Dann habe ich eine .mls Datei erstellt mit folgendem Code:

procedure OnExecuteCommand(Command: string);
begin
if Command = ‘PLAYER 1-1 AUS’ then begin
ExecuteCommand(‘PLAYER 1-1 STOP’);
end;
end.

Die .mls hab ich in einen Ordner gespeichert und dann als Background Script in der Konfiguration eingefügt.

Ich nehme an, dass ich nach dem ersten if eine weitere if-Abfrage einfügen muss,
ich habe es also mit folgender Herangehensweise probiert:

procedure OnExecuteCommand(Command: string);
begin
if Command = ‘PLAYER 1-1 AUS’ then begin
if (‘PLAYER 1-1 VOLUME 0’) then begin
ExecuteCommand(‘PLAYER 1-1 STOP’);
end
elseif NOT (‘PLAYER 1-1 VOLUME 0’) then begin
ExecuteCommand('PLAYER 1-1 PAUSE);
end;
end;
end.

leider ohne Erfolg.

Falls mAirlist dies kann wäre ich über eine Hilfe von euch sehr Dankbar.
Vielen Dank schon mal im Voraus.
Patrick

Lieber Patrick,

ohne mich bisher näher mit den Inhalten beschäftigt zu haben sehe ich, daß die Struktur Deines Codes nicht stimmt. Sie muß für Hintergrundscripts etwa lauten:

procedure OnIrgendwas;
begin
  // hier ist jetzt entsprechender Code
end;

begin
end.

Achte auf das der Prozedurdeklaration nachfolgende Hauptprogramm, welches in diesem Falle leer ist:

begin
end.

Such mal hier im Forum unter Skripting-Hilfe: Wie schreibe ich Code?

Oberflächliche Grüße

TSD

Das funktioniert so nicht: Nach if muß eine Abfrage kommen, die mit wahr oder falsch beantwortet werden kann. Du hast da einen mAirList-Befehl reingeschrieben. Die Sache wird ein wenig komplizierter, vielleicht werde später mal danach sehen.

Bitte poste Code als solchen markiert, z. B. mit der Schaltfläche </>.

Geordnete Grüße

TSD

Hallo Tondose! Erstmal vielen Dank, dass du dir mein Anliegen ansiehst.
Zum Thema: Ok, das bedeutet also im Umkehrschluss, dass die Idee mit dem Hintergrundscript der falsche Ansatz war, denn es soll ja nur das was im Code geschehen, wenn das Command (in dem Fall das selbst erstellte ‘PLAYER 1-1 AUS’) aktiv ist, also wenn am Behringer der Button gedrückt wurde. Bedeutet ich nehm das in der Konfiguration aus den Hintergrund-Scripts wieder raus. Aber wie weiß mAirList dann das ich dieses Script anspreche. Ich habe das Script jetzt in einen neuen Ordner (Scripts) im ProgrammData von mAirList mal eingefügt.
Danke,
Patrick.

Stop! Langsam mit die junge Pferde!

Ganz und gar nicht.

Andersherum: mAirlist liest die Skripte von selber, sucht gewissermaßen danach. Lies mal meine Artikel übers Skripten, das kommt irgendwo darin vor. (Glaube ich.) Das Problem (?) an der Sache ist, an die entsprechenden Werte zu kommen, die haben sich irgendwo versteckt und müssen mit völlig unintuitiven Mitteln (sorry @Torben, Du bist Informatiker, wir nicht. Kein Vorwurf!) ausgebaggert werden. Vielleicht komme ich ja mal dazu. (Heute jedoch nicht.)
 

Abendliche Grüße

TSD

Probiere es hiermit:

procedure OnExecuteCommand(Command: string);
var
  Level: single;
begin
  if (Command = 'PLAYER 1-1 AUS') then
  begin
    Level := trunc(CurrentPlaybackControl.GetPlayer(0).GetVolume);
    if (Level = -200) then
      ExecuteCommand('PLAYER 1-1 STOP')
    else
      ExecuteCommand('PLAYER 1-1 PAUSE');
  end
  else if (Command = 'PLAYER 1-2 AUS') then
  begin
    Level := trunc(CurrentPlaybackControl.GetPlayer(1).GetVolume);
    if (Level = -200) then
      ExecuteCommand('PLAYER 1-2 STOP')
    else
      ExecuteCommand('PLAYER 1-2 PAUSE');
  end;
end;

begin
end.


Gefundene Grüße

TSD

1 Like

OK Danke schon mal. Leider kann ich es aber erst am späten Freitagnachmittag ausprobieren, bin aktuell im Dienst. Melde mich dann noch einmal. Bis dahin schöne Grüße,
Patrick.

1 Like

Vielen herzlichen Dank für die Hilfe liebe Tondose! Es funktioniert tadellos. :+1:t3:

1 Like