Sign In:     


Forum: Greek Forum

Topic: MAPPING JOG WHEEL
καλησπερα, εχω κατασκευαση ενα midi controler με arduino. το οποιο στο προγραμα traktor δουλευε τελεια. εδω και ενα χρονο που σταματησα να παιζω με το τρακτορ αποφασησα να κανω mapping και το virtual. τα ποιο πολλα τα εχω βρει και δουλευουνε. εκεινο που με δισκολευη εχει 2 μερεσ ειναι τα jog wheels. οτι και να κανω παντα δουλευη το ενα deck..



τα jog wheel ειναι 2 encoder τα οποια στελνουνε το εξεισ midi το αριστερο Ch 1: Controller 14 value 127 οταν περιστρεφετε δεξια και Ch 1: Controller 14 value 1 οταν περιστεφετε αριστερα.

το ιδιο και το δεξια jog wheel Ch 1: Controller 16 value 127 και Ch 1: Controller 16 value 1

βλεπετε οτι στο mapping μου εχει jog14 kai jog 16 αλλα οτι και να αλαξω, π.χ jog14 να ειναι deck 1 αυτοματοσ το jog16 γινεται και αυτο deck 1..
αυτοματοσ βαζει

σαν παρακαλω πωσ μπορω να προγραματισω το virtual dj και να δουλευουνε οταν δεν μπεζει το τραγουδι να κανεισ search μεσα στο τραγουδι για να βαλεισ το cue point.. και οταν παιζει το τραγουδι να κανει pitch bend ωστε να γινει το beat mach...
 

Posted 7 days ago @ 12:37 pm
Βλέπω δεν έχεις φτιάξει definition file.
Οπότε στην περίπτωση αυτή στο πρώτο jog γράψε deck 1 jogwheel και στο δεύτερο deck 2 jogwheel

Ο σωστός τρόπος όμως είναι να φτιάξεις ένα device definition όπου εκεί θα αρίσεις και σε ποιο deck ανοίκει κάθε χειριστήριο/κουμπί.
Έτσι θα κάνεις map τα κουμπιά μόνο μια φορά και χωρίς να γράφεις από μπροστά το deck.

https://www.virtualdj.com/wiki/Controller%20Developers.html
https://www.virtualdj.com/wiki/ControllerDefinitionMIDI
 

δεν ειμαι και ο σπεσιαλ προγραματιστησ... προσπαθω να κανω την δουλεια μου απλα... ελαχιστα πραγματα χρειαζομαι οταν παιζω μουσικη... ειμαι τησ αρχαιασ σχολης..
αλλα εδω φιλε phantomdeejay.. ειναι που χρειαζομαι λιγο τησ γνωσεισ σου, σε αυτου που ειπεσ.
definiton file... γιατι απο οτι διαβασα το virtual dj για να στηλει midi out για να αναψη ενα led πρεπει να εχει definition file.. μπορεισ να με βοηθεισησ να το κανω?

η λυση στο προβλημα μου ειναι (για οσουσ κατασκευασαν δικο τουσ midi controler)
deck 1 param_multiply 10 & jogwheel
και ο λογοσ ειναι οτι σε καθε κλικ του encoder εχω παντα το ιδιο midi message
Ch 1: Controller 14 value 1 η Ch 1: Controller 14 value 127
δεξιοστροφα value 1 αριστερα value 127..

βαζοντασ ( param_multiply 10 ) η οτι θελεισ εκτωσ απο 10. κανεισ το καθε κλικ 1 προσ 10
1 προσ 30.. αν το βαλεισ στα 30



 

Άρχισα και απογοητεύομαι..
Τελικά μάλλον πρέπει να είσαι της NASA για να προγραμματίσεις το virtual dj σε ένα custom made controller…
Ας πούμε ότι βρήκαμε την λύση με ένα definition file.. και ας πούμε ότι κάναμε 10 led να ανάβουνε και να σβήνουνε όταν πατάμε ένα κουμπί…
Εδώ το controller μου έχει 7 led για vu meter στο deck 1 και 7 led vu meter sto deck 2
Προσθετά ότι στο traktos to έχω προγραμματίσει με το πάτημα ενός κουμπιού τα vu meters να αλλάζουνε και από deck 1 και deck 2 volume να γίνονται master output left and right channel...

Σκατα μπλέξαμε… εγώ δηλαδή.
 

Αν μπορείς να προγραμματίσεις τον δικό σου MIDI controller, τότε σίγουρα έχεις το μυαλό και μπορείς να φτιάξεις και ένα definition file.
Όλες οι πληροφορίες που χρειάζεσαι είναι στα δύο link που σου έδωσα πιο πάνω.

Τέλος (επειδή ξέρω) είναι πολύ πιο εύκολο να προγραμματίσεις στο VirtualDJ παρά στο Traktor.
Δηλαδή κάπου ώπα.. Στο Traktor o προγραμματισμός είναι σαν να σκάβεις χωράφι με κασμά (ούτε καν τσάπα).. Και στο VirtualDJ σαν να πήρες JCB. :P

Από εκεί και πέρα:
Γενικά αν θες μια καλή συμβουλή (για το VirtualDJ) μην προγραμματίζεις τίποτα fancy στον ίδιο τον controller. Δεν χρειάζεται. Ότι αλλαγές θες να κάνεις (π.χ. με το πάτημα ενός κουμπιού τα vu meters να αλλάζουνε και από deck 1 και deck 2 volume να γίνονται master output left and right channel) γίνονται πανεύκολα μέσα από τον mapper. Δεν χρειάζεται να κάνει αυτή την αλλαγή ο controller σου.

Οπότε ξεκίνα με το να φτιάξεις ένα απλό definition (κάθε κουμπί μια γραμμή κτλ) και να το παντρέψεις με ένα απλό mapping.
Και στην πορεία οτι βοήθεια χρειαστείς είμαστε εδώ να βοηθήσουμε.

Σημ: Το Jog σε επίπεδο hardware κανονικά πρέπει να στέλνει και τιμές μεγαλύτερες από 1/-1 ανάλογα με την ταχύτητα περιστροφής.
Επίσης αν φτιάξεις definition μπορείς να ορίσεις πόσα βήματα κάνει το jog σου σε μια πλήρη περιστροφή. Με το που θα το κάνεις αυτό θα αρχίσουν αυτόματα να δουλεύουν και οι ρυθμίσεις του προγράμματος σχετικά με την ευαισθησία των jogs που τώρα απλά την παρακάμπτεις τελείως και δεν θα χρειάζεται να πολλαπλασιάζεις το βήμα όπως κάνεις τώρα.
Με την τωρινή λύση, έχεις το πρόβλημα οτι δεν μπορείς να τοποθετήσεις τη βελόνα (θέση αναπαραγωγής) με μεγάλη ακρίβεια γιατί "πηδάς" δέκα δέκα ή 30-30 βήματα τη φορά.
 

θα προσπαθησω και αλλο, ιδει εχω κανει κατι πειραματα για το definition file.. απλ φιλε phantomdeejay σου ξεφυγε μια λεπτομερια... ΔΕΝ ΕΙΜΑΙ Ο ΣΠΕΣΙΑΛ ΠΡΟΓΡΑΜΜΑΤΙΣΤΗΣ.
το controler που κατασκευασα το ποιο ευκολο κοματι ητανε το hardwear ( λογο οτι πριν 30 χρονια) σπουδασα ηλεκτρονικα.. απο προγραματισμο 0...
το προγραμμα για το controler πρεπει να μου εφαγε περιπου 2 μηνεσ. να τ κανω... ρωτοντασ φιλουσ σαν εσενα, διαβαζοντασ κτλ.. αρα ειμαι bigginer σε θεμα προγραματισμου..

εχει απολυτο δικαιο στο θεμα που αναφερεισ οτι το jog πρεπει να στελνει διαφορεσ τιμεσ κτλ..

ρεαλιστικα ομωσ για προσοπικη χρηση μια και κανενα παρτακι μια χαρα δουλευη και ετσι...

τωρα αν μπορεια να βοηθεισησ να γραψω 2 γραμμεσ στο definition φιλε για να γινοθν active ta midi out θα το εκτιμουσα..
γιατι αυτο στο mapping εμβανιζει 3 αδεια κουτια...

<device name="ArduinoController" version="800" type="MIDI">
<manufacturer>Custom</manufacturer>
<vendorid>1234</vendorid>
<productid>5678</productid>
<output available="yes" />


 

<device name="ARDCON" author="Alinatas3" description="My Custom Controller" version="850" type="MIDI" vid="0x4D2" pid="0x162E" decks="2" sides="2" eq="soft"> 
<button note="0x14" channel="0" deck="1" name="LOOP" />
<button note="0x15" channel="0" deck="2" name="LOOP" />
<led note="0x14" channel="0" deck="1" name="LED_LOOP" default="LOOP" />
<led note="0x15" channel="0" deck="2" name="LED_LOOP" default="LOOP" />


<button note="0x01" channel="0" deck="1" name="PLAY" />
<button note="0x01" channel="1" deck="2" name="PLAY" />
<led note="0x01" channel="0" deck="1" name="LED_PLAY" default="PLAY" />
<led note="0x01" channel="0" deck="2" name="LED_PLAY" default="PLAY" />


<jog cc="0x0E" zero="0x00" full="512" channel="0" deck="1" name="JOG" />
<jog cc="0x10" zero="0x00" full="512" channel="0" deck="2" name="JOG" />
</device>


Αυτό νομίζω είναι μια καλή αρχή για να ξεκινήσεις.
Και μην ρωτάς το ChatGPT..
Γιατί ότι έγραψες παραπάνω δεν υπάρχει πουθενά στη φιλοσοφία του VirtualDJ οπότε αποκλείεται να το είδες κάπου γραμμένο.
Επίσης αποκλείεται να κατάλαβες τόοοοοσο λάθος τι λένε οι δύο σελίδες που σου έστειλα.
Αν πάλι κάνω λάθος και δεν ρώτησες το ChatGPT αλλά έφτιαξες "μόνος" σου το "έκτρωμα" από πάνω, ξαναδιάβασε προσεκτικά τις δύο σελίδες που σου έστειλα.
Δεν είναι δύσκολο! :)
 

Βρε σι… είσαι υπάλληλος της virtual dj στο τμήμα προγραμματισμού??? Μην απάντησης γιατί θα σε τρελάνουνε. (το 2000 κάναμε μετατροπές στα DVD για να παίζουνε όλα τα region code, και όχι κλειδωμένα ( για εμάς Κύπρο και Ελλάδα region code 2)
Κάποια μαλακιά έγινε και το DVD ΝΕΚΡΟ,,, το εργοστάσιο απαντά αφού του είπαμε ότι είναι νεκρό….μετράτε εκει ποσά volt μετράτε εδώ εκεί ποσά κτλ.. άμα στείλαμε τις μέτρησης περνούμε απάντηση ποιο εξάρτημα να αλλάξουμε και στη τελευταία γραμμή
DID YOU TRY TO CHANGE THE REGION CODE…
(ρε τους πουστιδες που ξέρουνε τι προσπαθήσαμε να κάνουμε εμείς) αυτό μου θύμησες τώρα ρωτώντας για το chatgpt.
ΠΑΝΟ ΑΠΟ ΟΛΑ ειλικρίνειά ναι ρώτησα το ChatGPT αλλά μετα από μερικές δόκιμες έλεγε παπαριες.. αρα το τι έκανα είναι mix and much λίγο από chatgtp και λιγο από τα links που έδωσες και διαβασα.
Αλλά άμα λέω πρέπει να είσαι της NASA ΧΑΧΑΧΑΧΑΧΑΧΑ..
• vid pid - Detect device by vid/pid. Whenever available, include this, preferred and safer detection for Windows 7 and later E.g. vid="0x06F8" pid="0xB109"
• (λεει το manual)
μα αφού το vid/pid του Arduino einai (USB\VID_2341&PID_0043&REV_0001)
ΑΡΑ VID=0x2341 and PID=0x0043

Ενώ εσύ λες vid="0x4D2" pid="0x162E" γιατί δεν ξέρω…
Έμπαση περίπτωση αυτό δεν δουλεύει.. ούτε το αναγνωρίζει.. ακόμα και αν άλλαξα τα vid/pid…
Θα κάνω και αλλες δόκιμες με διάβαζα και θα επανέλθω.

<device name="ARDCON" author="Alinatas3" description="My Custom Controller" version="850" type="MIDI" vid="0x4D2" pid="0x162E" decks="2" sides="2" eq="soft">
<button note="0x14" channel="0" deck="1" name="LOOP" />
<button note="0x15" channel="0" deck="2" name="LOOP" />
<led note="0x14" channel="0" deck="1" name="LED_LOOP" default="LOOP" />
<led note="0x15" channel="0" deck="2" name="LED_LOOP" default="LOOP" />


<button note="0x01" channel="0" deck="1" name="PLAY" />
<button note="0x01" channel="1" deck="2" name="PLAY" />
<led note="0x01" channel="0" deck="1" name="LED_PLAY" default="PLAY" />
<led note="0x01" channel="0" deck="2" name="LED_PLAY" default="PLAY" />


<jog cc="0x0E" zero="0x00" full="512" channel="0" deck="1" name="JOG" />
<jog cc="0x10" zero="0x00" full="512" channel="0" deck="2" name="JOG" />
</device>
 

Στο "άκυρο" παράδειγμα σου έγραψες
<vendorid>1234</vendorid>
<productid>5678</productid>

Πήρα λοιπόν αυτά τα δύο νούμερα και στα έδωσα όπως πρέπει να μπούνε σωστά.
Που δεν είναι τίποτα άλλο παρά η μετατροπή από το δεκαδικό σύστημα σε δεκαεξαδικό HEX

Αφού τα VID και PID του Arduino είναι αυτά που λες, τότε πρέπει παίξει με αυτά
<device name="ARDCON" author="Alinatas3" description="My Custom Controller" version="850" type="MIDI" vid="0x2341" pid="0x0043" decks="2" sides="2" eq="soft">

Γενικά να ξέρεις:
Όπου βλέπεις 0x πριν από αριθμό, αυτός ο αριθμός είναι σε δεκαεξαδικό σύστημα.
Και το αντίστροφο, στο VirtualDJ όπου θες να δηλώσεις οτι ένας αριθμός είναι δεκαεξαδικός γράφεις μπροστά 0x
Τα VID και PID όπως φαίνονται στον device manager είναι δεκαεξαδικοί αριθμοί.
Γι αυτό και στο definition πρέπει να γράψεις vid="0x2341"
Αν γράψεις vid="2341" τότε υπονοείς οτι το 2341 είναι δεκαδικός αριθμός, και φυσικά δεν ταιριάζει με το 0x2341 του Arduino.
Και για την ιστορία, 0x2341 (HEX) είναι ίσο με 9025 (DEC)
Ιστοσελίδες που να μετατρέπουν αριθμούς από HEX σε DEC και το αντίστροφο θα βρεις άπειρες.
Αλλά την ίδια δουλειά μπορείς να την κάνεις και με την αριθμομηχανή των Windows.
Την γυρίζεις σε προβολή προγραμματιστή, επιλέγεις σε ποιο σύστημα γράφεις, και πληκτρολογώντας ένα αριθμό, σου δίνει όλες τις μετατροπές σε Binary, Octa, Dec και Hex.
 

Μια κρίσιμη πληροφορία που δεν ανέφερα είναι ότι το Arduino uno που χρησιμοποιώ δεν είναι midiusb αλλα για να δουλέψει περνα μέσα από LOOPMIDI και hairless…
 

Φιλέ phantomdeejay μετα που έφαγα σήμερα όλοι την μέρα και έκανα μια τρυπά στο νερό.
Φαίνεται ότι κάποιο άλλο τρικ πρέπει να έχει για να δούλεψη το ρημάδι.

Ότι και να δοκίμασα, όπως τα είπες και αλλά πολλά κατι δεν κάνω καλά και μπερδεύτε και
Δεν δουλευθεί.

Οπός είπα και ξέχασα να αναφέρω το Arduino uno δεν είναι midiusb.
Αρά το virual dj φαίνεται το ότι αναγνωρίζει το Arduino σαν ένα generic midi

Το αρχειο στο mapping folder έχει όνομα SIMPLE_MIDI_0_0 – custom mapping.xml
Μεσα στο αρχειο βαζει αυτά…

<?xml version="1.0" encoding="UTF-8"?>
<mapper device="SIMPLE_MIDI_0_0" version="850" date="2025-04-18">
<map value="0-BUTTON72" action="deck left play_button" />
<map value="0-BUTTON73" action="deck left play_cue_button" />
</mapper>

Βλέποντας την φωτογραφία φαίνεται ότι το virual dj καταλαβαίνει ότι υπαρχή consol in kai consol out.. λογο του (LOOPMIDI )αλλά λόγο του ότι θέλει definition file για να γίνει active TO OUT μόνο το consol in δουλειά. το καταλαμβαιινω

Τώρα γιατί αναγνωρίζει το play button σαν 0-BUTTON72 και το cue σαν 0-BUTTON73 δεν ξέρω…
Εκείνο που ξέρω είναι ότι η κονσολιτσα μου στο το play button στέλνει Ch 1: Note 72 on velocity 127
Και στο cue Ch 1: Note 73 on velocity 127
Το led για το play ανάβει όταν πάρει Ch 2: Note 38 on velocity 127
Το led για το cue ανάβει όταν πάρει Ch 2: Note 39 on velocity 127

Σιγουρά από ότι καταλαβαίνω θα πρέπει να δηλώσω στο κάθε κουμπί τα mid notes που πρέπει να στέλνει το virtual για να ανάβει τα leds p.x

deck left cue_play & deck left cue ? midi_output 1 38 127 : midi_output 1 38 0
OUTPUT 1 ΓΙΑΤΙ ΤΟ VIRTUAL ΞΕΚΕΙΝΑ ΑΠΟ ΤΟ 0 ΑΡΑ ΤΟ 1 ΕΙΝΑΙ ΤΟ CHANNEL 2

Σε θερμοπαρακαλω
Κανε μου ένα definition file .. να δουλεψη εχω απηυδησει...

 

alinatas3 wrote :
Μια κρίσιμη πληροφορία που δεν ανέφερα είναι ότι το Arduino uno που χρησιμοποιώ δεν είναι midiusb αλλα για να δουλέψει περνα μέσα από LOOPMIDI και hairless…


Αυτό είναι όπως είπες: ΚΡΙΣΙΜΟ
Γιατί έτσι το VirtualDJ δεν μπορεί να δει το VID και το PID του Arduino.
Οπότε το definition file θα πρέπει να βασιστεί σε κάτι άλλο (π.χ. το MIDI name) για να αναγνωρίσει την συσκευή.

Definition file σου έδωσα ήδη πιο πάνω.
Χρειάζεται μόνο να το προσαρμόσεις στα δεδομένα σου.
Λογικά το παραπάνω definition θα παίξει αν βγάλεις τα VID/PID και στη θέση τους βάλεις απλά drivername="LoopMIDI Port"

<device name="ARDCON" author="Alinatas3" description="My Custom Controller" version="850" type="MIDI" drivername="LoopMIDI Port" decks="2" sides="2" eq="soft">
<button note="0x48" channel="0" deck="1" name="PLAY" />
<button note="0x49" channel="0" deck="1" name="CUE" />

<led note="0x26" channel="1" deck="1" name="LED_PLAY" default="PLAY" />
<led note="0x27" channel="1" deck="1" name="LED_CUE" default="CUE" />
</device>


Αυτό είναι ένα πλήρες definition με βάση αυτό:
Quote :
Εκείνο που ξέρω είναι ότι η κονσολιτσα μου στο το play button στέλνει Ch 1: Note 72 on velocity 127
Και στο cue Ch 1: Note 73 on velocity 127
Το led για το play ανάβει όταν πάρει Ch 2: Note 38 on velocity 127
Το led για το cue ανάβει όταν πάρει Ch 2: Note 39 on velocity 127
 

νομιζω οτι φτανουμε... αν και δεν δουλευουν τα led.. τα κουμπια απο το controller δουλευουν...
παω για δουλεια στο club... αυριο παλι με αλλα πειραματα.. ΚΑΛΟ ΠΑΣΧΑ ΝΑ ΕΧΕΙΣ ΑΝ ΔΕΝ ΤΑ ΠΟΥΜΕ...
ΣΕ ΕΥΧΑΡΙΣΤΩ..


 

Καλό Πάσχα σε όλους… και ειδικά σε εσένα φιλέ phantomdeejay
Μετα την πολύτιμη βοήθεια σου τα ποιο πολλά LED που έχω και χρειάζονται τα έκανα και δουλεύουνε.

Τώρα φτάσαμε στο ποιο δύσκολο για εμένα το vu meter και το master meter.
TA LED για το vu meter που εχω είναι 7 για το deck 1 και 7 για το deck 2
Το deck 1 για να αναψουνε τα led θελουνε
Ch1 cc20 value 0 δεν αναβη κανενα
Ch1 cc20 value 1 αναβη το ένα
Ch1 cc20 value 2 αναβη το δευτερο
Ch1 cc20 value 7 αναβη το εβδομο

Αρα για deck 1 cc 20 και για deck 2 cc21

Για το master volume τα led ανάβουνε
στο cc 22 και cc23
το Arduino παίρνει και τα αυτά μαζί με τα ποιο πανό, απλά τα αγνοα, πρέπει να πατήσω ένα κουμπί, ώστε να αγνοα τα cc20 cc21 και να δέχεται τα cc22 cc23

<led cc="0x14" zero="0x00" min="0x01" max="0x07" name="LED_VU METER" channel="0" deck="1" />
Αυτό είναι μια καλή αρχή νομίζω αλλά ανάβουνε διαφορά και τα συγκεκριμένα 7 led βλέπω ότι ανάβουνε μόνο στο peek.
Επίσης μέσα στο virtual στο mapping τι επιλέγουμε.
get_vu_meter_deck1 ??????
Σπρώξε ακόμα λίγο και τέλειωσε..