Marker-based DJ Mixer

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Einleitung

Im Rahmen des Interaktionspraktikum im Studiengang B.EI entstand im Wintersemester 16/17 die Idee einen DJ-Mixer zu entwerfen. Da fertige Geräte oft sehr teuer sind, kam die Idee auf das ganze mit möglichst einfachen bzw. erschwinglichen Mitteln zu steuern, um am Ende eine DJ-Software bedienen zu können.


Hardwareaufbau

Als Steuermöglichkeit wurde sich am Ende für ein optisches System entschieden. Eine Kamera soll möglichst exakt Gegenstände, die die Knöpfe eines DJ-Mixers nachstellen, aufnehmen und anhand deren Position und Rotation die gleichen Aktionen eines realen Mixers an eine DJ-Software bereitstellen.

Die Entscheidung viel auf ein Marker-basiertes System. Einerseits gibt es bereits einige Beispielapplikationen, was das Auslesen von Markern angeht, andererseits bieten Marker relativ einfach die Chance Position, Rotation zu erkennen. Weiterhin haben die meisten eine eindeutige ID und sind auch so bei mehreren Objekten identifizierbar.

Als Kamera wurde eine handelsübliche Webcam verwendet.

Aufbau Die Marker liegen mit ihrer Code-Fläche auf einer "freischwebenden" Glasplatte. Die Anordnung der Marker ist der eines handelsüblichen Dj-Mixers nachempfunden. Die Marker können nun in definierten Zonen bewegt oder gedreht werden. Eine Kamera scannt die Marker durch die Glasplatte und löst anhand der Position oder Rotation eine Software-Aktion aus.

Der Vorteil des "von unten" scannens der Codes ist, das der Nutzer die Code-Fläche nicht mit seiner Hand (oder mit was auch immer er die Marker bewegen möchte) verdeckt.

Screenshot from 2016-12-14 22-18-51.png

Software

Untitled.png

Zum Einlesen der Marker wurde openFrameworks (Version 0.9.7) genutzt. Das Addon ofxAruco bietet auf Basis der openCV und ofxCV Bibliotheken die Möglichkeit vordefinierte, mitgelieferte Marker anhand eindeutiger IDs zu erkennen. Position und Rotationswinkel jedes Markers können anhand ihrer graphischen Eigenheit erkannt und ausgelesen werden. Anfangs wurde das Addon "Fiducial Finder" benutzt, dieses konnte aber nicht erfolgreich in Openframeworks eingebunden werden.

Eine Änderung der Position / Rotation wird anschließend ausgewertet und auf Pakete des Midi-Protokolls gewandelt. Hierfür wird zusätzlich das ofxMidi- Addon benötigt.

Gängige DJ-Programme und Mixxer kommunizieren über das Protokoll, sodass sich dies als sinvoll erwiesen hat. Als Schnittstelle wurde hier ein virtueller Midi-Port eingerichtet, der zwischen dem Scan/Mapping Prozess und der DJ-Software fungiert.

Als Versuchs Software wurde die Plattformunabhängige DJ-Software Mixxx genutzt. Anfängliche Versuche mit Traktor erwiesen sich als nicht erfolgreich, da diese nur in der Vollversion die Möglichkeit bietet Midi-Werte selbst auf Programmfunktionen zuzuweisen. Auch das "vorgaukeln" eines realen Dj-Mixers hat nicht funktioniert, da diese gleichzeitig als Hardware-Dongle funktionieren.

Das ganze läuft aktuell unter Arch Linux.

Aktueller Stand

Die Marker werden eingelesen und bei guter Kamerapositionierung erkannt. Es wurden vier verschiedene Marker-aktionen implementiert:

  • Verschieben vertikal (Volume, Speed)
  • Verschieben horizontal (Crossfader)
  • Rotation 270° (3-Band Equalizer)
  • Verschieben vertikal_Switch (Play/Pause)

Derzeit wurden diese Funkionen für 2 Decks implementiert.

Aufbau real.png


Beschreibung der Ziffern:

  1. Play/Pause (Switch)
  2. Speed
  3. Volume
  4. 3-Band Equalizer
  5. Crossfader
  6. Kamera

Grün und Türkis stellen je 1 Deck dar. Die Steuerung folgt analog dem bezifferten Deck (vertikal gespiegelt).

Verbesserungsvorschläge

Hardware

  • Die Erkennung der Marker ist vom Deckenlicht abhängig. Ist dies zu grell werden die Marker nicht erkannt.
  • Die Kamera hat ein eingeschränktes Sichtfeld und muss so exakt positioniert werden, um die ganze Fläche der Glasplatte zu erkennen.

Software

  • Das aruco-paket ist eigentlich für augmented reality gedacht. Durch Erweiterung wäre es möglich virtuelle Knöpfe auf die Marker zu projezieren

Code

Link zum Repository (OHM - Content Services):

http://my.ohm-hochschule.de/content/dav/ohm/users/Users-B/BruenigHe/toolbox_data/anwendungen/MarkerBasedDjMixer/MarkerBasedDjMixer.zip