快速登录:  

Forum: Greek Forum

话题: ΚΩΔΙΚΑΣ "ΑΥΤΟΜΑΤΙΣΜΩΝ" - Page: 1
Θέτω τον κάτωθι κώδικα σε 'Custom Button':

load & has_cue 2 ? goto_cue 2 : goto_cue 1 & loop 4 & play
αλλά αρνείται πεισματικά να λειτουργήσει... Τί κάνω λάθος?

Εάν θέσω τον κώδικα ως ακολούθως:

load & goto_cue 2 & loop 4 & play
τότε λειτουργεί κανονικά...
 

发表时间 Mon 02 Jan 23 @ 6:15 pm
Το έχουμε πει πολλές φορές οτι οι ενέργειες που αφορούν το load καθώς και το handling του browser θέλoυν ένα μικρό delay την επόμενη ενέργεια σε περίπτωση αλυσιδωτών ενεργειών.

load & wait 500ms & has_cue 2 ? goto_cue 2 : goto_cue 1 & loop 4 & play


Αν και νομίζω οτι στην πραγματικότητα ήθελες αυτόν τον κώδικα:
load & wait 500ms & (has_cue 2 ? goto_cue 2 : goto_cue 1) & loop 4 & play
 

发表时间 Tue 03 Jan 23 @ 8:12 am
Γιώργη σε ευχαριστώ! Οπότε ο κώδικάς διαμορφώνεται πλέον ως εξής:

A. Για loop "front":

is_audible ? nothing : load & wait 500ms & (has_cue 2 ? goto_cue 2 : goto_cue 1) & loop_back off & loop 4 & sync

B. Για loop "back":

is_audible ? nothing : load & wait 500ms & (has_cue 2 ? goto_cue 2 : goto_cue 1) & loop_back on & loop 4 & sync

Δεν ξέρω εάν η σύνταξη είναι σωστή, αλλά το αποτέλεσμα είναι το ζητούμενο. Το μόνο "πρόβλημα" είναι ότι εφόσον ολοκληρωθεί η Α' ενέργεια, εάν στο ίδιο deck, το ίδιο κομμάτι επιθυμώ να το κάνω πάλι loading με την Β' ενέργεια, δεν λειτουργεί ορθά.

Στο πρώτο πάτημα του custom button B αλλάζει το loop σε back, αλλά δεν εφαρμόζει το 'loop 4'. θα πρέπει να πατήσω ξανά το custom button B για να ολοκληρώσει την ενέργεια σωστά.

Το ίδιο "πρόβλημα" δημιουργείται και αντίστροφα. Τί κάνω λάθος?
 

发表时间 Tue 03 Jan 23 @ 9:17 pm
Το λάθος σου είναι σε δύο πιθανά σημεία:
1) Το loop 4 μπορεί να χρησιμοποιηθεί τόσο για να ενεργοποιήσει την loop όσο και για να την απενεργοποιήσει. Οπότε στην ουσία αν πατήσεις πρώτα το κουμπί Α ορίζεις μια loop (4ων beat) και στην συνέχεια πατώντας το κουμπί B την αφαιρείς (αφού είναι ήδη ενεργοποιημένη)

Μααα... θα σε ακούσω να λες. Αφού φορτώνω ξάνα το κομμάτι, δεν έχει loop!
Και αυτό είναι το δεύτερο πιθανό λάθος σου:
2) Όταν ένα κομμάτι είναι ήδη φορτωμένο σε ένα deck η εντολή load δεν το φορτώνει ξανά. Απλά η εντολή δεν κάνει τίποτα!

Οπότε στα γρήγορα ένας τρόπος να διορθώσεις τον κώδικα σου είναι αυτός:
is_audible ? nothing : load & wait 500ms & (has_cue 2 ? goto_cue 2 : goto_cue 1) & loop_exit & loop_back off & loop 4 & sync

is_audible ? nothing : load & wait 500ms & (has_cue 2 ? goto_cue 2 : goto_cue 1) & loop_exit & loop_back on & loop 4 & sync
 

发表时间 Wed 04 Jan 23 @ 1:53 am
Ευχαριστώ πολύ και πάλι... Κάτι άλλο τώρα...

Πως μπορούμε να επιτύχουμε αυτόματο συγχρονισμό (sync) κομματιών, με βάση το μεγαλύτερο Bpm?

Παράδειγμα:

Έστω στο Deck 1 κομμάτι με 120 Bpm (real time, όχι 'absolute'). Load στο Deck 2 κομμάτι με 119 Bpm ('absolute'). Συγχρονισμός των 2 κομματιών στα 120 Bpm. Άρα θα συγχρονίσει το Deck 2.
Ή
Έστω στο Deck 1 κομμάτι με 120 Bpm (real time, όχι 'absolute'). Load στο Deck 2 κομμάτι με 122 Bpm ('absolute'). Συγχρονισμός των 2 κομματιών στα 122 Bpm. Άρα θα συγχρονίσει το Deck 1 (κοινώς αυτό που είναι ήδη "στον αέρα").

Ο κώδικας, θεωρητικά, δεν είναι δύσκολος, εάν τον έχω σκεφτεί σωστά. Πρακτικά, όμως, μου λείπει ο ορισμός που έχω με ΚΕΦΑΛΑΙΑ στο κάτωθι παράδειγμα:

param_smaller 'get_loaded_bpm' ? sync 8bt : sync 8bt PLAYING_SONG


Σημείωση: Το sync 8bt το έχω προσθέσει για ομαλή αλλαγή Bpm. Δεν ξέρω εάν υλοποιείται. Εάν όχι, υπάρχει άλλος τρόπος για αυτό το σκοπό?

Εν κατακλείδι, εάν είναι λάθος εξολοκλήρου η σκέψη, μπορούμε να επιτύχουμε αυτόματο συγχρονισμό (sync) κομματιών, με βάση το μεγαλύτερο Bpm? Και εάν ναι, πώς?
 

发表时间 Wed 04 Jan 23 @ 9:05 pm
Αρχίζουμε και πλέουμε σε περίεργα νερά καπετάνιε.. :P
Να ρωτήσω που/πως θα χρησιμοποιηθεί αυτός ο κώδικας; Και για πόσα deck θα πρέπει να δουλεύει;
Γιατί όπως είπα, είναι περίεργα νερά αυτά..
 

发表时间 Thu 05 Jan 23 @ 8:12 am
djdadPRO InfinityDevelopment ManagerMember since 2005
Εγώ πάλι δεν έχω καταλάβει αυτό με τον συγχρονισμό των 2 Decks .. Ψάχνεις κάτι σαν κι αυτό ? https://youtu.be/Xg-zytTkl-U?t=871
Aν ναι περίμενε την επόμενη Early Access
 

发表时间 Thu 05 Jan 23 @ 6:07 pm
Η ιδέα για το συγκεκριμένο νήμα προήλθε από κάποια videos, όπου κάποιοι "γνωστοί" Djs έκαναν "ταχυδακτυλουργικά" με τα τριχίλιαρα (CDJ-3000) και κατόπιν αντιδρούσαν λες και είχαν πιάσει τον ποπό της πεταλούδας.
Οπότε είπα κι εγώ να "mapάρω" μερικά pads (σχετικό νήμα εδώ: https://www.virtualdj.com/forums/248647/Greek_Forum/______________________________pads___.html) με αυτοματοποιημένα "ταχυδακτυλουργικά", ώστε εγώ να πιάνω 2 και 3 ποπούς ταυτόχρονα και μόλις με ένα button press...

Όσον αφορά στο συγκεκριμένο "want to" το είχα στο μυαλό μου από καιρό. Φυσικά και δεν είναι κάτι το "ταχυδακτυλουργικό", αλλά, εάν ενταχθεί στον άνωθεν αυτοματισμό, θα εξυπηρετήσει αφάνταστα στιγμές απόλυτης βαρεμάρας ή στιγμές με όριο αλκοόλ στο αίμα άνω του 1mg/lt... :P

Οπότε, συνοψίζοντας και πέρα από την πλάκα, το σκεπτικό είναι:

- Load το επόμενο επιλεγμένο κομμάτι (ανεξαρτήτου deck)
- Μεταβίβαση στο HotCue 2 (ή στο HotCue 1, εάν δεν έχει 2)
- Ενεργοποίηση Loop 4 (είτε front, είτε back, αναλόγως την περίπτωση)
- Συγχρονισμός των δύο κομματιών (σε ορισμένη διάρκεια) με βάση το μέγιστο (εκ των 2) bpm.

Με άλλα λόγια, 4 "κλασσικές" κινήσεις σε ένα button.
 

发表时间 Thu 05 Jan 23 @ 7:38 pm
djdad wrote :
Εγώ πάλι δεν έχω καταλάβει αυτό με τον συγχρονισμό των 2 Decks .. Ψάχνεις κάτι σαν κι αυτό ? https://youtu.be/Xg-zytTkl-U?t=871 Aν ναι περίμενε την επόμενη Early Access
Μπάμπη, δεν είχα δει το συγκεκριμένο video, θα το μελετήσω και θα σου πω.

Στην πράξη, επιλέγει ο χρήστης πιο deck θέλει να συγχρονίσει με το άλλο, αναλόγως του ποιο sync (leftdeck ή rightdeck) θα πατήσει.

Στον κώδικα θα πρέπει να γίνεται μία σύγκριση των bpm του leftdeck και του rightdeck και να "ενεργοποιείται" (τρόπον τινά) το sync του deck που υστερεί σε bpm...
 

发表时间 Thu 05 Jan 23 @ 8:20 pm
PANOSVPRO InfinityMember since 2007
πωπωπω...αληθεια τωρα παιζει να θυμασαι τι ακριβως κανει το καθε κουμπι????
 

发表时间 Sun 08 Jan 23 @ 10:52 pm
Πάνο, όταν κάθεσαι και πειραματίζεσαι με τις ώρες, πατώντας τα κουμπιά δεκάδες ή και εκατοντάδες φορές, πίστεψέ με, ναι, τα θυμάσαι... ;-)

Γιώργο, δες λίγο αυτό:

settings 'fxProcessing' Post-fader & effect_slider echo 1 80% & effect_slider echo 2 70% & effect_active echo & wait 1bt & pause & wait 12000ms & effect_active echo & effect_slider_reset

Το ερώτημά μου είναι, εάν το fxProcessing είναι επιλεγμένο ως Pre-fader, μετά την εκτέλεση της εντολής το "γυρίζει" πάλι σε Pre-fader ή όχι (οπότε και πρέπει να το ορίσω στον κώδικα)?
 

发表时间 Tue 10 Jan 23 @ 6:30 pm
Όχι, δεν είναι toggle
 

发表时间 Tue 10 Jan 23 @ 11:40 pm
Κάνοντας χρήση του 'pitch_reset' με ταυτόχρονη τιμή μικρότερη του 1%, μπορώ να επιτύχω το reset του pitch σε πιο αργούς ρυθμούς.

Υπάρχει κάποιος τρόπος να επιτύχω το ίδιο με το sync? Δηλαδή, ενεργοποιώντας το sync, η μεταβολή των bpm να γίνεται "αργά" και όχι άμεσα?
 

发表时间 Sun 22 Jan 23 @ 10:42 am
Γιώργο, κάποια ιδέα?
 

发表时间 Wed 15 Feb 23 @ 9:08 am
Ξεκίνα με βάση αυτό (κώδικας από το GTS-2K21 skin)
<item text="Smooth BPM Match ™" action="action_deck 1 ? deck 1 repeat_start_instant 'SmoothSync' ? deck 1 repeat_stop 'SmoothSync' : deck 1 repeat_start_instant 'SmoothSync' 100ms & deck 1 masterdeck ? set 'BPMDif' `param_add &quot;deck 1 get_bpm&quot; &quot;deck 2 get_bpm & param_multiply -1&quot;` & var_smaller 'BPMDif' -3 ? pitch +0.04 bpm : var_smaller 'BPMDif' -0.1 ? pitch +0.02 bpm : var_greater 'BPMDif' 3 ? pitch -0.04 bpm : var_greater 'BPMDif' 0.1 ? pitch -0.02 bpm : deck 1 repeat_stop 'SmoothSync' &  deck 2 match_bpm : set 'BPMDif' `param_add &quot;deck master get_bpm & param_multiply -1&quot; &quot;get_bpm&quot;` & var_smaller 'BPMDif' -3 ? pitch +0.04 bpm : var_smaller 'BPMDif' -0.1 ? pitch +0.02 bpm : var_greater 'BPMDif' 3 ? pitch -0.04 bpm : var_greater 'BPMDif' 0.1 ? pitch -0.02 bpm : deck 1 repeat_stop 'SmoothSync' & match_bpm : action_deck 2 ? deck 2 repeat_start_instant 'SmoothSync' ? deck 2 repeat_stop 'SmoothSync' : deck 2 repeat_start_instant 'SmoothSync' 100ms & deck 2 masterdeck ? set 'BPMDif' `param_add &quot;deck 2 get_bpm&quot; &quot;deck 1 get_bpm & param_multiply -1&quot;` & var_smaller 'BPMDif' -3 ? pitch +0.04 bpm : var_smaller 'BPMDif' -0.1 ? pitch +0.02 bpm : var_greater 'BPMDif' 3 ? pitch -0.04 bpm : var_greater 'BPMDif' 0.1 ? pitch -0.02 bpm : deck 2 repeat_stop 'SmoothSync' & deck 1 match_bpm : set 'BPMDif' `param_add &quot;deck master get_bpm & param_multiply -1&quot; &quot;get_bpm&quot;` & var_smaller 'BPMDif' -3 ? pitch +0.04 bpm : var_smaller 'BPMDif' -0.1 ? pitch +0.02 bpm : var_greater 'BPMDif' 3 ? pitch -0.04 bpm : var_greater 'BPMDif' 0.1 ? pitch -0.02 bpm : deck 2 repeat_stop 'SmoothSync' & match_bpm : action_deck 3 ? deck 3 repeat_start_instant 'SmoothSync' ? deck 3 repeat_stop 'SmoothSync' : deck 3 repeat_start_instant 'SmoothSync' 100ms & deck 3 masterdeck ? set 'BPMDif' `param_add &quot;deck 3 get_bpm&quot; &quot;deck default get_bpm & param_multiply -1&quot;` & var_smaller 'BPMDif' -3 ? pitch +0.04 bpm : var_smaller 'BPMDif' -0.1 ? pitch +0.02 bpm : var_greater 'BPMDif' 3 ? pitch -0.04 bpm : var_greater 'BPMDif' 0.1 ? pitch -0.02 bpm : deck 3 repeat_stop 'SmoothSync' & deck default match_bpm : set 'BPMDif' `param_add &quot;deck master get_bpm & param_multiply -1&quot; &quot;get_bpm&quot;` & var_smaller 'BPMDif' -3 ? pitch +0.04 bpm : var_smaller 'BPMDif' -0.1 ? pitch +0.02 bpm : var_greater 'BPMDif' 3 ? pitch -0.04 bpm : var_greater 'BPMDif' 0.1 ? pitch -0.02 bpm : deck 3 repeat_stop 'SmoothSync' & match_bpm : action_deck 4 ? deck 4 repeat_start_instant 'SmoothSync' ? deck 4 repeat_stop 'SmoothSync' : deck 4 repeat_start_instant 'SmoothSync' 100ms & deck 4 masterdeck ? set 'BPMDif' `param_add &quot;deck 4 get_bpm&quot; &quot;deck default get_bpm & param_multiply -1&quot;` & var_smaller 'BPMDif' -3 ? pitch +0.04 bpm : var_smaller 'BPMDif' -0.1 ? pitch +0.02 bpm : var_greater 'BPMDif' 3 ? pitch -0.04 bpm : var_greater 'BPMDif' 0.1 ? pitch -0.02 bpm : deck 4 repeat_stop 'SmoothSync' & deck default match_bpm : set 'BPMDif' `param_add &quot;deck master get_bpm & param_multiply -1&quot; &quot;get_bpm&quot;` & var_smaller 'BPMDif' -3 ? pitch +0.04 bpm : var_smaller 'BPMDif' -0.1 ? pitch +0.02 bpm : var_greater 'BPMDif' 3 ? pitch -0.04 bpm : var_greater 'BPMDif' 0.1 ? pitch -0.02 bpm : deck 4 repeat_stop 'SmoothSync' & match_bpm : nothing" check="repeat_start 'SmoothSync'"/>


action_deck 1 ? deck 1 repeat_start_instant 'SmoothSync' ? deck 1 repeat_stop 'SmoothSync' : 
deck 1 repeat_start_instant 'SmoothSync' 100ms & deck 1 masterdeck ? set 'BPMDif' `param_add "deck 1 get_bpm" "deck 2 get_bpm & param_multiply -1"` & var_smaller 'BPMDif' -3 ? pitch +0.04 bpm : var_smaller 'BPMDif' -0.1 ? pitch +0.02 bpm : var_greater 'BPMDif' 3 ? pitch -0.04 bpm : var_greater 'BPMDif' 0.1 ? pitch -0.02 bpm : deck 1 repeat_stop 'SmoothSync' & deck 2 match_bpm : set 'BPMDif' `param_add "deck master get_bpm & param_multiply -1" "get_bpm"` & var_smaller 'BPMDif' -3 ? pitch +0.04 bpm : var_smaller 'BPMDif' -0.1 ? pitch +0.02 bpm : var_greater 'BPMDif' 3 ? pitch -0.04 bpm : var_greater 'BPMDif' 0.1 ? pitch -0.02 bpm : deck 1 repeat_stop 'SmoothSync' & match_bpm :

action_deck 2 ? ...

Βασικά ο κώδικας ελέγχει πρώτα την διαφορά σε BPM και μετά αποφασίζει την ταχύτητα.
Φυσικά και δέχεται απλοποίηση..
 

发表时间 Wed 15 Feb 23 @ 9:46 am
Πάρα πολλή καλή και έξυπνη επινόηση... Βασικά, αυτό που θα ήθελα - με εξυπηρετούσε εμένα, ήταν κάτι πιο απλό:

Έστω ότι στο Deck 1 παίζει ένα κομμάτι με π.χ. 120bpm. Έστω ότι στο Deck 2 έχω ένα κομμάτι με π.χ. 90bpm. Κάνοντας το ανάλογο mapping σε κάποιο button (π.χ. Shift+Sync), το κομμάτι στο Deck 1 αρχίζει και μειώνει bpm μέχρι να φτάσει τα 90bpm και κατόπιν να μιξαριστεί (χειροκίνητα) με το κομμάτι στο Deck 2.

Με άλλα λόγια κάτι σαν το BrakeStart fx, με τις βασικές διαφορές ότι:

1. Το κομμάτι στο Deck που συγχρονίζεται θα συνεχίσει να παίζει.

2. Ιδεατά, ο χρόνος συγχρονισμού να "μετριέται" (στον κώδικα) σε beats , ώστε να μπορώ να ορίσω η αύξηση/μείωση των bpm να γίνεται εντός π.χ. 8 beats.

Λοιπόν? Καμιά ιδέα?
 

发表时间 Wed 15 Feb 23 @ 9:01 pm
Ο κώδικας παραπάνω κάνει αυτά που ζητάς. Τον δοκίμασες;
Το μόνο που δεν κάνει είναι να του πεις σε πόσα beats να φτάσει το επόμενο κομμάτι.
Και ο λόγος που ελέγχει την διαφορά σε BPM πριν κάνει οτιδήποτε είναι ακριβώς αυτός:
Αν η διαφορά είναι πολύ μεγάλη να κάνει πιο γρήγορη μετάβαση ώστε να "προλάβει" να φέρει τα BPM σωστά εντός εύλογου χρόνου (απλά δεν μετράει σε beats)

Ένας άλλος τρόπος είναι αυτός:
match_bpm & pitch_lock on & pitch_reset 0.2% & repeat_start 'TOffPL' 10ms & pitch_reset ? nothing : pitch_lock off & repeat_stop 'TOffPL'

Αυτόν τον κώδικα τον τρέχεις στο κομμάτι που είναι "stand-by" για να φέρει το κομμάτι που είναι στον αέρα στα ίδια BPM.

Υ.Γ.: Πρόσεξε, παντού σε αυτούς τους αυτοματισμούς χρησιμοποιώ match_bpm αντί για sync. Αυτό γιατί η εντολή match_bpm δεν επιρρεάζει το phase ;)
 

发表时间 Thu 16 Feb 23 @ 9:11 am
Δεν το δοκίμασα, τον μελέτησα, όμως... Και δεν το δοκίμασα, διότι στο γραφείο (που έχω το χρόνο και την ηρεμία), δεν έχω controller (ώστε να κάνω απ' ευθείας αντιστοίχιση και να μην "πειράζω" το skin... :-)

Θα τον δοκιμάσω, όμως και θα σου πω... Πάραυτα, 3 παρατηρήσεις - ερωτήσεις:

1. Δεν (με) εξυπηρετεί ο συγχρονισμός σε "ms". Θεωρώ ότι σε 4 ή 8 beats είναι η ιδεατή περίπτωση matching (από πολλές απόψεις). Αυτό, γίνεται?

2. Δεν (με) εξυπηρετεί η επιλογή ενός button π.χ. στο Deck Left Area, για το action στο Deck Right. Θεωρώ ότι η χρήση του Shift+Sync στο αντίστοιχο Deck, είναι ιδεατή. Αυτό, γίνεται?

3. Γενικότερα, το 'wait xbt' μπορεί να προστεθεί σε οποιοδήποτε (σχετικό) action?
 

发表时间 Thu 16 Feb 23 @ 10:59 am
1) 'Οχι. Και επίσης ο συγχρονισμός/μηδενισμός δεν γίνεται ούτε αυτός συγχρονισμένα σε Χ συνολικά ms. Το "βήμα" είναι σε ms. Για να "κάνει sync" διαφορά 2 BPM θα του πάρει π.χ. 2 δευτερόλεπτα, για να "κάνει sync" διαφορά 4ων BPM θα του πάρει 4. Ο συνολικός χρόνος κάθε φορά είναι διαφορετικός. Το rate είναι το ίδιο.

2) Προφανώς δεν κατάλαβες σωστά πως λειτουργούν τα actions. Ειδικά το δεύτερο. ΔΕΝ το τρέχεις στο "ανάποδο" deck. Οπότε δεν χρειάζεται να βάλεις την ενέργεια του deck 1 στην περιοχή του deck 2

3) Ναι

4) Υπάρχουν και τα custom buttons αντί για τον controller που μπορείς να κάνεις δοκιμές. Για την ακρίβεια, προσωπικά πάντα σετάρω οτι θέλω σε custom buttons και αφού το φτιάξω όπως θέλω τότε κάνω copy τον κώδικα στον mapper του controller.
 

发表时间 Thu 16 Feb 23 @ 5:44 pm
Στα έχω κάνει "τσουρέκια", το ξέρω, αλλά θέλω να κατανοήσω λίγο καλύτερα το σκεπτικό. Οπότε και γράφω τι έχω κατανοήσει έως τώρα και με διορθώνεις, όπου απαιτείται...

Κατ' αρχήν δεν υφίσταται κάποιο script, τύπου 'sync & wait 4bt' ή 'match_bpm & wait 4bt' για να ξεμπερδεύουμε άμεσα. Σωστά?

Οπότε η σκέψη (αναγκαστικά?) είναι να επιτύχουμε το "matching" μέσω του pitch, όταν αυτό θα έχει μετακινηθεί τόσο, ώστε κατά το get_bpm του ενός deck η τιμή θα είναι equal με την τιμή get_bpm του άλλου deck. Σωστά?

Οπότε και σε αυτή την περίπτωση ορίζουμε πόσα ms θα είναι το κάθε "βήμα" που θα κάνει το pitch, μέχρι να επιτευχθεί ο συγχρονισμός.

Και επειδή, άλλο πραγματικό χρόνο θα κάνει για να πραγματοποιήσει matching διαφοράς π.χ. 5 bpm και άλλο πραγματικό χρόνο θα κάνει για να πραγματοποιήσει matching διαφοράς π.χ. 30 bpm, μπορούμε να ορίσουμε κάποια τιμή ή τιμές "διαφοράς" και ανάλογα (εάν η διαφορά είναι μικρότερη ή μεγαλύτερη αυτής της τιμής), να αλλάζουν και τα ms βημάτων του pitch. Σωστά?

Εάν όλα σωστά μέχρι εδώ, θα μπορούσαμε να χρησιμοποιήσουμε την εντολή 'get_beatdiff', για τον ίδιο σκοπό? Θα απλοποιούσε τα πράγματα ή όχι?
 

发表时间 Fri 17 Feb 23 @ 8:44 am
95%