Script für Behringer CMD MM-1

Dann ziehe ich diesen Beitrag mal aus dem allgemeinen Thread heraus, damit der nicht verwässert wird :wink: Dort steht er quasi 1:1 noch einmal, aber ich halte es für sinnvoller, die Diskussion zu diesem speziellen Script in diesem Faden zu führen und das Script im anderen Faden als das zu nehmen, was in der Büberschrift des Fadens steht: als Codebeispiel :slight_smile:

Weiterhin gibt es zu diesem Faden auch ein Geschwisterchen in englischer Sprache.

Hallo, alle,

wie Ihr vielleicht mitbekommen habt, habe ich in den letzten Tagen, seit ich meinen Behringer CMD MM-1 Controller gekauft habe, versucht, ein Script zu schreiben, um diesen Controller in mAirlist besser nutzen zu können. Heute (genauer gesagt: gestern Abend, Anm.d.A. ;-)) habe ich dabei eine erste Stufe erreicht: Das Script läßt sich jetzt in mAirlist als Benachrichtigungsscript einbinden, das beim Start selbsttätig die Playerstatus abfragt und demzufolge die Status der Schalter am Controller richtig setzt. Wer das Script nutzen oder anpassen möchte, tue sich keinen Zwang an. Ich habe das Script auf GitHub veröffentlicht: https://github.com/McCavity/Behringer_CMD_MM-1 - es steht unter Apache 2.0 Lizenz, es darf daher frei benutzt, verändert und weitergegeben werden - ich würde mich nur darüber freuen, wenn man mich als Autor oder Beitragender irgendwo erwähnt, wenn man es ganz oder teilweise weiterveröffentlicht.

Das Script ist an meine mAirlist Umgebung angepaßt und macht daher die folgenden Annahmen: es gibt zwei Playlisten, die erste hat zwei Player (1-1 und 1-2) und die zweite einen Player (2-1). Diese drei Player sind mit den ersten drei Fadern des MM-1 verknüpft: Kanal 1: 1-1, Kanal 2: 1-2, Kanal 3: 2-1. Ich verwende die “CUE” Schalter des MM-1 für START/PAUSE Befehle. Die zwei “Side buttons” (In DJ-Programmen üblicherweise dazu genutzt, den Player der linken oder rechten Seite des Cross Faders (welchen ich in mAirlist nicht nutze) zuzuweisen) oberhalb der “CUE” Schalter (mit den Beschriftungen “1” und “2”) nutze ich für PFL (Schalter 1) und Schalter 2 innerhalb des PFL Modes für End Monitor. Während ein Player läuft schalte ich die LED im CUE Schalter auf “blinkend”, gleiches gilt für den Schalter “2”, der anfängt zu blinken, sobald der zugehörige Player EOF erreicht.

Eines fehlt jedoch noch: Ich nutze ja den MM-1 auch für Voicetracking. Daher nutze ich im VT-Mode eine andere Belegung der Schalter. Dies bekomme ich im Script aber noch nicht mit, momentan funktioniert es nur im Assist- oder Automations-Modus.

@Torben: gibt es da eine Möglichkeit wie “onVoicetrack…” oder ähnlich, mit der ich herausfinden kann, wann mAirlist den Voicetrack Recorder / Editor öffnet, bzw. verläßt? F+r die Automation habe ich “OnAutomationOn” und “OnAutomationOff” gefunden, aber Voicetracking nichts vergleichbares…?

[Ergänzung]
Im anderen Faden antwortete Torben bereits, daß diese Funktionalität bereits in Version 5.1 Realität werden könne
[/Ergänzung]

Als Referenz hier noch mein Teil der remote.ini, der die Zuweisungen für den MM-1 enthält:

[Remote2] Type=MIDI Enabled=on Device=1 Message0=0094307F Action0=NOVT PLAYER 1-1 START/PAUSE;VT PLAYER A START Message1=0094317F Action1=NOVT PLAYER 1-2 START/PAUSE; VT PLAYER B START Message2=0094127F Action2=NOVT PLAYLIST 1 EXTRAPFL ON/OFF; VT RECORD START Message3=0094207F Action3=VT RECORD STOP Message4=0094117F Action4=NOVT CARTWALL NEXT SET; VT SAVE Message5=0094107F Action5=NOVT CARTWALL PREVIOUS SET; VT RECORD CANCEL Message6=00B4B080 Action6=NOVT PLAYER 1-1 VOLUME $DATA2/100; VT PLAYER A VOLUME $DATA2/127 Message7=00B4B180 Action7=NOVT PLAYER 1-2 VOLUME $DATA2/100; VT PLAYER B VOLUME $DATA2/127 Message8=00B4B280 Action8=NOVT PLAYER 2-1 VOLUME $DATA2/100 Message9=0094327F Action9=PLAYER 2-1 START/PAUSE Message10=00B40341 Action10=PLAYLIST 1 CURSOR DOWN Message11=00B4033F Action11=PLAYLIST 1 CURSOR UP Message12=0094037F Action12=PLAYLIST 1 RECYCLE Message13=0094137F Action13=PLAYER 1-1 PFL ON/OFF Message14=0094147F Action14=PFL END MON Message15=0094177F Action15=PLAYER 1-2 PFL ON/OFF Message16=0094187F Action16=PFL END MON Message17=00941B7F Action17=PLAYER 2-1 PFL ON/OFF Message18=00941C7F Action18=PFL END MON

Wenn Ihr irgendwelche Vorschlähe habt, immer her damit - ich hoffe, daß das Script irgendjemandem nützen möge. Aber bevor Ihr auf mich einschlagt, denkt bitte daran: ich habe in den letzten 20 Jahren kein Pascal angefaßt. (Ich denke, die letzte Version, die ich in der Hand hatte, war Turbo Pascal 5.5 für MS-DOS ;-))

Deshalb ein kurzer Disclaimer: Ich stelle das Script so, wie es ist, zur Verfügung, ohne jegliche ausdrückliche oder implizierte Garantie oder eine Aussage über die Nutzbarkeit zu irgendeinem bestimmten Zwecke. Benutzung auf eigene Gefahr, ich übernehme keine Verantwortung für irgendwelche Schäden gleich welcher Art, die durch die Benutzung des Scriptes entstehen könnten.

Eines noch: ein dickes fettes Dankeschön an Torben für seine geduldige Unterstützung, an Thomas “Kloppi” Kloppholz für sein LC-1 Script, welches mich auf die Idee zu meinem eigenen Script brachte und mir als Ausgangspunkt diente (ich habe mir einigen Code von dort kopiert und ihn daher im Dateikopf erwähnt) und ebenso ein riesieges Dankeschön an alle anderen, die mit ihren Beiträgen hier im Forum mir halfen, eine ganze Reihe von Problemen, auf die ich während der Programmierung stieß, zu lösen, ohne extra nochmal nachfragen zu müssen :slight_smile:

LG,

McCavity

P.S.: Ich habe noch ein seltsames Verhalten, das möglicherweise mit dem Script / Controller zusammenhängt: dann und wann hängt ein gerade abgespielter track für eine Weile in einer sehr kurzen (<1 Sek.) Schleife, bis er dann nach einigen Sekunden weitermacht… ich untersuche das noch, Fakt ist aber, daß im Systemlog nichts auffälliges erscheint… Ich melde mich da nochmal, wenn ich einen Weg gefunden habe, das Problem zuverlässig nachzustellen.

Ich mache hier mal mit der Weiterentwicklung weiter… :slight_smile:

@Torben: einige kurze Fragen:

  • ich habe gesehen, daß in der 5.1er die neuen VT Funktionen in die API integriert wurden, dafür erstmal vielen Dank, die werde ich bei nächster Gelegenheit mal antesten :slight_smile: Nun die Fragen dazu:
    • in 4.x gibt es diese Funktionen ja nicht. Wie wird 4.x auf das Vorhandensein dieser Funktionen im Script reagieren? Oder muß ich da einen Fork machen zwischen 4.x und 5.x? Hat die Scripting Engine eine Art Präprozessor in der Art “#IFDEF Version5 { …Code… }”?
    • Die Funktionen “OnVTOn” und “OnVTOff” kann ich mir erklären - aber was macht “OnVTVolume”?
    • Ist es ggf sinnvoll, noch einen weiteren Modus zu definieren, nämlich den, wenn während des Voicetracking der VT-Editor geöffnet ist?

LG

McCavity

v4 wird die unbekannten Befehle einfach ignorieren.

OnVTVolume wird aufgerufen, wenn der Lautstärkeregler eines der Player bewegt wird. Entweder mit der Maus oder durch Fernsteuerungskommando (also in deinem Falle MIDI-Fader). Man kann das bei einem MIDI-Controller mit Motorfadern dazu nutzen, die Faderstellung an den Controller zurückzuliefern. Wichtig ist dabei der Parameter “Source”. Wenn er auf “REMOTE” gesetzt ist, bedeutet dass, die Lautstärke-Änderungen wurde durch eine Fernsteuerung (also MIDI selbst) ausgelöst. Dann sollte man auf das Bewegen der Motorfader verzichten.

Über Signalisierung “Mix-Editor während VT” habe ich noch nicht nachgedacht. Brauchst du das wirklich?

Hi, Torben,

danke für die Erklärung. Ob ich die Signalisierung für den Mix Editor im VT brauche, weiß ich ehrlich gesagt noch gar nicht. Ich vermute eher nicht, weil es dort ja nicht mehr um Player oder Kanäle geht. So lange Tastendrücle vom MIDI-Controller dort nichts anrichten kann ich auch drauf verzichten - aber im Sinne der Signalisierung wäre es dann vielleicht auch sinnvoll, die Tasten alle auf “aus” zu setzen und beim beenden des Editors wieder einzuschalten. Aber das wäre im Prinzip nur das Sahnehäubchen, wenn ich mit meinen Vermutungen richtig liege.

LG

McCavity

Es gibt wieder was neues… :slight_smile: Da ich - unter Umständen - vorhabe, mich mal wieder ein bißchen intensiver mit Programmierung zu beschäftigen, habe ich mich mal nach einer Bugtracker Lösung umgesehen und mich dabei für Mantis entschieden (weil ich das mit meinen vorhandenen Ressourcen sofort umsetzen konnte ;-)). Davon profitiert auch mein kleines Script, da es mir als Spiel- und Übungsraum dient, um den Umgang mit Mantis zu erlernen. Wer also möchte, kann auch da reinschauen, um aktuelle Probleme und Entwicklungen zu sehen (ja, es gibt in der aktuellen Version im Git Repository tatsächlich einen (kleinen) Bug, den ich noch ausbügeln muß ;-)). Und wem etwas auffällt und das gerne behoben sehen möchte, der darf sich dort auch anmelden (Nickname und gültige eMailadresse werden benötigt, aber nur zum Zwecke des Bugtrackers verwendet) und kann direkt Tickets darin anlegen. Muß aber nicht sein, eine PM oder eine Nachricht in diesem Faden tun’s auch ;-)) wie gesagt: das soll eventuell mal ein etwas größeres Projekt als dieses Script unterstützen, aber ich kann ja schonmal üben :slight_smile:

Ach ja, hier noch der Link: http://eckradio.de/mantis/

LG

McCavity

Warum Mantis, wenn der Source ohnehin schon bei Github liegt? Dort ist doch ein komfortabler Bugtracker integriert, und man kann gleich noch Patches und Pull Requests bequem mit dranhängen.

Nur mal so als Frage :wink:

Ööööh… gute Frage :-[ ;D Github kenne ich auch noch nicht so lange… ^^ muß ich echt mal gucken, ob ich das damit auch hinkriege - dann stampfe ich die Mantis Instanz bei mir ggf. wieder ein :smiley:

Danke für den Tipp!

[EDIT]
Tja… sieht so aus, als könne ich das, was ich erreichen will, auch in Github direkt lösen - irgendwie habe ich es sogar auf Anhieb geschafft, einen Commit direkt mit dem dazugehörigen Bug zu verlinken o.O Coole Sache, Parker! Ich denke, das war’s dann (zumindest erstmal) für meine Mantis-Instanz… :wink:
[/EDIT]

LG

McCavity