Hilfe bei Makros

Ansicht von 42 Antwort-Themen
  • Autor
    Beiträge
    • #218500
      ZeroG981
      Teilnehmer

      Hallo zusammen!
      Ich versuche gerade in die Makros einzusteigen. 2-3 Makros hab ich auch schon hinbekommen. Aber jetzt brauche ich Hilfe für 2 komplexere Funktionen.
      Leider kann ich C+ leider so gar nicht und ich hab keine Ahnung, was man beachten muß.

      1. ich möchte gerne einen V-master per Midi-Button “flashen”. D.h. wenn ich den Midi Button drücke, soll der V-Master auf 100% springen, und beim loslassen auf den zuvor gesetzten Wert.
      Das müsste ja irgendwie so gehen:
      Makro 1:
      VersatileMasterGetValue(x)
      den Wert als globale Variable speichern
      VersatileMasterSetValue(x,100)
      Makro 2:
      VersatileMasterSetValue auf die zuvor gespeicherte globale Variable.

      Das andere Themal:

      2. ich habe ein handvoll Cuelisten in einer MuteEx Gruppe. Ich möchte per Midi-Button diese Gruppe stoppen und beim erneuten Drücken des Midi-Buttons die letzte Cueliste an der selben stelle wieder starten (eine Funktion wie bei GrandMA: “Restart with actual Cue” beim Toggeln gibts ja nicht, oder?)
      Ich hab schon hinbekommen, die laufende Cueliste einer MuteEx Gruppe zum nächsten Cue weiterzuschalten. Aber wie löse ich das andere Problem?
      Das müsste in etwa so funktionieren:

      CuelistMutexGetStatus(x)
      Die soeben ermittltelte: Cuelist GetCuelistCurrent
      Beide Werte wieder als globale Variable speichern.
      später
      CuelistGotoCue zu den zuvor gespeicherten Variablen.

      Mir ist aber nicht klar, wie ich das am schlauesten löse, dass der Midi-Button die Cuelist “Toggelt”. Also beim 1. drücken stoppt und beim 2. drücken an der selben stelle wieder startet. Man könnte 2 Macros in 2 Cues einer QL schreiben, aber da gibts bestimmt eine elegantere Lösung.
      Was total toll wäre, wenn mir jemand ein fertiges Makro basteln könnte.
      Mit schen wie “DeleteCue(int [in] cuelistID,int [in] cueID);” kann ich noch zu wenig anfangen. (‘:cry:’)
      Das würde mir sicherlich auch helfen, die ganze Makrogeschichte zu verstehen.
      Ich sach schonmal Danke und Grüße! (‘:lol:’)

    • #222422
      bkruse
      Teilnehmer

      Hallo,

      DeleteCue(int [in] cuelistID,int [in] cueID);

      DeleteCue ist der Name der Funktion. In den runden Klammern stehen dann die Parameter (auch Argumente genannt), die man der Funktion mitgeben muss. Die Parameter sind durch Kommata getrennt. Pro Parameter gibt es drei Angaben, nehmen wir einen Teil der obigen Zeile:

      int [in] cuelistID

      1. int oder string (für Zahl oder Zeichenkette)
      2. [in] oder [in/out] ignorieren wir fürs erste, ist eh meistens [in] : )
      3. ein beschreibender Name für diesen Parameter

      Zeichenketten müssen immer mit double quotes, also mit ” umgeben sein.

      Obige Syntaxbeschreibung könnte zu folgender gülter Codezeile werden:

      DeleteCue(1, 4);

      Was dann die cue mit Id 4 aus der cueliste mit Id 1 löschen würde. (Die 5te cue der cueliste 2.)

      Man kann auch Funktionen verschachteln, z.B. könnte das so aussehen:

      DeleteCue(QL(2), Q(5));

      Zu den Makros suche ich mal nach einem Beispiel, das kann ich später posten.

      Als Startpunkt:
      // globale Variable definieren
      if (undefined(_vm))
      int _vm = 0;

      // der Variablen einen VMaster Wert zuweisen
      _vm = VersatileMasterGetValue(1);

      Jetzt gibt es mehrere Wege das zu Triggern, ich glaub ich würde für deinen Fall über Trigger > Midi Note On > Call Macro > Makro 1 (bzw. Midi Note Off > Call Macro > Makro 2) gehen.
      Einfach in beiden Makros die Variable definieren.

      hoffe das hilft,
      Björn

    • #222423
      bkruse
      Teilnehmer

      Hello again,

      habe mir noch mal Gedanken gemacht.
      Dieses “ToggleMutex” Makro sollte dir die Mutex Group 1 toggeln.

      // ToggleMutex script comment

      if (undefined(_cuelist))
      int _cuelist=0;
      if (undefined(_cue))
      int _cue=0;
      if (undefined(_toggleMutex))
      int _toggleMutex=0;

      if (_toggleMutex == 1)
      {
      _toggleMutex = 0;
      CuelistGotoCue(_cuelist, _cue, 0);
      }
      else
      {
      _toggleMutex = 1;
      _cuelist = CuelistMutexGetStatus(1);
      _cue = CueGetCurrent(_cuelist);
      CuelistMutexRelease(1);
      }

      Dazu noch eine Trigger Rule definieren:
      – MidiNoteOn, CH#?, Note? > Call Macro ToggleMutex

      Grüße, Björn

    • #222424
      bkruse
      Teilnehmer

      Das mit dem Midi sollte analog klappen:

      // MidiToVMaster script comment
      if (undefined(_vm))
      int _vm = 0;
      if (undefined(_toggleVmFlash))
      int _toggleVmFlash=0;

      if (_toggleVmFlash == 1)
      {
      _toggleVmFlash = 0;
      VersatileMasterSetValue(1, _vm);
      }
      else
      {
      _toggleVmFlash = 1;
      _vm = VersatileMasterGetValue(1);
      VersatileMasterSetValue(1, 4096);
      }

      Als Trigger Rule entsprechend eine andere MidiNote nehmen und den Namen des Makros anpassen.

      hoffe das hilft,
      Björn

    • #222426
      ZeroG981
      Teilnehmer

      Danke für die Hilfe.
      Ich hab nochmal ein paar Stunden gebastelt.
      Das mit dem V-Master “flashen” hab ich selber hinbekommen. Bei mir sinds allerdings 2 Makros: eines für “Flash”

      // VM 1 Flash script comment
      // globale Variable definieren
      if (undefined(_vm1))
      int _vm1 = 1;
      // der Variablen einen VMaster Wert zuweisen
      _vm1 = VersatileMasterGetValue(1);
      int printf (_vm1)
      // VMaster auf 100%
      VersatileMasterSetValue(1,4096);

      und eines für “Reset”:

      // VM1 Reset script comment
      VersatileMasterSetValue(1,_vm1);

      Beide Makros dann mit einem Midi-Trigger verknüpft. Das läuft, wenns auch nicht so schön ist mit den 2 Makros und entsprechend 2 Triggern. Das geht sicherlich eleganter.
      Was Du zuletzt geschickt hast, schaut eher nach einem Toggle aus, wenn ich das e:script richtig lese, oder?

    • #222427
      ZeroG981
      Teilnehmer

      Und auch Danke für das “Toggle Mutex” Makro. Mit Deinem Funktionierts. 😀
      Meine Lösung sah wieder 2 Makros vor, und zu Ende gedacht wars auch noch nicht.
      Aber vielleicht kann mir jemand helfen, was bei folgendem script falsch ist:

      // Cuelist Mutex11 Toggle script comment
      // x ist die aktive QL der Mutex Group 11 da
      // globale Variable erstellen und als aktuelle QL der Mutex 11 festlegen:
      if (undefined(_x))
      int (_x) = CuelistMutexGetStatus(11)
      // q ist der aktuelle Cue der entsprechend QL
      // globale Variable erstellen und als akt. Q der laufenden QL festlegen:
      if (undefined(_q))
      int (_q) = CuelistGetCurrent(_x)
      CuelistMutexRelease(_x);

      Der 2. Teil soll dann in etwa so aussehen:
      // Cuelist Mutex11 Restart script comment
      CuelistGotoCue(_x,_y);

      Ich bekomme immer bei der letzten Zeile eine Fehlermeldung “expression expected” :bang:
      Was mach ich denn falsch?

      Danke und schöne Grüße

    • #222429
      bkruse
      Teilnehmer

      Hallo,

      die Zeile nach dem if wird NUR dann ausgeführt, wenn _x noch nicht existiert. Also wird nur nach dem Show laden oder nach einem Reset All die cueliste in _x gespeichert.

      Vermutlich besser geeignet (alles was in {…} steht gehört zum if:
      if (undefined(_x))
      {
      int _x = 0
      }

      _x = CuelistMutexGetStatus(11)
      Das Gleiche gilt übrigens für dein _q.

      Üblicherweise deklariert/definiert man alle Variablen die man benötigt ganz oben in einem Makro. So hat man besseren Überblick.

      _y ist dem e:script interpreter noch nicht bekannt. Du wolltest sicher _q versuchen ; )

      Achja, noch der wichtigste Tipp fürs Arbeiten im Macro Editor – falls noch nicht bekannt:
      Tippe ein paar Zeichen in eine neue Zeile, z.B. “CuelistG”. Drücke dann Ctrl+Space

      hoffe das hilft,
      Björn

    • #222430
      ZeroG981
      Teilnehmer

      Hallo!
      Das man die globalen Variablen erst nach Abrfrage, ob sie bereist existieren, definieren darf, ist mir klar. Den Syntax verstehe ich soweit.
      Was Du machst, ist ja, dass Du die Variable defnierst und auf 0 setzt. Im nächsten Schritt wird sie dann auf den abgefragten “CuelistMutexGetStatus” Wert gesetzt. Ich hab die Variable gleich auf den abgefragten Wert gesetzt- das klappt auch. Gibts einen Grund, weshalb man die Variable zuerst auf 0 setzen sollte?

      Mein eigentliches Problem ist aber die Zeile:
      (_x) = CuelistMutexGetStatus(11)

      Hier bekomme ich immer die Fehlermeldung “Expression expected”. Die Variable hab ich zuvor definiert.
      Mir ist nicht klar, wie und warum ich Klammern brauche. Und was hats mit dem “int” oder dem [in] auf sich? Ist das mein Problem?
      Genauso funktioniert “Printf” bei mir nicht. Wenn ich beispielsweise den abgefragten “CueliestMutexGetStatus” Wert_x sehen möchte (schreibt er ja dann ins Logbook). Was genau muß ich dann schreiben? Klammern? Anführungszeichen?

      Danke
      Reinhard

    • #222431
      ZeroG981
      Teilnehmer

      Ach ja, noch was:
      Ich kann Makros nur über die Triggerlist per Midi auslösen?
      Oder gibts eine Möglichkeit ein Makro direkt bei einem bestimmten Midi Wert auszulösen? Vermutlich nicht, da ja in dem Fall permanent die Midiwerte abgefragt werden müssten.

      Hintergrund ist natürlich, dass ich in einem Club nur den Kleinen Dongel habe.
      Kann ich den den eigentlich mit Trigger List upgraden? Ich weiß z.B., dass man Artnet nur beim Enterprise upgraden kann.
      (Ok- in meinem Fall ists noch der alte Dongel, den man ja gar nicht upgraden kann. Aber bei den neueren- wäre es da theoretisch möglich? Oder könnte man den alten Dongel u.U. gegen einen neueren Tauschen?)

      Danke!

    • #222439
      bkruse
      Teilnehmer

      Hallo,

      Midi Note > Makro geht nur mit dem Feature “Automation” bzw. “Trigger”.
      Bzgl. Elements Dongle gegen Premium Dongle tauschen, ruf einfach mal im Kölner Office an 😉
      (Premium und Enterprise sind von den Features her gleich und für beide können Credit upgrades gekauft werden. Lediglich der Enterprise Dongle hat mehr Credits von Anfang an.)

      (_x) = CuelistMutexGetStatus(11)
      ist falsch, nimm einfach
      _x = CuelistMutexGetStatus(11);

      Runde Klammern stehen immer hinter Funktionen (wie CueilstGotoCue(…) z.B.) oder bei Bedingungen (wie if(…) oder while(…)).

      Dein Makro wird ja öfters mal ausgeführt (jedes mal wenn ein Midi Note event rein kommt).
      Beispiel: die 2te QL der Mutex Gruppe 11 läuft grad.

      1. Aufruf des Makros:
      if (undefined(_x)) // ist wahr, die nächste Zeile wird also ausgeführt
      int _x=CuelistMutexGetStatus(11); // _x hat jetzt den Wert 1

      Jeder nächste Aufruf des Makros:
      if (undefined(_x)) // ist falsch, die nächste Zeile wird also NICHT ausgeführt
      int _x=CuelistMutexGetStatus(11);
      // _x hat (immer noch) den Wert 1

      Jetzt starte ich mal die 1te QL der Mutex Gruppe 11.
      Der nächste Aufruf des Makros:
      if (undefined(_x)) // ist falsch, die nächste Zeile wird also NICHT ausgeführt
      int _x=CuelistMutexGetStatus(11);
      // _x hat immer noch den Wert 1 -> Konflikt bzw. nicht gewollt!

      Mit folgendem Makro würde die letzte Situation anders ausgehen:
      if (undefined(_x)) // ist falsch, die nächste Zeile wird also NICHT ausgeführt
      int _x=0;
      x=CuelistMutexGetStatus(11); // Diese Zeile wird immer ausgeführt, auch jetzt. _x bekommt also den Wert 0

      printf Beispiel:
      printf(“_x ist %dn”, _x);
      Der erste Teil ist die Zeichenfolge die ausgegeben wird. %d ist dabei ein Platzhalter für eine Variable vom Typ int. Sie wird beim Ausführen durch den aktuellen Wert ersetzt, den die Variable dann hat. n für neue Zeile.

      int bezeichnet eine Variable, die Zahlen aufnehmen kann.
      string dagegen bezeichnet eine Variable, die eine Zeichenkette aufnehmen kann.

      Ich hoffe das klärt einige Fragen!
      Grüße, Björn

    • #222441
      ZeroG981
      Teilnehmer

      Ok, again what learned 🙂
      Vielen Dank.

      Die mutual exclude Groups sind nicht 0-basierend, richtig?

      Ich möchte jetzt das Toggle Macro noch etwas erweitern. Das Problem ist nämlich, dass das Macro immer abwechselnd ein und ausschaltet. D.h. wenn ich per Makro die Mutex gestoppt habe, ich dann im ActionPad eine QL dieser Gruppe starte, dann bekommt das Macro davon nix mit und startet stumpf die zuletzt gespeicherte QL.
      Das Makro muß also immer erstmal checken, ob ein QL der Mutex läuft. Dank printf weiß ich nun auch, welche Werte der Befehl GetMutexStatus ausgibt: wenn nix läuft -1

      Jetzt zu meiner ganz kurzen Frage:
      Wie lauten die Befehle für
      _x größer 1
      _x kleiner 1
      _x ungleich 1

      Grüße
      Reinhard

    • #222442
      ZeroG981
      Teilnehmer

      So, nachdems gestern gar nicht geklappt hat, läufts heut besser: Mein Makro funktioniert jetzt so, wies soll 🙂
      Wobei die Funktion “CuelistGetCurrent” einfach immer einen Fehler ausspuckt, CueGetCurrent jedoch funktioniert. Sollten eigentlich beide funktionieren, oder?
      Hier meine Lösung:

      // Mutex 11 Toggle
      if (undefined (_qlx11))
      int _qlx11=54;
      if (undefined (_qlx11q))
      int _qlx11q=0;
      if (undefined (_togx11))
      int _togx11=-1;

      _togx11 = GetMutexStatus(11)
      printf(“_togx11 ist %dn”, _togx11);

      if (_togx11>-1)
      {_togx11 = -1
      _qlx11=GetMutexStatus(11);
      printf(“Cuelist %d n”, _qlx11);
      _qlx11q = CueGetCurrent(_qlx11);
      printf(“Cuelist %d n”, _qlx11q);
      CuelistMutexRelease(11);
      }
      else
      {
      CuelistGotoCue(_qlx11,_qlx11q,0)
      }

      Zur Erklärung:
      qlx11 ist die QL der Mutex11
      qlx11q ist der laufende Q der QL.
      togx11 ist die Togglefunktion der QL.

    • #222443
      bkruse
      Teilnehmer

      Na das sieht doch gut aus.

      Die mutex groups sind 1-basiert, ja.
      Sie geben aber die ID der cueliste zurück, die ist 0-basiert.

      CuelistGetCurrent() liefert dir die id der aktuell selektierten Cueliste. Das ist die, die im Programmer unten in der Cuelist View selektiert (heller hinterlegt) ist. Das hat nichts mit der gerade spielenden Cueliste zu tun (was ja eh mehrere sein könnten).

      CueGetCurrent() liefert dir zu einer gegebenen cueliste, welche cue davon läuft (0-basiert). Oder -1 falls gar keine cue dieser cueliste läuft.

      Viele Grüße,
      Björn

    • #222460
      ZeroG981
      Teilnehmer

      Ich bin immer mal wieder am Basteln und Ausprobieren- so langsam wird´s…

      Aber eine neue Frage tut sich auf:
      Mit welchem Script kann ich denn einem ActionPad Button einen Cue einer Cuelist zuweisen? Gibts da eine Möglichkeit? Ich hab bisher nix gefunden 🙁

      Danke und Grüße

    • #222461
      bkruse
      Teilnehmer

      Hallo,

      per e:script kannst du “nur” die Sichtbarkeit, Active-State, Enabled-State, Farbe, Text und Bild eines Buttons ändern, nicht aber die Actions dahinter.
      Ruf doch auf den Button ein Makro auf, in diesem Macro entscheidest du dann, welche Cue gespielt wird?

      Wenn du uns mehr Infos/Kontext gibst, können wir vielleicht bessere Tipps geben?
      Warum/wann soll ein Button eine andere Cue ansteuern als bisher?

      Grüße, Björn

    • #222464
      ZeroG981
      Teilnehmer

      Hmm- Schade.
      Meine Idee ist folgende:
      Ich hab für jede Farbe der Movinglights einen Button. Jetzt möchte ich auf “Halbfarben” umschalten (per Makro oder wie auch immer), sodass jeder Farbbutton eben die auf dem Farbrad folgende Halbfarbe ansteuert.
      Dazu wollte ich ein Makro schreiben, dass den Buttons eben die Cues mit den Halbfarben zuordnet.
      Wie könnte man das sonst noch lösen? Hat jemand eine Idee???

      Vielen Dank schonmal

    • #222465
      bkruse
      Teilnehmer

      Hallo,

      in Kürze:
      – eine globale Variable _halbfarben als switch nutzen (0 oder 1)
      – jeder Button ruft ein macro auf (entweder alle buttons das gleiche oder jeder button seins, Geschmackssache)
      – im macro etwa: if (_halbfarben == 0) cue1; else cue2
      – das “auf Halbfarben umschalten” macht man jetzt einfach, in dem man _halbfarben = 1; setzt (bzw. = 0)

      hoffe das hilft,
      Björn

    • #222466
      ZeroG981
      Teilnehmer

      Ok, vielen Dank.
      Ich probier das mal. Ich denk ich krieg das hin.

      Aber klappt das dann auch mit dem “State Control” der Buttons?
      Ich hab ja dann auf den Buttons die Makros.

    • #222467
      bkruse
      Teilnehmer

      Das sollte gehen, ja.
      Zur Not kannst du es ja auch manuell setzen (ActionPadSetItemActiveState(…)).

      Grüße, Björn

    • #222468
      ZeroG981
      Teilnehmer

      Hmm, das geht zwar schon irgendwie, ist aber komplizierter, als ich gedacht habe.
      Jetzt hab ich noch eine andere Idee:
      Kann ich die Priority einer Ql Per Macro umschalten? Wenn ja, mit welchem escript Befehl?
      Dann würde ich einfach eine QL mit den ganzen Farben und eine mit den halben Farben parallel laufen lassen, und über ein macro die Priorität ändern.

      Hab aber bisher leider keinen Befehl gefunden 🙁

      Danke und Grüße

    • #222469
      bkruse
      Teilnehmer

      Hallo,

      das ergibt wenig Sinn. Statt die Priorität zu ändern könntest du auch einfach die andere QL starten bzw. stoppen.
      Du kannst abfragen ob eine QL bereits läuft mit:
      if (CuelistGetHandle(QL(1)) == -1) // cueliste läuft nicht
      oder
      if (CuelistGetHandle(QL(1)) != -1) // cueliste läuft
      Oder du tust beide in die gleiche Mutual Exclude Group, dann brauchst du nur eine starten und die andere stoppt automatisch.

      Die Priorität kann man (noch) nicht per e:script ändern.

      Grüße, Björn

    • #222470
      ZeroG981
      Teilnehmer

      Schade, so gehts also auch nicht. 🙄

      Klar kann ich die 2 unterschiedlichen QL starten und stoppen.
      Aber:
      Ich wil halt unbedingt die selben Buttons auf dem ActionPad nutzen, weil mir sonst der Platz aus geht und es so übersichtlicher ist: Einfach “Halbfarbe” einschalten und gut.
      Aber vielleicht mach ichs dann halt doch mit Macros.

      Danke trotzdem!

    • #222471
      bkruse
      Teilnehmer

      Hallo,

      wie gesagt, auf sinnvolle Weise geht das imho nicht.

      Ein (wenig sinnvoller) Weg ist mir aber noch eingefallen:
      – mit CuelistCopy und CuelistPaste fügst du die gewünschten cuelisten (Bsp. entweder 1-12 oder 13-24) nochmal am Ende (z.B. 25-36) ein
      – mit den Buttons die QLs 25-36 spielen

      Mit wenigen und kleinen Cuelisten mag das sogar gehen…

      Grüße, Björn

    • #222472
      ZeroG981
      Teilnehmer

      Danke für die Hilfe.
      Ich machs dann wohl auf meine Art. Ist halt leider recht um die Ecke gedacht, und bei späteren Änderungen nicht so leicht nachzuvollziehen.
      Ich fänds schon toll, wenn man den ActionPadButtons per eScript die Funktion zuweisen könnte. Wäre das nicht eine Anregung für die Zukunft?

      Grüße
      🙂

    • #222479
      ZeroG981
      Teilnehmer

      Soo, jetzt hab ich mal wieder ein neues Problem:

      Ich stell mir folgendes vor: Auf dem Action Pad hab ich mir einen Colorpicker gebastelt. Jetzt möchte ich von diesem einen Wert speichern. Das hab ich auch soweit schon hinbekommen: Ich frage die Cuelist Submaster ab und setze die Submaster von 3 weitern QL auf die abgefragten Werte. Jetzt möchte ich aber, dass auch der Button auf dem Actionpad die Farbe des abgespeicherten Wertes annimmt.
      Dazu hab ich mir folgendes ausgedacht:

      // ColorPicker record Color
      int Rot
      int Gruen
      int Blau
      int Rotgruenblau = 0
      Rot = VersatileMasterGetValue(50);
      Gruen = VersatileMasterGetValue(51);
      Blau = VersatileMasterGetValue(52);

      CuelistSubMasterSetValue(63,Rot)
      CuelistSubMasterSetValue(64,Gruen)
      CuelistSubMasterSetValue(65,Blau)
      Rot = Rot / 17 * 1000000
      Gruen = Gruen / 17 * 1000
      Blau = Blau / 17

      RotGruenBlau = (Rot) + (Gruen) + (Blau)
      printf(“RotGruenBlau ist %dn”, RotGruenBlau)
      printf(“Rot ist %dn”, Rot);
      printf(“Grün ist %dn”, Gruen);
      printf(“Blau ist %dn”, Blau);
      ActionPadSetItemBackgroundColors(20,RotGruenBlau,RotGruenBlau);

      Das Problem: Wie bekomme ich einen 9-stelligen Wert für RotGruenBlau? Wenn Rot bei 0 steht, wirds nur eine 6stellige Zahl- dann funktioniert das nicht.

      🙄

      Vielen Dank schonmal vorab 😉

    • #222480
      Steven
      Teilnehmer

      Hallo,

      der Befehl ActionPadGetColorPickerColor() liefert direkt den aktuellen RGB-Wert des angegeben Color Pickers zurück.
      dieser Wert kann dann direkt weiter an den Aufruf von ActionPadSetItemBackgroundColors() gegeben werden.

      Etwa so:

      int color;
      ActionPadGetColorPickerColor(ActionPadGetItemMemberCode(“1”, color);
      ActionPadSetItemBackgroundColors(ActionPadGetItemMemberCode(“20”),color,color);

      Grüße
      Steven

    • #222481
      ZeroG981
      Teilnehmer

      Ach ja, bei der Gelegenheit glich noch eine Frage:
      Ich nutze ja in meinem Script 3 weiter QL, um dort die abgefragten Werte zu übertragen. Gäbe es auch eine Möglichkeit, das mit einer QL zu lösen? Z.B. dass man die abgefragten Werte direkt auf die Farben Rot, Grün und Blau einer ausgewählten Lampengruppe überträgt und diese dann direkt in eine Ql speichert?

      😆

    • #222482
      ZeroG981
      Teilnehmer

      Ah super. hab Deine Befehlszeile kopiert und funktioniert soweit.

      Allerdings muß ich sagen, verstehe ich das Script nicht:

      int color;
      ActionPadGetColorPickerColor(ActionPadGetItemMemberCode(“1”, color);

      Zum einen: was macht die Funktion ActionPadGetItemMemberCode ?

      Bei mir schauts letztendlich so aus:

      int color
      ActionPadGetColorPickerColor(20,color)

      Was bedeutet der 2. Parameter, also “color” in dem Befehl? Es gibt doch nur die eine Farbe, oder?
      Und was hats mit der Schreibweise auf sich? In der 1. Zeile wird die Variable “color” definiert. In der 2. Zeile taucht die Variable als Parameter auf???
      Ich glaub ich steh da etwas auf dem Schlauch :o’

    • #222483
      Steven
      Teilnehmer

      Also:
      die Funktion ActionPadGetColorPickerColor ist wie folgt definiert:

      int ActionPadGetColorPickerColor(int [in] memberCode,int [in/out] selectedColor);

      Der 2. Parameter für die Farbe ist hier ein IN/OUT Parameter, sprich dieser wird beim zurückkehren dieser Funktion mit einem neuen Wert beschrieben(Call by reference).
      Das heißt, das zuerst die Variable “color” definiert wird und dann beim Aufruf der Funktion mit dem eigentlichen RGB-Wert gefüllt wird. Der eigentliche Rückgabewert der Funktion ist hier nämlich nicht die Farbe selber sondern 1 oder 0(True oder False).

      Die Funktion ActionPadGetItemMemberCode() wandelt eigentlich nur eine ScriptID(welche ein String sein könnte in einen “Actionpad member ID” um, welche an die anderen ActionPad-Script Befehle übergeben wird.

      Man kann diesen Aufruf aber auch weg lassen wenn die Script-ID sowieso eine Zahl ist, dann passiert diese Umwandlung intern beim Aufruf eines ActionPad-Script-Befehls automatisch.

      Grüße
      Steven

    • #222484
      ZeroG981
      Teilnehmer

      Ok, vielen Dank für die Info.

      Noch eine Frage:
      bei ActionPadSetItemBackgroundColors- welche Werte muß ich denn da eingeben?

      Ich dachte zuerst, es wäre RGB, je 0-255.
      Aber das stimmt wohl nicht.
      HSL ist es anscheinend auch nicht.

      Aber was muß man denn dann einsetzen?

      Danke!

    • #222485
      Steven
      Teilnehmer

      Hi,

      dieser Farbwert ist genaugenommen RGB, allerdings sind alle 3 Teile in ein 32-bit integer codiert.
      Intern passiert folgendes (könnte man auch genauso hinschreiben):


      int rot = 255;
      int gruen= 0;
      int blau=0;

      int color = rot | (gruen << 8 ) | (blau << 16); [/TS] Hierfür gibt es allerdings einige Hilfsbefehle (siehe escript reference unter der Rubrik Classes/Colors). Der Befehl RGB() macht genau das oben beschriebene und das gleiche Beispiel sähe dann so aus: [TS] int rot = 255; int gruen= 0; int blau=0; int color = RGB(rot, gruen, blau); [/TS] Genauso gibt es Befehle um aus dem Farb-Wert wieder die einzelnen RGB-Werte zu extrahieren: [TS] int color = RGB(255,128,64); printf("Rot=%dn", Red8(color)); printf("Grün=%dn", Green8(color)); printf("Blau=%dn", Blue8(color)); [/TS] Als Ausgabe würde dann im Logbuch stehen: Rot=255 Grün=128 Blau=64

    • #222587
      ZeroG981
      Teilnehmer

      Hallo!
      ich brauch mal wieder eine kleine Hilfestellung.
      Will den Medienserver per WakeOnLan starten.
      Dazu brauche ich ein Macro mit dem Befehl “SendWakeOnLan.
      Welche Mac-Adresse muss ich denn da eingeben? Ist das die von der Netzwerkkarte?
      Und wie sieht die Befehlszeile genau aus? Einfach nur SendWakeOnLan (Mac-Adresse) ?
      Wenn ich 2 Netzwerkkarten in meinem Rechner habe (1x für Internet und 1x eNet/ Hausnetzwerk/ Internet)- muss ich da was beachten?

      Danke und Grüße
      Reinhard

    • #222589
      bkruse
      Teilnehmer

      Hallo,

      ich habe eine (zugegeben ältere) Beschreibung gefunden, aber da spare ich mir eine Menge Tipparbeit ; )

      Die Kernpunkte sind:
      Die MAC Adresse der Netzwerkkarte des Rechners, der geweckt werden soll ist anzugeben.
      Die Ziel-Rechner müssen WakeOnLAN im Bios aktiviert haben.

      Grüße, Björn

    • #222590
      ZeroG981
      Teilnehmer

      Danke- werd ich demnächst mal testen.

      Das mit dem “Wake on Lan” im Bios aktivieren ist auch ein guter hinweis 🙂

      Grüßeee

    • #222658
      ZeroG981
      Teilnehmer

      Hallo!
      Ich hätte mal wieder was:
      Es gibt ja den Befehl “CueGetProperty”.
      Mich interessiert in dem Fall die Priorität der Cuelist.
      Wie muss denn genau das script lauten, damit ich im Logbuch die Priorität einer QL angezeigt bekomme?

      Und kann ich auch die Priorität einer QL per macro ändern? Ich hatte das vor gut nem Jahr schonmal gefragt, da hieß es, glaube ich, das ist in Arbeit. Bin mir aber nicht sicher.
      Eigentlich müsste das mit dem Befehl “CuelistSetProperty” funktioniern, allerdings ist die Beschreibung hierzu sehr dürftig. Gelten hier die selben Angaben wie bei “…Get…”?

      Danke und Grüße

    • #222666
      bkruse
      Teilnehmer

      Hallo,

      in der e:script reference steht bei CuelistSetProperty
      “For details about properties please refer to ‘CuelistGetProperty'” 😉

      Possible values for Priority
      1 Very Low
      2 Low
      3 Normal
      4 High
      5 Very High

      Ausgeben der Prio:
      int cuelist = 1;
      int prio = CuelistGetProperty(QL(cuelist), “Priority”);
      printf(“Priority of cuelist %d is %dn”, cuelist, prio);

      Setzen der Prio mit
      CuelistSetProperty(QL(cuelist), “Priority”, 2);

      Evtl auch hilfreich ist dieser Blog Eintrag: Cuelist Property editing

      Viele Grüße,
      Björn

    • #222846
      ZeroG981
      Teilnehmer

      Hallo mal wieder.
      Ich hab grad mal wieder ein Problemchen:
      Was muss ich denn beachten, wenn ich eine doppelt “IF” Abfrage machen will?

      In meinem Fall (etwas vereinfacht) habe ich 2 Parameter (A und B), die entweder 0 oder 1 annehmen könne.
      Wenn Parameter A = 1 und B = 0 soll meinetwegen Cuelist 1 gestartet werden,
      Wenn Parameter A = 0 und B = 1 soll meinetwegen Cuelist 2 gestartet werden,
      Und wenn Prameter A = 1 und B = 1 soll meinetwegen Macro Z ausgeführt werden.

      Das müsste man doch einfach ineindander verschachteln können.
      if (_ParA == 1)
      {
      if (ParB == 1)
      {
      CuelistStart (0)
      }
      .
      .
      .
      Das funktioniert aber irgendwie nicht recht. Gibts da einen anderen Ansatz?

      Danke und Grüße
      Reinhard

    • #222847
      SaschaLindemann
      Teilnehmer

      Hallo Reinhard,

      schau mal hier (die Variablendefinitionen stehen nur zum Testen drin):


      int a = 1;
      int b = 1;

      if( a == 1 && b == 0) {
      printf(“nStart Cuelist 1”);
      // Start Cuelist 1
      } else {
      if(a == 0 && b == 1) {
      printf(“nStart Cuelist 2”);
      // Start Cuelist 2
      } else {
      if(a == 1 && b == 1) {
      printf(“nStart Cuelist 3”);
      // Start Cuelist 3
      } else {
      printf(“nKeine der Optionen”);
      // Do whatever
      }
      }
      }

    • #222848
      ZeroG981
      Teilnehmer

      Ahh, sehr schön.
      Hatte mir schon gedacht, dass es da eine einfachere Lösung gibt als meine Verschachtelung. Ist auch erheblich übersichtlicher 🙂

      Ich probier das die Tage mal.

      Vielen Dank!

    • #222849
      ZeroG981
      Teilnehmer

      Nochmal eine Frage zu meinem vorangegangenen Problem:
      Ist es auch möglich, Midiwerte abzufragen? Wahrscheinlich nicht, da Midi wohl nur ein Trigger auslöst, oder?

      In meinem Fall würde ich dann nicht die Paramerter abfragen, sondern den Status eines Midibefehls, also Note oder CC.
      Sprich ein Macro fragt ab, ob eine MIditastet gedrückt ist und startet in diesem Fall Cuelist 1, wenn die Miditastet nicht gedrückt ist, soll die Cuelist 2 starten.

      Wenn das nicht geht, muss ich das halt anders lösen.

      Danke und Grüße

    • #222850
      bkruse
      Teilnehmer

      Hallo Reinhard,

      die Miditaste gedrückt entspricht doch NoteOn und “nicht gedrückt” entspricht NoteOff.

      Du könntest also einfach bei NoteOn eine variable _tasteX auf 1 setzen und bei NoteOff diese auf 0 setzen.

      Dann an gewünschter Stelle einfach abfragen, ob _tasteX == 1 -> QL 1 play bzw. _tasteX == 0 -> QL 2 play.

      Oder ohne Makros:
      Trigger NoteOn auf Action Trigger Activation // so kann man gewünschte Trigger aktivieren bzw. unerwünschte deaktivieren. Über Action Label -> Trigger Label sogar mehrere.

      Und generell kann man über die Midi Trigger natürlich auch ein “Call Macro” auslösen. Hierbei werden sogar die Note und Velocity an das Makro übermittelt.

      Siehe Advanced System Manual LAS Kapitel “Reading arguments from Triggers”.

      Hoffe das hilft,
      Björn

    • #222851
      ZeroG981
      Teilnehmer

      Hallo Björn.

      Danke für die Antwort.
      Dass man das über Macros und sonstie lösen kann, war mir klar. Hab auch damit schon angefangen.
      Aber wenn ich in einem Macro einen Midi-Note Status abfragen hätte können, dann hätte ich mir das extra-Macro und den dazugehörigen Triggern erspart. 😉

      Aber jetzt hab ich das halt so gelöst.

      Grüße
      Reinhard

    • #247538
      Richard Nolte
      Teilnehmer

      Hallo in die Runde.
      Ich schreibe mal in dieses Thema, weils hier ganz gut passt.
      Ich versuche gerade, ein AP Buttons per macro farblich zu verändern. Das funktioniert mit dem Befehl “ActionPadSetItemBackgroundcolors” eigentlich auch ganz gut- einziges Problem: Ich weiß nicht, welche Werte ich eingeben muss, damit die gewünschte Farbe bekomme.
      Ich habe auch schon versucht, die Farbwerte zu berechnen, wie es bei den Hilfethemen beschrieben ist, aber das ist mir zu hoch 🙁
      Nun habe ich versucht, mit einem Macro die Farbwerte abzufragen, und ins Logbuch zu schreiben. Aber auch das habe ich nicht hinbekommen.
      Kann mir dazu jemand weiter helfen?
      Danke und Grüße
      Richard

Ansicht von 42 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.