Vestax VCI-100mkII

Hi everybody,

I did a mapping for my Vestax VCI-100mkII. I send it here in hope it may be useful to others and eventually makes Mixxx officially support Vestax VCI-100mkII.
Vestax VCI-100MKII.tar.gz (2.1 KB)

Thank you for the mapping. I began with your mapping a few month ago and finally make my own. Not a standard nor complete implementation but I am happy with this mapping and VCI100MKII, and of course Mixxx!

*** not implemented ***

4-deck control
beatloop
flanger

*** assigned buttons and knobs ***

play <-- play
cue <-- cue_default
I <-- if the deck is playing then cue_gotoandplay else cue_gotoandstop
II <-- if the other deck is playing then beatsync else beatsync_tempo

cross fader <-- crossfader
volume fader <-- volume
pitch fader <-- rate
wheel <-- if touched then scratch with keylock disabled else jog

gain <-- pregain (values from 1 to 4)
hi <-- filterHigh
mid <-- filterMid
low <-- filterLow
left pan <-- headMix
right pan <-- headVolume (values from 0 to 2)
filter knob <-- compound equalizer (quick low cut and slow high cut)

fx parameter button <-- hotcue_X_activate
key <-- keylock
loop <-- reloop_exit
size back <-- loop_in
size fwd <-- loop_out
sync <-- quantize
monitor <-- pfl

brower up <-- SelectPrevTrack
brower down <-- SelectNextTrack
brower left <-- LoadSelectedTrack to left
brower right <-- LoadSelectedTrack to right
brower push <-- LoadSelectedIntoFirstStopped

main volume <-- microphone volume
headphone mixer <-- master balance
headphone volume <-- master volume (values from 0 to 1)
fader curve <-- fader curve (i don’t know why but automatically assigned)

*** not assigned buttons and knobs ***

deck switches
fx parameter knobs
fx buttons
filter buttons
VCI100MKIIa.tar.gz (1.96 KB)

Some changes and adds.

gain <-- pregain: change curve
hi <-- filterHigh: change curve
mid <-- filterMid: change curve
low <-- filterLow: change curve
left pan <-- headMix: change curve
headphone mixer <-- master balance: change curve

shift + fx parameter button <-- hotcue_X_clear
filter LED <-- low equalizer below 1.0 (flat)

Sad news. Vestax goes into bankruptcy…

tdb.co.jp/tosan/syosai/3988.html (japanese)
VCI100MKIIa20141214.tar.gz (2.16 KB)

Now I assign Sampler1 and Sampler2 to Deck C and Deck D. Using a skin as D4re 4-deck viewtopic.php?f=8&t=6521 we can use VCI100MKII as if 4-deck controller (with some limitations), and a few change may bring it to a real 4-deck with Mixxx 1.12 (this mapping is yet for 1.11).

Adds and changes.

deck switch AC <-- switch controls between channel1 and sampler1
deck switch BD <-- switch controls between channel2 and sampler2

pan <-- pregain (moved from gain, values from 0 to 4)
fx button 1 <-- flanger
II button <-- beatsync only

fx parameter knobs left <-- (same layout as LateNight skin, from left to right) microphone volume, lfoPeriod, lfoDepth, lfoDelay
fx parameter knobs right <-- headMix, headVolume (values from 0 to 1), master balance, master volume (values from 0 to 1)
VCI100MKIIa20141226.tar.gz (2.94 KB)

Correct an unnecessary global variable and clean up code in the script.
One assignment useful but maybe temporal.

gain knob <- waveform zoom of display
VCI100MKIIa20150103.tar.gz (3 KB)

Assign beatloops of musically important length and change filter curve.

size back <-- beatloop_4_toggle: new
size fwd <-- beatloop_16_toggle: new
[shift] size back <-- loop_in: move
[shift] size fwd <-- loop_out: move
[shift] sync <-- beats_translate_curpos (adjust beat-grid): new
filter knob <-- mixed EQ: add slight mid down and up

— whole mapping up to now —

deck switch AC <-- switch controls between Channel1 and Sampler1
deck switch BD <-- switch controls between Channel2 and Sampler2

brower up <-- SelectPrevTrack and scroll
brower down <-- SelectNextTrack and scroll
brower left <-- LoadSelectedTrack to left
brower right <-- LoadSelectedTrack to right
brower push <-- LoadSelectedIntoFirstStopped

play <-- play
cue <-- cue_default
I <-- if the deck is playing then cue_gotoandplay else cue_gotoandstop
II <-- beatsync

cross fader <-- crossfader
volume fader <-- volume
pitch fader <-- rate
wheel <-- if touched then scratch (deck AB only) without keylock else jog

hi <-- filterHigh
mid <-- filterMid
low <-- filterLow
pan <-- pregain
gain <-- waveform_zoom
fx button 1 <-- flanger
monitor <-- pfl

filter knob <-- mixed EQ (quick low cut, slow high cut, slight mid down and up)
filter button LED <-- filterLow below 1

sync <-- quantize
[shift] sync <-- beats_translate_curpos
key <-- keylock
loop <-- reloop_exit
size back <-- beatloop_4_toggle
size fwd <-- beatloop_16_toggle
[shift] size back <-- loop_in
[shift] size fwd <-- loop_out

fx parameter button <-- hotcue_X_activate
[shift] fx parameter button <-- hotcue_X_clear

fx parameter knob 1 (left end) <-- microphone volume
fx parameter knob 2 <-- lfoPeriod
fx parameter knob 3 <-- lfoDepth
fx parameter knob 4 <-- lfoDelay

fx parameter knob 5 <-- headMix
fx parameter knob 6 <-- headVolume (from 0 to 1)
fx parameter knob 7 <-- master balance
fx parameter knob 8 (right end) <-- master volume (from 0 to 1)

fader curve <-- fader curve (automatically assigned)
VCI100MKIIa20150113.tar.gz (3.2 KB)

Add slip mode and resolve a conflict between EQ and filter knob controls.

filter button <-- slip_enabled: new (when exit from scratch or loop or reverse, resume and re-enable the mode)
[shift] loop <-- reverse: new
[shift] key <-- rate_set_zero: new
fx button 2 <-- filterLowKill: new
filter knob <-- mixed EQ: EQ (hi low mid) and filter (mixed EQ) knob controls were exclusive before, but now they are cooperative.
VCI100MKIIa20150122.tar.gz (3.6 KB)

Change the procedure after de-touching the wheel

I took the following way before.

  1. Disable scratch with ramp (after this moment jog control is usable)
  2. Resume the keylock state
  3. If slip mode is enabled, then disable it,
  4. delay for 1000ms,
  5. and re-enable it

It is not a bad solution but has some defects.

  • A long delay is needed before re-enabing slip mode to avoid a bad effect from scratch (ramp + ?) and unintentional jog control.
  • Disabling slip mode just after scratch affects the rate.
  • Even without slip, jog control affects the rate just after scratch.

So I take another way.

  1. Inhibit jog control
  2. Disable scratch without ramp
  3. Resume the keylock state
  4. If slip mode is enabled, then delay for 40ms,
  5. disable it,
  6. and re-enable it
  7. Permit jog control after 1000ms

The mapping table “mappingVCI-100MKIIa.txt” is included.
VCI100MKIIa20150203.tar.gz (4.23 KB)

Inhibit jog control in the slip mode

Even with the improved procedure, occasional unintentional jog controls (maybe at the begining of touch) disterb the rate. I trid several other ways in vain. Finally I decided to inhibit jog control anytime in the slip mode. Robust and complete.
VCI100MKIIa20150207.tar.gz (4.25 KB)

Permit jog control by wheel only when the output is downed by the line fader or crossfader.

Jog controls are not used in play but only in preparing and beatmatching tracks. So we can restrict them in the limited situations. And then we will be free from annoying things partially removed before, rate disturbances on scratch with or without slip, or on any careless hit. Really robust.
VCI100MKIIa20150215.tar.gz (4.3 KB)

Improve beatloop script and change mapping around it.

key --> keylock (no change)
[shift] key --> reverse

loop --> reloop_exit (no change)
[shift] loop --> beatloop in the default beat (4 at the beginning)

size back --> if loop_enabled then loop_halve else halve the default beat
[shift] size back --> loop_in (no change)

size fwd --> if loop_enabled then loop_double else double the default beat
[shift] size fwd --> loop_out (no change)

(no LED): default beat = 4

[size fwd LED]: default beat > 4

[size back LED]: 1/4 <= default beat < 4

[size back LED] + [size fwd LED]: default beat < 1/4

gain --> waveform_zoom (if max then show spinny else if min then hide spinny)
VCI100MKIIa20150308.tar.gz (4.42 KB)

  • Add slip functionality to hotcue. When a hotcue button is released in the slip mode, it resumes.

  • Change loop button mapping. Previous mapping was,

[loop button]
reloop (by “reloop_exit” control)
exit from all kinds of loop (by the same)

[shift + loop button]
start beatloop in the default beat (by “beatloop” control)
(newly) start beatloop in the default beat (by the same)

It is easy to map, but not easy to use! So I rebundle them as,

[loop button]
start beatloop in the default beat (by “beatloop” control)
exit from all kinds of loop (by “reloop_exit” control)

[shift + loop button]
reloop (by “reloop_exit” control)
(newly) start beatloop in the default beat (by “beatloop” control)

Now we can use the button simply for beatloop toggle without losing other functions.
VCI100MKIIa20150316.tar.gz (4.58 KB)

  • Change cross fader, input fader and pitch fader to be treated with 14-bit CC. Though the real resolution is only 9-bit, we can set the pitch more correctly than normal 7-bit.

  • Assign pitch bend to effect type buttons.
    VCI100MKIIa20150317.tar.gz (4.98 KB)

  • Add jog speed control.

gain knob --> waveform_zoom, change jog speed, and if max then show spinny, else if min then hide spinny

  • Add “sync play mode”(?) In this mode, beatsync_phase is executed just after starting the deck if the other deck is playing. I set the mode to be enabled by enabling quantize mode. It affects any way of starting.

sync button --> quantize, and on starting the deck beatsync_phase if possible
VCI100MKIIa20150401.tar.gz (5.17 KB)

  • A minor improvement in the script

sync button --> enable quantize, beatsync_tempo on load (connected to “file_bpm” instead of “duration”) and beatsync_phase on start (connected to “play”)

II button --> beatsync (no change)
VCI100MKIIa20150402.tar.gz (5.18 KB)

  • Update for mixxx 1.12beta (4-deck and 4-fx ready)
  • Change the name from “Vestax VCI-100MKIIa” to “Vestax VCI-100MKII”

deck switch AC --> switch controls between Channel1 and Channel3
deck switch BD --> switch controls between Channel2 and Channel4

brower up --> SelectPrevTrack and scroll
brower down --> SelectNextTrack and scroll
brower left --> LoadSelectedTrack to left
brower right --> LoadSelectedTrack to right
brower push --> LoadSelectedIntoFirstStopped

play --> play
cue --> cue_default
I --> if the deck is playing then cue_gotoandplay, else cue_gotoandstop
II --> sync_enabled

cross fader (9-bit resolution) --> crossfader
input fader (9-bit resolution) --> volume
pitch fader (9-bit resolution) --> rate
wheel (2400 pulse/rotation) --> if touched then scratch (disable keylock), else if the output is downed by faders then jog

hi --> equalizer high
mid --> equalizer mid
low --> equalizer low
pan --> pregain
gain --> waveform_zoom and change jog speed

fx1 --> enable fx1
[shift] fx1 --> enable fx3
fx2 --> enable fx2
[shift] fx2 --> enable fx4
monitor --> pfl

key --> keylock
sync --> slip_enabled (affect scratch, loop and hotcue)
filter button --> enable filter
filter knob --> filter

loop --> if loop_enabled then exit loop, else beatloop in the default beat (4 at the beginning)
[shift] loop --> if loop_enabled then newly beatloop in the default beat, else reloop
back --> if loop_enabled then loop_halve, else halve the default beat
[shift] back --> loop_in
fwd --> if loop_enabled then loop_double, else double the default beat
[shift] fwd --> loop_out

fx parameter button --> hotcue_X_activate
[shift] fx parameter button --> hotcue_X_clear

fx type up --> prev_chain
[shift] fx type up --> switch controls to fx1/fx2
fx type down --> next_chain
[shift] fx type down --> switch controls to fx3/fx4

fx1/3 parameter knob 1 --> parameter1
fx1/3 parameter knob 2 --> parameter2
fx1/3 parameter knob 3 --> parameter3
fx1/3 parameter knob 4 --> mix

fx2/4 parameter knob 1 --> parameter1
fx2/4 parameter knob 2 --> parameter2
fx2/4 parameter knob 3 --> parameter3
fx2/4 parameter knob 4 --> mix

main --> master volume (from 0 to 1)
mix --> headMix
vol --> headVolume (from 0 to 1)
VCI100MKII20150507.tar.gz (5.01 KB)

  • Add some functions

[shift] key --> pitch_up (one semitone up)
[shift] sync --> pitch_down (one semitone down)
monitor --> pfl (if headMix is cue or master only then switch it automatically)
VCI100MKII20150524.tar.gz (5.25 KB)

  • Add one more pitch function.

[shift] pitch fader --> pitch (from -5 to 5 semitones)
VCI100MKII20150712.tar.gz (5.34 KB)

I notice that instant sync by the new sync_enabled control occasionally fails, although sync mode works fine. For the workaround,

  • back to use legacy beatsync control, or
  • continue to use sync mode with quantize (automatically sync on start)
    I’d rather choose the latter, but there is no button for quantize, so change the layout (same as the mapping for mixxx 1.11).

sync --> quantize (change from slip_enabled)
filter button --> slip_enabled (change from enable filter. To disable filter, use the options menu: preferences -> equalizers -> equalizer rack -> quick effect)

[shift] monitor --> pfl of the rear deck (add)
input fader --> volume (change to use engine.setParameter instead of engine.setValue function)
VCI100MKII20150716.tar.gz (5.38 KB)

  • A few improvements.

wheel (change the acceleration curve of jog, from slower than before)
gain --> pitch (change, integer only)
[shift] key --> waveform_zoom_up (change)
[shift] sync --> waveform_zoom_down (change)
[shift] pitch fader --> playposition (change)
[shift] fx1/2 --> enable fx3/4 (display states while shifting)
[shift] monitor --> pfl solo (change)
VCI100MKII20150815.tar.gz (5.55 KB)