Smart Ratio Sync / On-Load BPM Normalizer for 1:1, 4:3, 2:1
What it does:
When a track loads, it compares the loaded deck BPM with the other deck BPM and moves the loaded track to the closest useful rhythmic ratio:
- 1:1 for close BPMs
- 4:3 for medium BPM jumps
- 2:1 for near double-time cases
Examples:
Why:
VirtualDJ normal sync sometimes chooses double-time, e.g. 90 → 180, when a musical intermediate ratio like 4:3 would be more useful.
Mapper location:
ONSONGLOAD
Script:
AI generated, except this bit.
This is for open format mixing mainly.
I made this script because I want a quick beat ratio sync like from 90 to 130. In this specific case I should calculate 3:4 ratio and eventually land on 120 then adjust it. ANGTFD!
Coupled with pitch lock, I feel I can mix anything now.
It introduced 700ms debounce, possibly unreliable in some use cases.
Other ratios can be introduced if needed but I see it as enough for most use cases.
Designed for two-deck use.
Does not call normal sync.
It only adjusts BPM/pitch on load.
What it does:
When a track loads, it compares the loaded deck BPM with the other deck BPM and moves the loaded track to the closest useful rhythmic ratio:
- 1:1 for close BPMs
- 4:3 for medium BPM jumps
- 2:1 for near double-time cases
Examples:
Deck 1 = 90, load deck 2 = 130
ratio = 130 / 90 = 1.444
target = 90 × 4/3 = 120
Deck 1 = 100, load deck 2 = 105
ratio = 105 / 100 = 1.05
target = 100
Deck 1 = 90, load deck 2 = 170
ratio = 170 / 90 = 1.888
target = 180
Why:
VirtualDJ normal sync sometimes chooses double-time, e.g. 90 → 180, when a musical intermediate ratio like 4:3 would be more useful.
Mapper location:
ONSONGLOAD
Script:
param_equal `get_deck` 1 ?
wait 700ms &
deck 1 loaded ?
deck 2 loaded ?
deck 1 get_bpm & param_bigger `deck 2 get_bpm` ?
deck 1 get_bpm & param_bigger `deck 2 get_bpm & param_multiply 1.666667` ?
deck 2 get_bpm & param_multiply 2 & param_cast 'beats' & deck 1 pitch
:
deck 1 get_bpm & param_bigger `deck 2 get_bpm & param_multiply 1.166667` ?
deck 2 get_bpm & param_multiply 1.333333 & param_cast 'beats' & deck 1 pitch
:
deck 2 get_bpm & param_cast 'beats' & deck 1 pitch
:
deck 2 get_bpm & param_bigger `deck 1 get_bpm & param_multiply 1.666667` ?
deck 2 get_bpm & param_multiply 0.5 & param_cast 'beats' & deck 1 pitch
:
deck 2 get_bpm & param_bigger `deck 1 get_bpm & param_multiply 1.166667` ?
deck 2 get_bpm & param_multiply 0.75 & param_cast 'beats' & deck 1 pitch
:
deck 2 get_bpm & param_cast 'beats' & deck 1 pitch
:
nothing
:
nothing
:
param_equal `get_deck` 2 ?
wait 700ms &
deck 2 loaded ?
deck 1 loaded ?
deck 2 get_bpm & param_bigger `deck 1 get_bpm` ?
deck 2 get_bpm & param_bigger `deck 1 get_bpm & param_multiply 1.666667` ?
deck 1 get_bpm & param_multiply 2 & param_cast 'beats' & deck 2 pitch
:
deck 2 get_bpm & param_bigger `deck 1 get_bpm & param_multiply 1.166667` ?
deck 1 get_bpm & param_multiply 1.333333 & param_cast 'beats' & deck 2 pitch
:
deck 1 get_bpm & param_cast 'beats' & deck 2 pitch
:
deck 1 get_bpm & param_bigger `deck 2 get_bpm & param_multiply 1.666667` ?
deck 1 get_bpm & param_multiply 0.5 & param_cast 'beats' & deck 2 pitch
:
deck 1 get_bpm & param_bigger `deck 2 get_bpm & param_multiply 1.166667` ?
deck 1 get_bpm & param_multiply 0.75 & param_cast 'beats' & deck 2 pitch
:
deck 1 get_bpm & param_cast 'beats' & deck 2 pitch
:
nothing
:
nothing
:
nothing
Mensajes 2 hours ago





