Quick Sign In:  

Forum: German Forum

Topic: Enjoy the new Generation. VirtualDJ Version 6 Out now

Dieses Thema ist veraltet und kann veraltete oder falsche Informationen enthalten.

Version 6

Endlich ist es soweit. Das langersehnte Release VirtualDJ V6 ist raus und in Eurem Downloadcenter.
Die Vips und Teamer des deutschen Forums haben Euch hier zusammengefasst, wie Ihr mit den verschiedenen Funktionen umgehen müsst, bzw eine Beschreibung der verschiedenen Funktionen.

Wenn etwas unklar sein sollte, schreibt es bitte in den Thread: http://www.virtualdj.com/forums/109629/German_Forum/Bugs_und_Fragen_VirtualDJ_6.html

Um VirtualDJ V6 und Ihre neuen Funktionen zu verstehen, ist es unumgänglich, diese Anleitung zu lesen.

Hier eine kleine Auflistung, der neuen Funktionen von VirtualDJ V6:

1) Neue Controller Unterstützung!

Mit VirtualDJ 6.0 ändert sich die Philosophie in der Anwendung.
Bisher war Virtual DJ eine DJ Software die überwiegend mit Maus und Tastatur verwendet wurde.
Als Hardware Hersteller begannen Software Steuerung zu erstellen, haben wir einen Kontroler nach dem anderen hinzugefügt.

Mit Version 6 haben wir Abstand von dieser Philosophie genommen und das Herzstück von Virtual DJ neu geschrieben, um es noch besser auf den Anwender auszurichten.
Nun ist die Tastatur nur mehr eine Möglichkeit unter vielen anderen. (Dazu später mehr)

Was für Unterschiede hat es in der täglichen Anwendung?

Erstens, kann nun jeder leicht, das Verhalten der Steuerung verändern, in der gleichen Art wie zuvor die Tastaturshortcuts gewechselt wurden. Leistungsstarke "Actions" können jetzt auf jede beliebige Taste zugeordnet werden.

Zweitens ist es nun viel leichter eine neue Steuerung hinzuzufügen.
MIDI, HID egal welche, ohne auf eine neue Version von Virtual DJ warten zu müssen.
Neue Steuerungen haben eine Kompatibilitäts-Datei welche zum Download auf der Hersteller-Seite verfügbar ist bevor die Steuerung überhaupt auf den Markt kommt.

Und zuletzt verhält sich jede Steuerung in einer einheitlichen Weise und profitiert automatisch von den zukünftigen Erweiterungen und Funktionen der neuen Virtual DJ Versionen.

2) Neue Skript Sprache:

Die Version 6 verwendet eine neue, komplettere und aussagekräftigere Sprache für Tastaturkürzel, Steuerungen etc.
Sofern keine fortgeschrittenen Funktionen verwendet werden, ist die neue Sprache ähnlich wie in der alten Version. Somit findet man sich sofort zurecht.

Trotzdem gilt es am Anfang mit Bedacht vorzugehen, denn auch wenn es in vielen Fällen ähnlich zu der alten Version aussieht, entspricht es nicht zu 100% der Version 5.2.1.
Natürlich können Skins/Plugins aus der vorherigen Version verwendet werden, welche mit „Version=5“ beschriftet sind oder frühere, da die alte Sprache immer noch unterstützt wird.
Unter der Version 6 werden diese automatisch umgewandelt, was allerdings einen Anstieg der CPU Last nach sich zieht.

Die größten Unterschiede in der neuen Sprache sind:

- Keine 4096 basierenden Werte. Wenn du den „Crossfader“ rechts haben möchtest, schreibst du nicht mehr „crossfaser4096“ sondern „crossfader100%“. Auf links gedreht heisst dieser Wert "crossfader0%

- Du kannst nun leistungsstarke Scripts kreieren in dem du "&" verwendest.: „goto_cue 1 & loop 4“ Auf Deutsch, man kann mehrere Befehle auf eine Taste legen.

- Du kannst zusätzliche Darstellungen verwenden „play ? pause & goto_cue : loop 4“

- Du kannst Variablen verwenden mit: „set $myvar while_pressed“ und dann „var $myvar ? key_lock : pitch:range `10,16,50`“.

- Siehe hier weiter unten. H.Jakovski hat hierzu eine tolle und ausführliche Anleitung geschrieben.

3) Neues Skin Antriebssystem
Der größte Unterschied in der neuen Skin Engine für den Endverbraucher ist, dass die Skins nicht mehr eine grösse haben, sondern sich automatisch am Desktop anpassen ohne etwas in der XML Datei zu ändern. Ihr könnt jetzt ohne Probleme einen Skin verwenden, der kleiner oder grösser als Euer Desktop ist. Dieser wird sich automatisch an die Grösse anpassen. Natürlich müsst Ihr hierzu das drücken.


4) Neuer Timecode

Der Timecode Engine wurde neu geschrieben.
Der Aufbau ist nun viel einfacher.
Kein „autoconfig“ mehr. Die Timecode-code Ermittlung wird dem Signal der Echtzeit angepasst. Das heisst, sobald VirtualDJ ein Signal bekommt, wird dieses automatisch eingestellt.

Es muss nur der korrekte Timecode Vinyl oder CD gewählt und möglicherweise ein wenig der Kreis nachgestellt werden.
Dieser soll so rund wie möglich sein. Hier hast Du die Möglichkeit, mit den drei verschiedenen Drehknöpfen, Right/Left, Phase/Anti und Gain nachzustellen. Normalerweise sollte man sofort 100% haben.

Sollte aus irgendeinem Grund etwas schief gehen und es sind hier keine 100% Timecode, dann gibt es ein leistungsfähiges Fehler Such Fenster. Genannt Debug.

Das Fehler such Fenster ist auch für andere User sehr hilfreich um herauszufinden was mit Deinem Timecodecode falsch läuft.
Klick hierzu auf den Button "Debug". Somit erscheint ein neues Fenster, indem der Timecode in 3 verschiedenen Fenstern angezeigt wird.
Wenn ein Fehler besteht, kann dieser in eine bmp.image Datei gespeichert werden. Somit kann dieses ins Forum gestellt werden. Wir können Euch dann besseren Support bieten.

In kürze wird auch eine neue Generation Timecode Vinyls zur Verfügung stehen, die hier auf der Seite zu erwerben sind.


5) Unicode Kompatibel:

Version 6 ist nun voll Unicode kompatibel und kann japanische/russische/griechische/etc. Schriften ohne Probleme zeigen.

Für dieses muss die Datenbank umgewandelt werden. Sie wird automatisch umbenannt in „VirtualDJ database v6.xml
Die v5 Datenbank wird noch immer existieren, so kannst Du noch immer virtualdj v5 nutzen.
Jede Änderung welche in v6 gemacht wurde, kann nicht mehr in der v5 Datenbank gesehen werden.


6) Verbesserter Video Engine

Mehr Videos Codecs können nun mit dem internen Converter angezeigt werden.
Auch bei Videos wird Euch jetzt der ID3Tag angezeigt.

7) MusicGroups
Die Idee hinter MusicGroups ist zweierlei:
- zum einen könnt Ihr der Welt zeigen welche Musik Ihr spielt. Ihr könnt Euch mit anderen die einen ähnlichen Musikstyle spielen zusammentun und eigene Gruppen erstellen.
VirtualDj sendet dann automatisch Eure Playlisten an die Gruppe in der Ihr Mitglied seid und zeigt sie auf der Webseite in der entsprechenden Gruppe an.
- der zweite Teil ermöglicht es Leuten, wenn ihnen Eure Musik gefällt, sich in Eurer Gruppe 'anzumelden'. Wenn diese Leute jetzt Ihre Version von VirtualDJ verwenden wird Ihnen einVorschlag eingeblendet für den Titel den Du oder die Leute der Gruppe eventuell an dieser Stelle spielen würdet.

Wir glauben das Ihr so Euren Musikalischen Horizont erweitern könnt und neue Musik kennenlernt.


8) Netsearch
Die Idee dahinter ist sehr einfach: schränkt Eure Musikauswahl nicht ein indem Ihr nur Musik von Eurer Festplatte verwendet.
Wenn Euer Rechner während des auflegens über eine Internetverbindung verfügt werden bei jeder Suche zuerst die Treffer im aktuellen Ordner, danach die Treffer der gesamten Festplatte angezeigt.
Danach versucht VirtualDJ ein verfügbares MP3 oder ein Video im Internet zu finden das zu Eurem Suchkriterium passt. Die gefundenen Dateien können direkt auf den gewünschten Player mit "Drag & Drop" gezogen werden und starten als Stream direkt aus dem Netz. Wenn Eure Verbindung zu langsam sein sollte, oder Ihr den Titel in Zukunft noch öfter spielen möchtet, könnt Ihr den Trackdurch einen Rechtsklick in den Cache von VirtualDJ herunterladen.

Wenn der Cumputer mit dem Ihr auflegt KEINE Internetverbindung hat seid Ihr aber von dieser neuen Funktion nicht ausgeschlossen. Ihr könnt auf einem anderen Rechner mit VirtualDJ die Cache Dateienherunterladen und diese mittels einem externen Datenträger auf den Rechner im Club übertragen und dort nutzen.

ACHTUNG ! Um sich im Rahmen der Legalität zu bewegen laufen die Cache Dateien nur einen Monat und müssen dann erneut im Netz gesucht werden. Dies stellt sicher das die Datei nach wie vor frei im Internet angeboten wird. Sollte dies nicht mehr der Fall sein wird die lokale Cache Datei gesperrt und kann nicht mehr verwendet werden.



9) Neuer Default Skin:

Hier kann man eigentlich nicht viel schreiben, aber schauen :-D

http://www.youtube.com/watch?v=BoxDkupdpDQ&fmt=22

Die nächststehenden Anleitungen und Tutorials wurden von Jakovski, Braenzu, Haui70, X1Lover und mir geschrieben.
Wir hoffen, das die nachstehenden Anleitungen Euch eine Hilfe sein werden.
Natürlich wünschen wir Euch viel Spass und viel Erfolg mit VirtualDJ Version 6.

X1Lover und ich wollen uns hiermit auch ganz recht Herzlich bei den deutschen Vips für Ihren Einsatz an den Tests und den Übersetzungen bedanken. :-)


PS: Die nächststehenden Beiträge findet Ihr auch iin unserem deutschen Wiki:

http://www.virtualdj.com/wiki/German.html

 

geposted Thu 30 Apr 09 @ 3:53 am


VDJScript - Virtual DJ Script für VirtualDJ 6.x
(Übersetzung aus dem Englischen von H. Jakovski)

VDJScript ist die neue Skiptsprache die in allen Komandofunktionen von VirtualDJ 6 verwendung findet.
Sie kann in Skins, Tastaturkürzeln (Shortcuts) und beim mappen von Kontrollern verwendet werden.

Die Sprache wurde so designt das sie leicht erlernbar ist, eine kurze Schreibweise besitzt, jedoch mächtig genug ist komplexe Scripte und Makros abzubilden.
In der einfachsten Form können sog. "Verben" wie "play", "pause", "goto_cue 1", "volume 70%", "pitch +0.5%", etc. verwendet werden.
Oder aber je nach Anwendung können komplexe Makros erstellt werden wie z.B.:

"play ? crossfader +12.3% & effect 'flanger' activate : deck 2 loop 4 & set $myvar 42"

(Eine Erklärung dieses Beispiels würde gleich am Anfang etwas den Rahmen sprengen. Nur soviel sei gesagt, die "42" erklärt sich aus dem Film "Per Anhalter durch die Galaxis" ;-) - Anmerkung d. Übersetzers)

Verben:

Die Basiselemente von VDJScript sind sogenannte "Verben".
Eine Liste der "Verben" die VirtualDJ verarbeiten kann finden sich im Bereich "config=>Mapper" im Bereich "See also...".

Alternativ kann auch die Datei "Eigene Dateien/Virtual DJ/Language/English.xml" geöffnet werden. Unter dem Element "<action>" sind alle Verben
mit jeweils einer kurzen Erklärung angegeben.

Von "armin mc" wurde hierzu für Euch eine deutsche Language XML Datei geschrieben. Diese steht für Euch im Downloadcenter für Euch bereit.


Kommandos:

Die Grundkommandos bestehen im Prinzip lediglich aus einem Verb (wie z.B. "play" oder "pause")
Diese "Verben" können optional durch andere "Kommandos" oder Optionen ergänzt werden.

- "deck" - Durch voranstellen des "deck" KOmmandos kann bestimmt werden auf welchem Laufwerk die Aktion durchgeführt werden soll.
Gültige Werte sind z.B. "1", "2", "left", "right", "default" oder "active". Also z.B. "deck left stop".

- "parameter" - Nach einem Verb können ein oder zwei Parameter (je nach Verb) übergeben werden. Gültige Werte sind:
"Text", Prozentangaben (z.B. "20%"), Wahr oder falsch ("true", "false"), Zeitangaben ("+1400ms"), Ganze Zahlen (z.B. 1, 7, 124) und
Dezimalzahlen wie "1.5" oder "2.87".

- "effect" - Zum Ansprechen von Effekten dient das Kommando "effect" so kann z.B. mit "effect activate" der Effekt angeschaltet werden.
Um gezielt ein Deck anzusprechen sollte das "deck" Kommando vorangestellt werden, also z.B. "deck 2 effect activate".
Ein Effekt kann zum einen über die Slotnummer, oder direkt über den Namen angesprochen werden:
"effect 'flanger' slider 1 70%" - der Zusatz Slider steuert die Parameterregler des Effekts. Möglich wäre also auch folgendes:
"deck 1 effect 3 slider 1 70% slider2 30%" um am linken Player den Effekt im Slot 3 zu aktivieren und die Parameterregler
entsprechend einzustellen. Auch hier kann wieder durch voranstellen von z.B. "deck right" das gewünschte Laufwerk ausgewählt werden.

- "sampler" - Zum ansprechen des Samplers gefolgt von der Slot Nummer. Z.B. "sampler activate" oder "sampler 3 volume 70%". Auch hier kann wieder
das Kommando "deck" vorangestellt werden.

- Abfragen - Einige spezielle Abfragen benötigen das Kommando "get" vorangestellt. So z.B. "get time_ms", bzw. "deck left get time_ms".

- Temporäre Aktionen - Das Anhängen von "while_pressed" am Ende eines "Verbs" bewirkt das Ausführen nur solange die Taste betätigt wird.
Z.B. "volume 100% while_pressed"

- Blinken von LEDs - "blink" oder "blinkfast" bewirkt das Blinken einer LED am Kontroller wenn das vorangestellte Verb wahr ist. Also z.B.
"play blink" bewirkt das Blinken der LED wenn der Player läuft. "pause blinkfast" - im Pause Modus würde die LED dann
schnell blinken. Auch hier bewirkt das voranstellen des "deck" Kommandos das ansprechen eines bestimmten Players.

Die komplette Kommando Syntax lautet: deck [deck]

effect [effect]

sampler [slot]

[get] verb [param1[param2]]

blink

blinkfast

while_pressed


Macros:

Um kompliziertere Abläufe zu programmieren werden Makros verwendet. Mit dem "&" Zeichen werden mehrere Befehle miteinander verkettet.
Beispiel: "goto_cue 1 & pause" - springt an den Cuepunkt 1 und schaltet auf pause. Entsprechend würde "goto_cue 1 & play" zum Cuepunkt springen und
direkt mit der Wiedergabe starten. Die einzelnen "Verben" werden der Reihe nach abgearbeitet. Das auch hier wieder die Verknüpfung mit dem "deck"
Kommando möglich ist sei an dieser Stelle zum letzten mal erwähnt. (Ich denke mal das hat jetzt jeder verstanden ;-))


Variablen:

Variablen kann man sich ungefähr wie kleine gelbe Klebezettel vorstellen. Auf dem Zettel steht der Name der Variable und deren Wert.
"set $test 1" oder "set $test true" oder "set $test 42" ;-) Der Wert ist in der Variable gespeichert und kann an anderer Stelle im Skript verwendet werden.
Alle Variablen beginnen entweder mit dem "$" Zeichen und sind somit überall im Skript verwendet werden, oder mit "%" und sind dann lokal nur auf dem
jeweiligen Player verwendbar. "deck 1 set %test 1" und "deck 2 set %test 5" - Somit hat die Variable auf Deck 1 den Wert "1" und auf Deck 2 den Wert "5".

Um eine Variable zu setzen können Verben wie "set", "toggle" und "cycle" verwenden.
Um eine Variable zu lesen können Verben wie "var", "var_equal", "var_smaller", etc. verwendet werden.
Ein typisches Beispiel für die Verwendung von Variablen ist es eine Taste als sogenannte "Shift" Taste zu belegen. Wird diese Taste vorher gedrückt,
bzw. zusammen mit einer zweiten Taste festgehalten, so kann die 2. Taste zusammen mit Shift eine andere Funktion haben als im normalen Betrieb.
Also z.B. "set $myshift while_pressed" für die Shift Taste und "var $myshift ? Kommando1 : Kommando2" für die andere Taste programmiert.
Die 2, Taste wird im Normalfall das Kommando2 ausführen (false) und zusammen mit gedrückter Shift Taste das Kommando1 ausführen.


Verzweigungen: (jetzt wird's etwas komplizierter)

Mit den Zeichen "?" und ":" ist es möglich bedingte Verzweigungen zu programmieren. Die Syntax sieht folgendermaßen aus:
"Bedingung ? wahr : falsch" - Hier wird eine Bedingung geprüft. Ist diese wahr wir das erste Statement ausgeführt, ist sie falsch wird das zweite
Statement ausgeführt. Speziell in Verbindung mit der Verwendung von Variablen kann einiges realisiert werden.
Dies soll kurz an ein paar Beispielen erläutert werden:

"$test ? deck 1 loop 4 : deck 1 loop 8" - Wenn die Variable $test wahr ist, also NICHT null wird ein 4'er Loop auf Deck 1 gestartet, ansonsten ein 8'er Loop
auf dem Deck 1.


Verb vs Abfrage

"Verben" können als Aktion oder als Abfrage verwendet werden, je nachdem in welchem Kontext sie stehen. Wenn z.B. in einem Controller Mapping
bei einer Taste das Verb "play" steht wird das Drücken der Taste die Wiedergabe starten. Steht jedoch bei einer LED das Verb "play" wird eine
Abfrage des Zustandes durchgeführt. Ist die Abfrage wahr (also läuft der Player) wird die LED leuchten. Ist der Player gestoppt, also ein falsch als
Antwort bleibt die LED dunkel.

Einige Kommandos können Boolsche Werte (wahr=true/falsch=false) oder einen Wert zurückgeben, abhängig von den Parametern:
- "crossfader" - liefert einen Wert zwischen 0.0 und 1.0 wenn er in einer Abfrage geschrieben wird.
- "crossfader 42%" - liefert wahr (true) zurück wenn der Crossfader auf 42% steht, ansonsten ist der Rückgabewert falsch (false).

Kommandos die mit "get" am Anfang aufgerufen werden können ebenfalls einen Rückgabewert enthalten. Entweder einen String (Text) oder eine Zahl,
abhängig vom verwendeten Verb.


Parameter

VDJScript kennt 6 verschiedene Parameter Typen:

- text - muss immer in einzelnen (') oder doppelten (") Hochkommas stehen. Z.B.: "load 'myfile.mp3'"

- Boolscher Wert - Kann die Werte "on" - "1", "off" - "0", "true" - "1", "false" - "0" oder "toggle" - "-1" haben.
Bei "toggle" wird der Wert von "0" nach "1", bzw. "1" nach "0" geändert.

- Zeiten - Zeiten werden in Millisekunden (ms) angegeben. 1000ms sind 1 Sekunde. Z.B. "nudge +100ms"

- Integer - Sind ganze Zahlen (1, 2, 3, 4, 5, ...) Also zum Beispiel: "effect select +1"

- Dezimalzahlen - Sind Zahlen mit Kommastelle (ACHTUNG! Punkt statt Komma verwenden). Zum Beispiel: "crossfader 0.5"

- Prozentzahlen - Beispiel: "crossfader 50%"

Die meisten der Zeitangaben, Dezimalzahlen, Prozentwerte werden gleich behandelt (50% / 100 = 0.5).
Einige Ausnahmen gibt es jedoch. So setzt z.B. "pitch 100%" den Pitch in der Mitte, während "pitch 1.0" den Pitch auf den Maximum Wert setzt.
Beachtet auch das ein "nudge +1" und "nudge +1.0" nicht das selbe sind. Der erste Befehl bewegt um 1 Beat, während der zweite das selbe bewirkt
wie "nudge +100%" nämlich an das Ende des Songs zu springen. In der Regel sollte mit Prozentzahlen gearbeitet werden. Beim arbeiten mit Dezimalzahlen
müsst Ihr halt etwas genauer testen ob alles so läuft wie Ihr euch das gedacht habt ;-).

Implizierte Parameter

Wenn Ihr ein Kommando für einen Slider, Drehknopf, Jogwheel oder ähnliches nutzt wird AUTOMATISCH der Wert der auf dem Slider eingestellt wird
an den Parameter angehängt !!! Also wenn Ihr z.B. als Aktion "volume" schreibt und den Slider auf 42% stellt wird daraus automatisch "volume 0.42".
Wenn Ihr allerdings schreiben würdet "volume 10%" würde daraus "volume 10% 0.42" - in diesem Fall wir der zweite Parameter, also die "0,42" verworfen da
das Verb "volume" lediglich einen Parameter kennt.

Wenn Ihr den Implizierten Parameter beeinflussen möchtet könnt Ihr das mit Verben wie z.B. "parameter_multiply", "parameter_add", etc. erreichen.
Wenn also der Slider auf 42% steht würde "parameter_multiply 0.1 & volume" die Lautstärke auf 4.2% setzen (42% x 0.1).

WICHTIG !!!
Wenn Ihr ein Makro verwendet wird der Implizierte Parameter an JEDES der Verben automatisch angehängt, also würde aus "crossfader & loop" ein
"crossfader 0.42 & loop 0.42" werden. Um zu verhindern das bei der Loop auch der (in diesem Falle) falsche Wert angehängt wird muss mit dem Verb
"value" die Position gesetzt werden an der der Wert eingesetzt werden soll. In diesem Fall wird an die anderen Verben im Makro KEIN Wert angehängt.
Aus "crossfader value & loop" wird dann "crossfader 0.42 & loop". Es können beliebig viele "value" in das Makro eingesetzt werden - jeder "value" wird dann
durch den entsprechenden Wert ersetzt.

Slider liefern Dezimalwerte als Implizierten Parameter zurück, also "crossfader" => "crossfader 0.42".

Jogwheels liefern einen relativen Wert zurück "crossfader" => "crossfader +0.42" (+1.0 stellt eine komplette Umdrehung des Jogwheels dar)

Endlosregler (Endlospotis) addieren einen relativen Integer Wert (Ganzzahlig 1, 2, 3, 4, ...) - "crossfader" => "crossfader +1"

Wenn Ihr einen Endlosregler an Stelle eines Sliders verwendet wird der Integer automatisch in einen Dezimalwert konvertiert indem er durch 32 geteilt wird.
Das bedeutet: es werden 32 Schritte am Endlosregler benötigt um von 0% bis 100% zu faden.
In unserem vorherigen Beispiel würde das folgendes bedeuten: "crossfader +1" entspricht "crossfader +0.03125". Mit dem Verb "parameter_multiply" könnt Ihr selbst
eine entsprechende Umrechnung des Wertes vornehmen und so die Auflösung ändern.

(Übersetzung aus dem Englischen von H. Jakovski)



An dieser Stelle bin ich mal so frei und bringe ein paar nützliche Beispiele für die neue VDJScriptsprache:

EQ Patch (H. Jakovski) wrote :

<map value="HIGH" action="eq_high & param_equal 0% ? eq_kill_high 1 : eq_kill_high 0" />
<map value="MED" action="eq_mid & param_equal 0% ? eq_kill_mid 1 : eq_kill_mid 0" />
<map value="LOW" action="eq_low & param_equal 0% ? eq_kill_low 1 : eq_kill_low 0" />

Wenn einer EQ Regler (Bass/Mid/High) komplett nach links, also auf den kleinsten Wert eingestellt werden, wird automatisch der Kill-Switch für den jeweiligen Kanal (Bass/Mid/High) aktiviert. Wenn der Regler wieder nach rechts gedreht wird schaltet sich der Kill-Switch wieder aus.


Tasten am Controller mehrfach belegen (H. Jakovski) wrote :

Wenn Ihr Tasten am Controller doppelt belegen wollt benötigt Ihr zuerst mal eine Taste am Controller die Ihr nicht standardmäßig benötigt. Diese Taste wird dann als 'Shift' Taste belegt. Wenn Ihr jetzt z.B. auf die Taste 'Play' eine zweite Funktion zuweisen wollt habt Ihr zwei Möglichkeiten. Entweder Ihr haltet die Shift Taste gedrückt und betätigt dann die Play Taste um die zweite Funktion aufzurufen:

<map value="Name der Taste" action="down ? set $shift 1 : set $shift 0" />

wenn Ihr wollt kann die Shift Taste so belegt werden das sie beim ersten betätigen aktiviert wird und beim zweiten betätigen wieder abgeschaltet wird:

<map value="Name der Taste" action="toggle $shift" />

Wenn die Shift Taste eine eigene LED besitzt könnt Ihr Euch mit dieser LED z.B. den Zustand der Shift Taste anzeigen lassen:

<map value="Name der Leuchtdiode" action="var $shift" />

So, jetzt müsst Ihr lediglich noch folgendermaßen die zweite Funktion auf die Taste 'play' programmieren:

<map value="PLAY" action="var $shift ? hot_cue 1 : play_pause" />

in diesem Fall würde die Taste ganz normal Play/Pause machen und zusammen mit Shift als 'Hotcue 1' arbeiten.


Gruß, Heiko

 

geposted Sat 02 May 09 @ 5:41 am


Controller Definition für MIDI - selbst gemacht
(Übersetzung aus dem Englischen von H. Jakovski)

Die 'Definition' Datei für einen MIDI Controller ist eine XML Datei und liegt in 'Eigene Dateien/VirtualDJ/Devices/'. Sie hat folgenden Aufbau:

Das 'root' Element der XML Datei muss <device> heissen und hat folgende Werte:
- name: Eindeutiger Name welcher den Controller Identifiziert (Wird auch im Mapper Bereich verwendet).
- author: (Optional) Name des Authoren der XML Definition Datei.
- type: Muss in diesem Fall "MIDI" sein.
- decks: Kann entweder "1" oder "2" sein, je nachdem ob der Controller nur für ein Deck oder eben für zwei Decks gleichzeitig ausgelegt ist.
- sysexid: (Optional) Antwort auf die Identitätsanfrage per Sysex. (Siehe auch "Geräte Identifizierung" weiter unten)
- drivername: (Optional) Name des Treibers
- drivernameout: (Optional) Name des Output Treibers, ist unterschiedlich
- midiin: (Optional) Nummer des Midi Input Interfaces auf diesem Computer
- midiout: (Optional) Nummer des Midi Output Interfaces auf diesem Computer
- sysexquery: (Optional) Sysex Kommandos das zur Identifizierung an das Gerät geschickt werden soll
- sysexanswer: (Optional) Sysex Antwort die vom Gerät zurück kommt

Beispiel:
<?xml version="1.0" encoding="UTF-8"?>
<device name="Mein Controller" author="Ich" type="MIDI" decks="2" sysexid="F07E??06020001020304">
...
</device>

Beispiel für den Dateinamen einer eigene Definition Datei: 'Vestax VCI100 definition.xml'.


Geräte Identifizierung:

Um eine automatische Erkennung der Geräte in VirtualDJ zu gewährleisten muss in der Definition Datei eine Möglichkeit hinterlegt werden das Gerät und den Midi Port an dem es angeschlossen wurde zu ermitteln. Hierfür gibt es, je nach dem wie MIDI kompatibel der Controller ist, verschiedene Möglichkeiten dies zu tun.

Wenn sich der angeschlossene MIDI Controller an die Spezifikationen des MIDI Protokolls hält ist der beste Weg die sogenannte 'Geräte ID' (SysExID) im XML zu hinterlegen. Das wird erreicht in dem der Wert 'sysexid="WERT"' wie im obigen Beispiel eingetragen wird. Die SysExID (Antwort auf die Identitätsanfrage) solltemit 'F07E??0602' starten. Dann folgt eine 3-Byte Hersteller ID und zum Schluß die Produkt ID. Die beiden '??' in unserem Beispiel stehen für den verwendeten MIDI Kanal der aktuell benutzt wird. Dort stehen in der Regel 2 Zahlen, die aber für die Eintragung mit '??' ersetzt werden müssen da sonst der Controller NUR auf dem angegebenen MIDI Kanal erkannt würde. Wenn Ihr also z.B. einen zweiten, anderen, Midi Controller anschließen würdet könnte das zu einer Verschiebung im MIDI Kanal führen und das Gerät würde somit nicht mehr erkannt.

Am einfachsten ermittelt Ihr die ID und alle weiteren benötigten Daten mit folgendem Tool: http://www.virtualdj.com/download/miditrace.exe

Wenn Ihr das Programm Euren Controller angeschlossen habt startet einfach das Tool klickt mit der Maus rechts in der Liste den Controller an und drückt oben auf 'Send'. Die Hexadezimalen Zahlen die bereits eingetragen sind (SysEx ID Request) werden an den Controller gesendet der hierauf in der Regel mit seiner SysExID antworten sollte. Diese einfach kopieren und den Midi Kanal wie oben beschrieben durch '??' ersetzten.

Wenn Euer Controller sich nicht so ganz an die Spezifikation des MIDI Standards hält wird es deutlich schwieriger. (An dieser Stelle Empfehle ich Anfängern auszusteigen und im Forum um Hilfe zu bitten.) Ihr benötigt vom Hersteller des Controller die Information ob es eine 'SysEx' Anfrage gibt die eine Eindeutige Identifizierung des Gerätes ermöglicht und wie diese Antwort aussieht. Da SysEx dem Hersteller die Möglichkeit gibt eigene Kommandos für seine Geräte zu implementieren kommt Ihr hier ohne die Info's des Herstellers nicht weiter.

!!! ACHTUNG !!! Schickt auf keinen Fall sinnlose, zufällige oder nicht 100% Verstandene SysEx Befehle an Euren Controller. Unter Umständen wird sonst etwas an der Hardware beschädigt.Zum Beispiel wenn Ihr den 'Hersteller SysEx' für den Befehl - 'Lösche die bestehende Firmware' an den Controller schickt. KEINE GUTE IDEE ;-)

Alternativ habt Ihr auch die Möglichkeit, sofern der Controller keine SysExID implementiert hat, das Gerät durch den Namen des verwendeten Treibers zu identifizieren.

Beachtet aber bitte hierbei das der Name des Treibers unter Windows Vista und Mac OSX durch den User geändert werden kann, bzw. wenn Ihr eine z.B. Englische Windows Version verwendetder Namen auf Grund der anderen Sprache variieren kann. Diese Methode ist also nicht 100%ig !!!
Wenn das Output Interface z.B. einen anderen Treiber Namen verwendet kann dieser mit 'drivernameout=WERT' ebenfalls eingetragen werden um eine bessere Trefferquote zu erreichen.


Sollte der Treiber KEINEN eindeutigen Namen haben und Ihr auch keine SysExID verwenden könnt habt Ihr als letzte Möglichkeit noch die Eintragung des verwendeten Midiports.
Diese Nummer ändert sich allerdings wenn Ihr weitere/andere MIDI Geräte in Betrieb nehmt, bzw. ist auf anderen Computern auf jeden Fall falsch.
Diese Art der Identifikation soll vor allem dazu dienen Entwicklern, während der Testphase, einen schnellen und einfachen Zugriff zu ermöglichen. Die beiden Werte 'midiin=WERT' und 'midiout=WERT' wurden hierzu implementiert. Die Dauerhafte Identifizierung eines Gerätes sollte auf einem der oben beschriebenen Wegen realisiert werden !!!


Für den Fall das alle der hier aufgezeigten Wege NICHT funktionieren kann auf einen Identifizierungsstring auf verzichtet werden. Dann wird das Mapping auf alle Profile die NICHT durch ein anderes, mit Identifizierung, angelegtes Profil abgedeckt werden angewendet. D.h. wenn Ihr die Definition Datei NUR FÜR EUCH SELBST schreibt könnt Ihr auf eine Identifizierung Notfalls auch verzichten. (Anm. d. Übersetzers: Besser ist immer eine Identifizierung da so die Definition Datei auch von anderen Usern genutzt werden kann.)


MIDI Elemente:

Jeder Taster, Fader, Drehregler, LED, LCD, etc. wird durch ein sogenanntes 'child' Element innerhalb des <device> Elements definiert.
Alle dieser 'child' Elemente (mit Ausnahme von 'init' und 'exit') können die folgenden Parameter beinhalten:
- name: Der Name des Elements - dieser wird später im Mapper angezeigt
- deck: (Optional) Das Deck (1/2) für welches dieses Element verwendet wird (sofern der Controller zwei Decks unterstützt) - z.B. für die 'PLAY' Taste. Für gleiche Elemente auf den
beiden Decks sollten IMMER die selben Namen verwendet werden, also z.B. für den Play Button 'PLAY' - die Unterscheidung ob linkes oder rechtes Deck erfolgt durch den
'deck' Parameter.
- channel: (Optional) Der Midi Kanal auf dem gesendet wird (Sofern zwischen verschiedenen Kanälen unterschieden werden muß)


Taster:

Ein Taster wird durch das '<button>' Element mit den folgenden möglichen Parametern definiert:
- note: Die Midi Note
- inverted: (Optional) Hier könnt Ihr 'true' eintragen wenn Euer Controller ein 'note-off' beim drücken und ein 'note-on' beim loslassen sendet (Also genau anders herum als normal)

Beispiel:
<button note="0x1F" name="PLAY" deck="1" />


Die Namen sollten IMMER als Großbuchstaben gewählt werden und bei gleicher Funktion auf dem Controller für 2 Decks mit dem Parameter 'deck' unterschieden werden.

Beispiel:
<button note="0x1F" name="PLAY" deck="1" /> - für den linken Play Button und
<button note="0x3D" name="PLAY" deck="2" /> - für den rechten Play Button.


Sollte der Taster 'CC' - sogenannte 'Control changes' senden statt 'note-on' und 'note-off' müsst Ihr stattdessen die folgenden Parameter verwenden:
- cc: Der MIDI cc
- value: Der Wert des MIDI cc


Als letzte Möglichkeit gibt es noch Taster die während des drückens kein Signal ausgeben sondern erst nach dem Loslassen der Taste eine Zustandsinformation senden, also in der Art 'ich bin jetzt eingeschaltet', bzw. 'jetzt bin ich aus'. In diesem Fall verwendet bitte das '<toggle>' Element mit den folgenden Parametern:

- note: Die MIDI Note
- inverted: (Optional) Hier könnt Ihr 'true' eintragen wenn Euer Controller ein 'note-off' sendet wenn er aktiviert ist und ein 'note-on' wenn er nicht aktiviert ist.


Fader:

Fader werden durch das '<slider>' element mit den folgenden Parametern definiert:
- cc: Der MIDI cc
- ccmsb: (Optional) the MIDI cc of the MSB (Für 14-bit MIDI)
- min: (Optional) Der Wert der 0% repräsentiert (Standard 0)
- max: (Optional) Der Wert der 100% repräsentiert (Standard 0x7F)
- zero: (Optional) Der Wert der 50% des Sliders repräsentiert (z.B. beim Pitchregler)
- inverted: (Optional) Auf 'true' setzen wenn der Slider auf dem Kopf steht / Seitenverkehrt eingebaut ist.

Beispiel:
<slider cc="0x42" name="VOLUME" /> (denkt bitte daran das '<deck>' Element zu verwenden wenn es zwei Volume Regler (linker und rechter Player) auf dem Controller gibt.)

Wenn der Fader 'MIDI PITCH' Nachrichten schickt benutzt bitte das '<slider>' Element mit folgenden Parametern:
- pitch: Auf "true" setzen
- inverted: (Optional) Wenn der Fader auf dem Kopf steht, bzw. Seitenverkehrt eingebaut ist hier einfach 'true' eintragen.

Beispiel:
<slider pitch="true" channel="1" name="PITCH" deck="1" />

(MSB, und LSB - siehe auch: http://de.wikipedia.org/wiki/Bitwertigkeit)


Jog Wheels:

Jogwheels werden durch das '<jog>' Element mit folgenden Parametern definiert:
- cc: Der MIDI cc
- inverted: (Optional) Auf 'true' setzen wenn das Jog genau falsch herum funktioniert wie es soll
- zero: Setzt den Wert der Null repräsentiert.
Für ein Jog das '0x01' für vorwärts und '0x7F' für rückwärts sendet tragt hier '0' ein (Standard).
Sollte Euer Jog jedoch '0x41' für vorwärts und '0x3F' für rückwärts senden tragt hier bitte '0x40' ein.
- full: Die Anzahl der Schritte für eine volle Umdrehung des Jogs rein (Standard ist hier '128')

Beispiel:
<jog cc="0x24" name="JOGWHEEL" deck="1" full="512" />


Sollte Euer Jogwheel Nachrichten mit Abolutwerten senden könnt Ihr dies mit dem '<fulljog>' Element definieren. Hier werden folgende Parameter genutzt:
- cc: Der MIDI cc
- inverted: (Optional) 'true' eintragen wenn das Jog genau falsch herum funktioniert wie es sollte
- full: Die Anzahl der Schritte für eine volle Umdrehung des Jogs rein (Standard ist hier '128')
- max: (Optional) Der maximale Wert der gesendet wird bevor das Jogwheel wieder mit dem kleinsten Wert anfängt (Umbruchpunkt)
- mask: (Optional) set a bitmask to apply to the cc value (Da fällt mir leider im Moment die passende Übersetzung nicht ein ;-))


Endlos Drehregler:

Wenn der Regler Nachrichten mit Inkrementellen Werten seiner aktuellen Position sendet, also z.B. '+1' oder '-4', wird das '<encoder>' Element mit folgenden Parametern genutzt:
- cc: Der MIDI cc
- inverted: (Optional) Auf 'true' setzen wenn der Regler genau falsch herum funktioniert wie er soll
- zero: Setzt den Wert der Null repräsentiert.
Für ein Jog das '0x01' für vorwärts und '0x7F' für rückwärts sendet tragt hier '0' ein (Standard).
Sollte Euer Jog jedoch '0x41' für vorwärts und '0x3F' für rückwärts senden tragt hier bitte '0x40' ein.
- max: (Optional) Der maximale Wert der gesendet wird bevor der Encoder wieder mit dem kleinsten Wert anfängt (Umbruchpunkt)


Sollte Euer Drehregler Nachrichten mit Abolutwerten senden könnt Ihr dies mit dem '<fullencoder>' Element definieren. Hier werden folgende Parameter genutzt:
- cc: Der MIDI cc
- inverted: (Optional) 'true' eintragen wenn der Regler genau falsch herum funktioniert wie er sollte
- full: Die Anzahl der Schritte für eine volle Umdrehung des Jogs rein (Standard ist hier '128')
- mask: (optional) set a bitmask to apply to the cc value (Da fällt mir leider im Moment die passende Übersetzung nicht ein ;-))


LEDs:

Eine LED wird mit dem '<led>' Element definiert. Hierbei werden folgende Parameter genutzt:
- note: Die MIDI Note
- default: (Optional) Der Name des korespondierenden Taster Elements. Sollte im Mapper KEINE Aktion für die LED definiert werden, wird hier automatisch der Status des Tasters mithilfe der LED angezeigt.

Beispiel:
<led note="0x42" name="LED_PLAY" default="PLAY" />

Achtung: LEDs sollten immer mit der Zeichenfolge 'LED_' im Namen beginnen. Dies erleichtert später das Zuordnen im Mapper.

Sollte die LED einen MIDI cc Befehl erwarten kann dieser im '<led>' Element mit den folgenden Parametern definiert werden:
- cc: Der MIDI cc
- value: Der CC Wert
- ccoff: (Optional) Ein zusätzlicher MIDI cc an den der 'value' ebenfalls gesendet wird um die LED abzuschalten.

Wenn eine LED nur mithilfe von SysEx Befehlen gesteuert werden kann (Hersteller abhängig) schaut bitte weiter unter im Bereich 'Senden von SysEx Befehlen' nach.


Zahlen (auf einem LCD d. Controllers):

Zahlen auf einer LCD Anzeige werden durch das '<digit>' Element mit folgenden Parametern definiert:
- cc: Der MIDI cc
- blank: (Optional) Der Wert der gesendet werden soll um das Display zu löschen.
- ccmsb: (Optional) Der MIDI cc an welchen das MSB gesendet werden soll.
- ccmsb2: (Optional) Der MIDI cc an welchen das MMSB (Wert/(Basis*Basis)) gesendet werden soll.
- base: (Optional) Die Basis mit welcher errechnet wird was das LSB und was das MSB ist (Standard ist hier 100)
- multiply: (Optional) Wenn eine Dezimalzahl gesendet werden soll bitte hier '10' eintragen.
- max: (Optional) Der maximale Wert der gesendet werden kann (Nach der Multiplikation mit dem Parameter 'multiply')
- ccsign: (Optional) Der MIDI cc der das '+' und '-' Zeichen kontrolliert.
- signplus: (Optional) Der Wert der an den 'ccsign' Parameter übergeben werden soll um das '+' Zeichen anzuzeigen,
- signminus: (Optional) der Wert um das '-' Zeichen anzuzeigen.

(MSB, und LSB - siehe auch: http://de.wikipedia.org/wiki/Bitwertigkeit)


Progress bars und VUE Meter:

---------------------------
Progress bars werden durch das '<bar>' Element, mit folgenden Parametern definiert:
- cc: Der MIDI cc
- min: (Optional) Der Wert der 0% repräsentiert (Standard 0)
- max: (Optional) Der Wert der 100% repräsentiert (Standard 0x7F)
- inverted: (Optional) Dreht die Richtung der Anzeige um
- mask: (Optional) mask to apply to the value to send (Da fällt mir leider im Moment die passende Übersetzung nicht ein ;-))
- ccoff: (Optional) MIDI cc an den der Wert gesendet wird bevor er sich ändert.

Alternativ kann ein Progress bar der aus mehreren einzelnen LEDs besteht die alle durch individuelle MIDI Noten angesprochen werden das '<bar>' Element
mit den folgenden Parametern definiert werden:
- note: Die MIDI Note der ersten LED
- nb: Die Anzahl der LEDs (Die Midi Note der letzten LED entspricht dabei dann note+nb-1)
- inverted: (optional) Wenn Ihr hier 'true' eintragt wird der Bar von rechts nach links angezeigt.


Text Displays:

Text Displays können mittels des '<text>' Elements und den folgenden Parametern definiert werden:
- cc: Die MIDI cc für das erste Zeichen auf dem Display
- size: Die Anzahl der möglichen Zeichen
- encoding: (Optional) Die Zeichenkodierung die verwendet werden soll ('urf8', 'iso-8859-1', 'ascii', etc.)
- scroll: Auf 'false' setzen um das Display vor dem Scrollen zu langer Texte zu schützen. (Standard ist 'true')

Sollten die MIDI cc's nicht direkt hintereinander liegen, sondern verschiedene Werte haben kann anstatt des 'cc=' Parameters der folgende genutzt werden:
- ccs: Liste aller MIDI cc's, zum Beispiel 'ccs="010A12"' bedeutet 'CC 0x01' für das erste Zeichen, 'CC 0x0A' für das zweite, und so weiter.

Wenn die Zeichen mittels 14-bit MIDI übermittelt werden kann folgender Parameter anstelle von 'cc=' genutzt werden:
- ccs: Liste aller MIDI cc für das MSB
- ccs_lsb: Liste aller MIDI cc für den LSB Wert

(MSB, und LSB - siehe auch: http://de.wikipedia.org/wiki/Bitwertigkeit)


Senden von SysEx Befehlen

Sollte ein Gerät vor der Verwendung eine entsprechende Initialisierung mittels SysEx Befehlen erwarten (Hersteller abhängig) so kann dies mittels des
'<init>' Elements definiert werden. Es werden folgende Parameter genutzt:
- sendsysex: Die Liste Hexadezimaler Werte die an das Gerät gesendet werden sollen.

Beispiel:
<init sendsysex="F00001020304057F" />

Die <init> Elemente werden in der Reihenfolge in der sie in der XML Datei stehen gesendet.

Wenn das Gerät spezielle SysEx Kommandos beim beenden benötigt, so können diese mittels des '<exit>' Elements mit folgenden Parametern definiert werden:
- sendsysex: Die Liste Hexadezimaler Werte die an das Gerät gesendet werden sollen.

Sollte das Gerät zum ansteuern von LEDs einen SysEx Befehl benötigen kann dies mit dem '<ledsysex>' Element mit folgenden Parametern definiert werden:
- value: Die Liste Hexadezimaler Werte die an das Gerät gesendet werden sollen.

Das '<ledsysex>' Element kann jetzt weitere 'child' Elemente vom Typ '<led>' haben. Hierbei werden folgende Parameter genutzt:
- bit: Die Position des Bit innerhalb des SysEx Befehles welches auf '1' oder '0' gesetzt werden muss um die LED an, bzw. aus zu schalten.
- name, default, deck: Diese Elemente können wie beim normalen '<led>' Element (siehe oben) verwendet werden.


(Übersetzung aus dem Englischen von H. Jakovski)



 

geposted Sat 02 May 09 @ 5:43 am


Controller Definition für HID

Zum Ermitteln der notwendigen Daten am besten mal diese Tool hier downloaden: http://www.virtualdj.com/download/hidtrace.exe.

Die 'Definition' Datei für einen HID Controller ist eine XML Datei und liegt in 'Eigene Dateien/VirtualDJ/Devices/'. Sie hat folgenden Aufbau:

Das 'root' Element der XML Datei muss <device> heissen und hat folgende Werte:

- name: Eindeutiger Name welcher den Controller Identifiziert (Wird auch im Mapper Bereich verwendet).
- author: (Optional) Name des Authoren der XML Definition Datei.
- type: Muss in diesem Fall 'HID' sein.
- decks: Kann entweder "1" oder "2" sein, je nachdem ob der Controller nur für ein Deck oder eben für zwei Decks gleichzeitig ausgelegt ist.
- vid: HerstellerID des Controllers
- pid: ProductID des Controllers
- reportsize: Größe der Report Seite (Standard 32)
- outreportsize: (Optional) Größe der Output Seite (sofern unterschiedlich)

Beispiel:
<?xml version="1.0" encoding="UTF-8"?>
<device name="Mein Controller" author="Ich" type="HID" decks="2" vid="0x1234" pid="0x0100" reportsize="32">
<page type="in">
...
</page>
<page type="out">
...
</page>
</device>

Das '<device>' Element hat verschiedene '<page>' Elemente die folgende Parameter haben können:
- type: Kann eines der folgenden Schlüsselwörter sein "in", "out", "init", "wait" oder "exit"

Beispiel für den Dateinamen einer eigene Definition Datei: 'Herstelle Produkt definition.xml'.


Jeder Taster, Fader, Drehregler, LED, LCD, etc. wird durch ein sogenanntes 'child' Element innerhalb des <device> Elements definiert.
Alle dieser 'child' Elemente (mit Ausnahme von 'constant') können die folgenden Parameter beinhalten:

- name: Der Name des Elements - dieser wird später im Mapper angezeigt
- deck: (Optional) Das Deck (1/2) für welches dieses Element verwendet wird (sofern der Controller zwei Decks unterstützt) - z.B. für die 'PLAY' Taste. Für gleiche Elemente auf den
beiden Decks sollten IMMER die selben Namen verwendet werden, also z.B. für den Play Button 'PLAY' - die Unterscheidung ob linkes oder rechtes Deck erfolgt durch den
'deck' Parameter.

Alle Elemente haben Parameter die ihre Position ind Länge innerhalb des Seiten Reports definieren.
Die Position kann mittels einem der folgenden Parameter definiert werden:

- bit: Übergibt die Position in 'Bits', gezählt ab dem Anfang der Seite.
- byte: Übergibt die Position in 'Bytes', gezählt ab dem Anfang der Seite.
- word: Übergibt die Position in 'Words', gezählt ab dem Anfang der Seite.
- dword: Übergibt die Position in 'DWords', gezählt ab dem Anfang der Seite.

Wenn die Anzahl der 'Bits' die vom Element bearbeitet werden unterschiedlich zu der Größe ist die durch die aufrufende Funktion definiert wurde so kann die Größe durch einen der
folgenden Parameter definiert werden:

- nbbits: (Optional) Anzahl der 'Bits' die verwendet werden sollen.
- size: (Optional) Kann 'bit', 'byte', 'word' oder 'dword' sein.

(Der obige Satz klingt furchtbar kompliziert. Ist aber eigentlich ganz einfach. Wenn ich ein 'Bit' ansprechen will Addressiere ich die Position in 'Bits'. Möchte ich hingegen ein 'Byte'
oder ein 'Word' ansprechen Addressiere ich die Position entsprechend als 'Byte' oder 'Word'.)

Wenn die Größe der zu verwendenden Daten gleich oder größer als ein 'Word' ist kann der folgende Parameter angewendet werden:

- endian: (Optional) Kann 'little' oder 'big' sein (Standard ist 'big')



Eingabe Seite (Pages IN)

Eingabe Seiten 'Pages IN' sind HID Report Seiten die vom Gerät an den HID Port gesendet werden. (Stellt Euch einfach eine A4 Seite mit allen verfügbaren Informationen vor und Ihr müsst jetzt jemandem erklären wo welche Textpassage steht. Ihr würdet bestimmt sowas in der Art sagen wie: 'Schau mal in Zeile 15, Wort 12, Buchstabe 4 bis 6'.)

Manche Geräte verwenden mehr als eine Reportseite um Daten mit dem Computer auszutauschen. Um diese Seiten unterscheiden zu können verwendet Ihr das '<constant>' Element.
Wenn VirtualDJ einen HID Report empfängt verwendet es die erste Seite, das erste '<page>' Element bei dem alle '<constant>' Elemente mit dem Inhalt des Reports übereinstimmen.


Konstanten:

Das '<constant>' Element kann einen der folgenden Parameter besitzen:

- text: Definiert den Inhalt der Konstanten als Text (String).
- buffer: Definiert den Inhalt der Konstanten als Hexadezimalwert (zum Beispiel "010203040A0B0C")
- value: Definiert den Inhalt der Konstanten mit einem festen Wert (z.B. '5')


Taster:

Ein Button wird durch ein '<button>' Element mit den folgenden Parametern definiert:

- value: (Optional) Definiert den Wert welchen das Element haben muss.
- inverted: (Optional) 'true' eintragen wenn das Bit 0 ist wenn der Taster gedrückt wurde und 'value' wenn der Taster losgelassen wurde.

Beispiel:
<button bit="42" name="PLAY" />

Wenn der Taster im Report keinen Wert für betätigt/losgelassen hinterlegt sondern lediglich den Status abbildet mit an/aus kann das '<toggle>' Element mit folgenden Parametern verwendet werden:

- value: (Optional) Definiert den Wert welchen das Element haben muss.
- inverted: (Optional) 'true' eintragen wenn das Bit 0 ist wenn der Taster gedrückt wurde und 'value' wenn der Taster losgelassen wurde.


Fader:

Ein Fader wird durch das '<slider>' Element definiert. Es können folgende Parameter genutzt werden:
- min: Definiert den Wert für 0% (Standard: 0)
- max: Definiert den Wert für 100% (Standard: Der maximalwert wird auf 'nbbits' gesetzt. Siehe bei den allgemeinen Parametern: nbbits: Anzahl der 'Bits' die verwendet werden sollen)
- signed: (Optional) if "true", the value is a signed value (Da fällt mir leider im Moment die passende Übersetzung nicht ein ;-))
- inverted: (Optional) Auf 'true' setzen wenn der Slider auf dem Kopf steht / Seitenverkehrt eingebaut ist.
- vibration: (Optional) Definiert einen Tolleranzwert unter dem Änderungen nicht verarbeitet werden.
- zerorange: (Optional) Wenn der Wert näher als 'zerorange' an 50% ist, wird der Wert auf 50% gesetzt (z.B. für Pitchregler Mittelstellung)

Beispiel:
<slider word="2" endian="little" max="1000" name="VOLUME" />


Jogwheels:

Ein Jogwheel wird durch das '<jog>' Element mit folgenden Parametern definiert:

- full: Die Anzahl der Schritte für eine komplette Umdrehung des Jogs.
- min: (Optional) Definiert den kleinsten Wert.
- max: (Optional) Definiert den größten Wert den das Jog sendet bevor es wieder auf den Kleinsten Wert zurückspringt.
- inverted: (Optional) Auf 'true' setzen wenn das Jog genau falsch herum funktioniert wie es soll.
- vibration: (Optional) Definiert einen Tolleranzwert unter dem Änderungen nicht verarbeitet werden.

Beispiel:
<jog byte="19" size="word" full="300" name="JOGWHEEL" deck="1" />


Endlos Drehregler:

Ein Endlosregler wird durch das '<encoder>' Element definiert. Es können folgende Parameter genutzt werden:

- min: (Optional) Definiert den kleinsten Wert.
- max: (Optional) Definiert den größten Wert den das Jog sendet bevor es wieder auf den Kleinsten Wert zurückspringt.
- inverted: (Optional) Auf 'true' setzen wenn der Drehregler genau falsch herum funktioniert wie er soll.
- vibration: (Optional) Definiert einen Tolleranzwert unter dem Änderungen nicht verarbeitet werden.


Aktionen:

You can put an <action> elements with the usual position, size and name properties.
The mapper for this name will be called every times the report page containing this <action> is received.
(Leider hab ich diesen Part bis jetzt noch nicht komplett verstanden. Deshalb auch noch nicht passend übersetzt.)


Ausgabe Seite (Pages OUT):

Ausgabe Seiten sind HID Report Seiten die von VDJ an den Controller auf dem HID Port gesendet werden.

Wenn die Report Seite spezifische Header Teile benötigt können diese mit dem '<constant>' Element, wie im Bereich 'Eingabe Seiten' beschrieben, definiert werden.

LEDs:

Eine LED wird durch das '<led>' Element mit folgenden Parametern definiert:

- value: (Optional) Der Wert auf den dieses Element gesetzt werden muß damit die LED an geht.
- default: (Optional) Der Name des korespondierenden Taster Elements. Sollte im Mapper KEINE Aktion für die LED definiert werden, wird hier automatisch der Status des Tasters mithilfe der LED angezeigt.

Beispiel:
<led bit="0x42" name="LED_PLAY" default="PLAY" deck="1" />


Zahlen (auf einem LCD d. Controllers)

Zahlen auf einer LCD Anzeige werden durch das '<digit>' Element mit folgenden Parametern definiert:

- enablebit: (Optional) Definiert die Position in Bits vom Seitenanfang für diesen Parameter. Auf '0' gesetzt wenn keine Anzeige erfolgen soll und auf '1' wenn eine Anzeige gemacht wird.
- enablebit2: (Optional) Definiert die Position in Bits vom Seitenanfang für diesen Parameter. Auf '0' gesetzt wenn keine Anzeige erfolgen soll und auf '1' wenn eine Anzeige gemacht wird. (Kann verwendet werden um LCD Symbole zu aktivieren die mit dieser Anzeige im Zusammenhang stehen).
- dotbit: (Optional) Definiert die Position in Bits vom Seitenanfang für diesen Parameter. '1' eintragen wenn der Wert der angezeigt wird KEIN Integer ist. Der Wert wird mit 10 multipliziert bevor er an die Anzeige gesendet wird.
- dotbit2: (Optional) Definiert die Position in Bits vom Seitenanfang für diesen Parameter. '1' eintragen wenn der Wert der angezeigt wird KEIN Integer ist. Der Wert wird mit 100 multipliziert bevor er an die Anzeige gesendet wird.
- plusbit: (Optional) Definiert die Position in Bits vom Seitenanfang für diesen Parameter. '1' eintragen wenn der Wert der angezeigt wird positiv ist.
- minusbit: (Optional) Definiert die Position in Bits vom Seitenanfang für diesen Parameter. '1' eintragen wenn der Wert der angezeigt wird negativ ist.
- min: (Optional) Setzt die Vorgabe für den Minimalwert.
- max: (Optional) Setzt die Vorgabe für den Maximalwert.


Text Displays:

Text Displays können mittels des '<text>' Elements und den folgenden Parametern definiert werden:

- nbchars: Die Anzahl der zu übertragenden Zeichen.
- enablebit: (Optional) Definiert die Position in Bits vom Seitenanfang für diesen Parameter. Auf '0' setzen wenn der Text leer ist, auf '1' wenn ein Text angezeigt werden soll.
- encoding: (Optional) Die Zeichenkodierung die verwendet werden soll ('urf8', 'iso-8859-1', 'ascii', etc.)
- scroll: Auf 'false' setzen um das Display vor dem Scrollen zu langer Texte zu schützen. (Standard ist 'true')


Progress bars und VU Meter:

Progress bars werden durch das '<bar>' Element, mit folgenden Parametern definiert:

- min: (Optional) Der Wert der 0% repräsentiert.
- max: (Optional) Der Wert der 100% repräsentiert.
- enablebit: (Optional) specify the position in bits from the beginning of the page of a bit to set to 0 when the bar is empty and to 1 when it's not.
- enablebit2: (Optional) specify the position in bits from the beginning of the page of another bit to set to 0 when the bar is empty and to 1 when it's not.
- minusbit: (Optional) specify the position in bits from the beginning of the page of a bit to set to 1 when the value is negative and 0 when it's positive.

Alternativ kann ein Progressbar als eine Puffer definiert werden mithilfe des '<bar>' Elements. Folgende Parameter können definiert werden:
- type: Wenn 'bitfill' gesetzt ist wird der Puffer mir 1en gefüllt. Wenn 'bitmove' eingetragen wird wird eine einzelne '1' durch den Puffer geschoben.
- inverted: (optional) Wenn Ihr hier 'true' eintragt wird die Richtung des Puffers umgedreht.


Andere Seiten:

Seiten die mit dem '<init>' Element definiert werden schickt der Mapper an den Controller wenn dieser Initialisiert wird.
Die Seiten werden in der Reihenfolge an das Gerät geschickt in der sie in der XML Datei stehen.

Das '<constant>' Element kann genutzt werden (wie im Bereich 'Eingabe Seite' beschrieben) um die Seite zu füllen.

Wenn die Seite vom Typ 'wait' ist wird das Gerät erst nach Empfang der kompletten Seite / aller Init Seiten starten.

Seiten vom Typ 'exit' werden an das Gerät gesendet wenn das Gerät beendet wird.


(Übersetzung aus dem Englischen von H. Jakovski)

(Anmerkung des Übersetzers: Das Mapping von HID Controllern kann man aufgrund der techn. Funktion von HID schon als etwas kniffligeres Problem darstellen. Also nicht gleich verzweifeln wenn es auf anhieb nicht funktioniert.)



 

geposted Tue 05 May 09 @ 12:32 am


(Alte Themen und Foren werden automatisch geschlossen)