AutoLJ Beat, BPM und Liedwechsel synchronisieren mit DJ-Software

Aus PC_DIMMER
Wechseln zu: Navigation, Suche

AutoLJ Beat, BPM und Liedwechsel synchronisieren mit DJ-Software

Vorwort:

Ich werde hier beschreiben, wie ich unsere Kellerdisco soweit automatisiert habe, das sowohl die Musik als auch das Licht automatisch laufen. Einige Schritte benötigen viel Zeit. Ich kann aber aus meiner Sicht sagen, es hat sich jede Minute rentiert. Also nicht abschrecken lassen. Weiterhin weise ich darauf hin, dass diese Beschreibung nicht für blutige Anfänger geschrieben respektive geeignet ist. Programmier- und MIDI-Kenntnisse sind von Vorteil. Ich beziehe mich auf die von mir verwendete Hard- und Software. Verwendet ihr anderes, sinngemäß anpassen.

Verwendete Hardware:

  • Ein adequater Rechner der sowohl das Musikprogramm als auch PCDimmer gleichzeitig laufen lassen kann.
  • DMX. Ein Artnet Knoten oder jedes beliebige DMX-Interface das mit PCDimmer funktioniert.
  • RGB-Scheinwerfer und/oder diverse LED-Effekte die per DMX angesprochen werden.
  • Optional: Ein vernünftige Audio Interface (Focusrite) und vernünftige Lautsprecher (Dave G3). Sonst macht es doch keinen Spaß.

Verwendete Software:

Grobes Konstrukt:

Das Musikprogramm wird so angepasst, das es verschiedene Ereignisse per MIDI via rtpMIDI zu PCDimmer sendet. Diese MIDI Signale werden in PCDimmer ausgewertet bzw. verarbeitet. Das einfachste Signal ist der Beat selbst. Dazu kommen noch Liedwechsel und BPM. Diese drei genügen schon um ein ansprechendes Licht automatisch zu erzeugen.

Vorbereitung MIDI

Dazu gibt es nicht viel zu sagen. Die oben genannte Software stellt quasi ein virtuelles MIDI-Kabel zur verfügung. Wie das eingerichtet wird bitte auf der Homepage nachlesen.

Vorbereitung Musik:

Ich werde hier nicht erklären wie man was in Mixxx genau macht. Schließlich kann auch sein, das ihr ein anderes Musikprogramm verwendet. Bitte lest die jeweilig Beschreibung. Was aber sein muss und zumindest nach und nach gemacht werden muss da sonst weder ihr noch euer Auditorium am automatischem Licht keine Freude haben werdet:

  • Sammelt eurer Lieder zusammen die Automatisch oder oft abgespielt werden sollen. In Mxxx habe ich dafür Ordner angelegt. Zum Beispiel Rock, Pop, Oldies. Je nach Bedarf schiebe ich diese dann in den AutoDJ und starte diesen.
  • In Mixx gibt es einen Controller namens "Midi_for_light". Dieser muss eingerichtet werden in Mixxx, da dieser die benötigten MIDI-Signal sendet. Eine aktuelle Version "Midi_for_light-scripts.js" ist im Forum zu finden unter: https://mixxx.discourse.group/t/midi-output-for-lightcontrol/13224/37
  • Beats eurer gesammelten Lieder kontrollieren und korrigieren. Das ist fundamental. Da muss man durch und dafür geht viel Zeit drauf. Glaubt nicht, das man die Beats "automatisch" mit z.B. einem Bass-Filter sauber erkennen kann. NEIN, das geht schief. Nur DJ-Programme können Beats einigermaßen vernünftig verwalten.

Vorbereitung PCDimmer:

Ich setze hier voraus:

  1. Das PCDimmer installiert ist.
  2. Das DMX eingerichtet ist und funktioniert.
  3. Das MIDI eingerichtet ist und funktioniert.
  4. Die Geräte definiert sind.
  5. Effekte existieren die auf Beatsteuerung ausgelegt und eingestellt sind.
  6. Einiges an Erfahrung mit PCDimmer vorhanden ist.

Sprich, PCDimmer muss "funktionieren".

Beats in PCDimmer per MIDI empfangen und ausführen.

Dazu sind drei einfache Schritte notwendig. Sind diese erledigt können die Effekte bereits Beat gesteuert laufen.

Beat Tool auf Manuell umstellen


Schritt1:
Als erstes muss man im Beat-Tool auf "Manuell" umstellen.
Beat Tool öffnen und umstellen auf "Manuell".

MIDI-Beat-Ereignis hinzufügen


Schritt2:
Als zweites müss ein Beat ausgelöst werden sobald dieser per MIDI eintrifft.
Hierzu MIDI-Control öffnen. Kontrolliert hier zuerst, ob eure MIDI Quelle bei "Midi-In-Geräte" aufgenommen ist. Wenn nicht, werden keine MIDI Signale darüber empfangen.
Bitte beachten: Je nach konfiguration der MIDI-Ausgabe im Musikprogramm kann die MIDI-Message abweichen.
Mit dem grünen Plus ein neues Ereignis hinzufügen.

MIDI-Ereignis mit "Beat auslösen" verknüpfen


Schritt3:
Abschließend wird nun das MIDI-Ereignis mit dem Programmteil "Beattool" und dem Ereignis "Beat auslösen" verknüpft.

Das sollte es schon gewesen sein damit PCDimmer die Beats von eurem Musikprogramm empfängt und umsetzt.

BPM in PCDimmer per MIDI empfangen und auf Motoren umsetzen.

Es schaut einfach gut aus wenn die Geschwindigkeiten zur BPM passen. Viele Geräte haben einen DMX-Kanal der sich auf die Geschwindigkeit bezieht. Meistens "Speed" benannt. Manche Geräte haben mehrer Kanäle mit denen man Einfluss auf Geschwindigkeiten nehmen kann. Es gibt auch "Moving speed". Was ich persönlich auch mit setze. Um dies zu realisieren, wird BPM als Grundlage verwendet. Dabei gibt es folgendes zu beachten:

  1. MIDI kann nur 0-127 als Single-Wert übertragen. Das sollte genügen. In meinem Fall kommen per MiDI nur die BPM-Werte von 50 bis 177. Alles bis 50 BPM wird als MIDI 0 gesendet und wird pauschal als "extrem langsam" verarbeitet. Gleiches gilt für BPM über 177 das als MIDI 127 übertragen wird und einfach nur als "extrem schnell" verarbeitet wird.
  2. Jedes Gerät versteht unter "Speed" etwas anderes. Setzt man bei zwei unterschiedlichen Geräten den selben DMX-Wert, so sieht man das sie unterschiedlich schnell laufen. Daraus folgt, das man jede Geschwindigkeit einzeln berechnen muss damit die Geschwinndigkeit ins Gesamtbild passt. Sprich, die Berechnung muss im angepasst werden. Die Werte werden pro Gerät in der Gerätetabelle hinterlegt. Hinweis meinerseits: Aufwand lohnt sich!

Bisher wurden die Geschwindigkeit nur ein mal bei Liedwechsel umgesetzt. Für die neue Version plane ich zusätzlich einen kontinuirliche Anpassung. Ändert sich also die BPM um einen gewissen Wert, wird die Geschwindigkeit neu gesetzt. Beide Methoden haben ihre Vor- und Nachteile.

DRAFT: Wird noch erweitert. Ich baue gerade alles um da es mit den neuen Code-Szenen noch mehr Möglichkeiten gibt. DANKE Christian!!!

Liedwechsel in PCDimmer per MIDI empfangen und ausführen.

Bei Liedwechsel erwartet man auch einen Wechsel der Lichteffekte. Kommt der Befehl per MIDI, so wird dies ausgeführt. Der AutoLJ muss auf "On" stehen. Die Effekte werden alle beendet und neue per Zufall heraus gesucht. Dabei gibt es es folgendes zu bechten. Nicht alle Effekte passen zu der aktuellen BPM und können deshalb nicht genommen werden. Wird in der Effekte Tabelle definiert. Wird zufällig kein Effekt gewählt, so ist es dunkel. Es muss also mindestens ein Effekte laufen. Entsprechend muss es auch mindestens einen Effekt geben in der Effekt Tabelle der alle BPM kann.

DRAFT: Wird noch geschrieben

Code Szene "Initialisierung" - Definitionen festlegen

Es gibt sehr vieles das definiert werden werden muss. Wenn möglich geschieht dies in der der Code Szene "Initialisierung". Wenn möglich werden diese so abgelegt, das eine erneute Definition in anderen Code Szenen nicht mehr nötig ist. Sie werden dort direkt verarbeitet. Es gibt auch größere Defenitionen - siehe Arrays / Tabellen. Bitte schaut euch die Code Szene "Initialisierung" genau an. Zu vielem ist die Erklärung direkt bei der Definition zu finden.

Arrays / Tabellen

Einige Definitionen sind schon, wie oben erwähnt, sehr umfangreich. Diese werden als Tabellen abgelegt. Man kann diese natürlich per Hand in der Code Szene "Initialisierung" bearbeiten. Jedoch ist dies sehr mühselig und fehleranfällig. Ich habe deshalb für jede Tabelle ein OpenOffice Calc Dokument erstellt die im ZIP File des Projekts abgelegt sind.

Verwendung des Tabellen Dokuments

Ich bearbeite zuerst mittels Open Office das Tabellen Dokument. Meist handelt es sich um Zweidimensionale Tabellen. Also es enthält mehrer Spalten. Für die Code Szene "Initialisierung" wird pro Spalte eine Textzeile benötigt. Diese Zellen befinden sich rechts in der Tabelle. Diese Spalten sind mit "Code" beschriftet. Für den letzten Schliff verwenden ich Notepad++. Vorgehen wie folgt:

  1. Die verwendeten Code Zeilen (nur die mit realem Code) markieren und mittels STRG-C in die Zwischenablage nehmen.
  2. Neues Dokument in Notepad++ und mit Strg-V die Daten einfügen. Nicht erschrecken. Schaut noch schlimm aus.
  3. Suchen -> Ersetzen... aufrufen
  4. Suchmodus auf "erweitert" umstellen. Suche nach: #### und Ersetze durch: \r -> klick auf "alle ersetzen"
  5. Falls noch Leerzeilen zu enfernen sind: Suchmodus auf "Reguläre Ausdrücke" umstellen. Suche nach ^\s* und Ersetze durch frei lassen -> klick auf "alle ersetzen"
  6. Sollten links die Leerzeichen unterschiedlich sein kann dies korrigiert werden unter "Bearbeiten -> Einrückung -> Einzug verkleinern bzw. vergrößern". Erst verkleinern bis alle Leerstellen weg sind. Dann nach Bedarf vergrößern.

Jetzt sollte man einen sauberen Text haben den man in die Code Szene Initialisierung einbauen kann.

Zuordnung Tabellen Dokument zu Tabellen in "Initialisierung"

  • ButtonFarbe -> ArrayCode_ButtonFarbe.ods
  • Panel -> ArrayCode_Panel.ods

Comboboxen Tabellen Dokument anpassen

In den Tabellen Dokumenten gibt es Spalten in denen nur bestimmte Werte gültig sind. Um hier eindeutig zu sein, sind diese als "Combobox" gestaltet. Eine Änderung der Auswahlliste erfolgt über Daten -> Gültigkeitsbereich. Oberste Cobobox anpassen und diese dann mittels Copy & Paste bis Zeile 199 kopieren.

Besonderheiten Tabelle "ButtonFarbe"

  1. Alle Felder pro verwendeter Zeile müssen einen Inhalt haben und dürfen nicht leer sein.
  2. Zeile "[0,x]" (Header, entspricht Zeile 2 im Dokument) darf nicht verändert werden!
  3. Die Kombination "SetNr" und "Typ" darf nicht doppelt vorkommen.
  4. Die Farbe wird mit "$bbggrr" definiert und nicht wie gewohnt mit $rrggbb.

Die Farben finden Anwendung im Panel. Es wird die Hintergrundfarbe der Button definiert. Ich verwende zwei Farbsets. So ist die Trennung der Effekte pro Gerät (Zeilenweise angeordnet) deutlicher zu erkennen. Sprich, das Panel ist übersichtlicher. Es können mehr als zwei Farbsets definiert werden.

Besonderheiten Tabelle "Panel"

  1. Alle Felder pro verwendeter Zeile müssen einen Inhalt haben und dürfen nicht leer sein.
  2. Zeile "[0,x]" (Header, entspricht Zeile 2 im Dokument) darf nicht verändert werden!
  3. Spalte ButtonFarbe_Typ darf nur einen Wert aus ButtonFarbe enthalten. Folgende sind momentan möglich:
    • Effekt
    • ButtonAus
    • Preselct

Es werden die Button pro Panel definiert und deren aktueller Status. Die Button Hintergrund Farbe wird über den Typ und den aktuellen Status definiert. Letzteres ändert sich dynamisch. Ich verwende zwei Farbsets. So ist die Trennung der Effekte pro Gerät (Zeilenweise angeordnet) deutlicher zu erkennen. Sprich, das Panel ist übersichtlicher.

Bitte Typ "Effekt" nicht wörtlich nehmen. Ob der Button hier einen Befehl, Code oder Kombinition Szene anspricht ist egal. Gemeint ist, das mit Klick auf diesen Button ein Lichteffekt angesteuert wird. Selbiges gilt für "ButtonAus".