From dd9af16a5e8c7e6f61951547d6f1260df8c1f6d4 Mon Sep 17 00:00:00 2001 From: "Sean M. Pappalardo" Date: Fri, 20 Apr 2018 14:22:08 -0700 Subject: [PATCH 1/6] AA VMS4: Fix touch strip needle drop scale --- res/controllers/American-Audio-VMS4-scripts.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/controllers/American-Audio-VMS4-scripts.js b/res/controllers/American-Audio-VMS4-scripts.js index a29e82c632..754348d33f 100644 --- a/res/controllers/American-Audio-VMS4-scripts.js +++ b/res/controllers/American-Audio-VMS4-scripts.js @@ -395,7 +395,7 @@ VMS4.jog_move_msb = function(channel, control, value, status, group) { VMS4.touch_strip = function(channel, control, value, status, group) { // Only modify the playposition if the deck is NOT playing! if (engine.getValue(group, "play") === 0) { - engine.setValue(group, "playposition", value); + engine.setValue(group, "playposition", value/0x7F); } } From 2d912dc18558b73153c43bf365c8a85c4084f0a0 Mon Sep 17 00:00:00 2001 From: "Sean M. Pappalardo" Date: Mon, 14 May 2018 12:48:57 -0700 Subject: [PATCH 2/6] Update AA VMS4 preset - Update Mixxx version - Add cue_play on shifted CUE buttons (to match Traktor Edition label) - Add sync_master on shifted PLAY buttons (to match Traktor Edition label) - Update reloop buttons to use reloop_toggle - Make effect controls operate on Unit1_EffectM, correcting behavior --- res/controllers/American Audio VMS4.midi.xml | 50 +++++++++++++++++++------- res/controllers/American-Audio-VMS4-scripts.js | 6 ++-- 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/res/controllers/American Audio VMS4.midi.xml b/res/controllers/American Audio VMS4.midi.xml index 564863598b..147d89d857 100644 --- a/res/controllers/American Audio VMS4.midi.xml +++ b/res/controllers/American Audio VMS4.midi.xml @@ -4,7 +4,7 @@ American Audio VMS4/4.1 Anders Gunnarsson & Sean M. Pappalardo http://mixxx.org/wiki/doku.php/american_audio_vms4 - 2-deck control/4-deck mixer preset for Mixxx 2.0. Assumes "Post EQ" mode. (See Wiki for full setup instructions.) + 2-deck control/4-deck mixer preset for Mixxx 2.1. Assumes "Post EQ" mode. (See Wiki for full setup instructions.) @@ -268,6 +268,18 @@ 0x80 0x0C + + [Channel1] + cue_play + 0x91 + 0x0C + + + [Channel1] + cue_play + 0x81 + 0x0C + [Channel1] play @@ -275,20 +287,20 @@ 0x0D - [Channel1] - play - 0x80 - 0x0D + [Channel1] + play + 0x80 + 0x0D [Channel1] - start_play + sync_master 0x91 0x0D [Channel1] - start_play + sync_master 0x81 0x0D @@ -487,7 +499,7 @@ [Channel1] - reloop_exit + reloop_toggle 0x90 0x21 @@ -496,7 +508,7 @@ [Channel1] - reloop_exit + reloop_toggle 0x80 0x21 @@ -922,6 +934,18 @@ 0x80 0x2E + + [Channel2] + cue_play + 0x91 + 0x2E + + + [Channel2] + cue_play + 0x81 + 0x2E + [Channel2] play @@ -930,13 +954,13 @@ [Channel2] - start_play + sync_master 0x91 0x2F [Channel2] - start_play + sync_master 0x81 0x2F @@ -1136,7 +1160,7 @@ [Channel2] - reloop_exit + reloop_toggle 0x90 0x43 @@ -1145,7 +1169,7 @@ [Channel2] - reloop_exit + reloop_toggle 0x80 0x43 diff --git a/res/controllers/American-Audio-VMS4-scripts.js b/res/controllers/American-Audio-VMS4-scripts.js index 754348d33f..6f4d95a731 100644 --- a/res/controllers/American-Audio-VMS4-scripts.js +++ b/res/controllers/American-Audio-VMS4-scripts.js @@ -313,14 +313,14 @@ VMS4.effectSelect = function(channel, control, value, status, group) { diff += wrapCount*128; - engine.setValue("[EffectRack1_EffectUnit"+VMS4.GetDeckNum(group)+"]","chain_selector",diff); + engine.setValue("[EffectRack1_EffectUnit"+VMS4.GetDeckNum(group)+"_Effect1]","effect_selector",diff); } VMS4.effectSelectPress = function(channel, control, value, status, group) { var deckNum = VMS4.GetDeckNum(group); if (value > 0x40) { - engine.setValue("[EffectRack1_EffectUnit"+deckNum+"]","enabled", - !engine.getValue("[EffectRack1_EffectUnit"+deckNum+"]","enabled") + engine.setValue("[EffectRack1_EffectUnit"+deckNum+"_Effect1]","enabled", + !engine.getValue("[EffectRack1_EffectUnit"+deckNum+"_Effect1]","enabled") ); } } From a8269117932b078e93b8b0f65a4178994c23214f Mon Sep 17 00:00:00 2001 From: "Sean M. Pappalardo" Date: Tue, 15 May 2018 15:52:32 -0700 Subject: [PATCH 3/6] American Audio VMS4 updates: - Change CUP button to use cue_gotoandplay - Add strip scroll and touch functions that make the absolute-position touch scripts behave like relative-mode ones for scrolling through the library - Comment-out needle drop function in preparation for replacing it with effect dry/wet - Update script version and date --- res/controllers/American Audio VMS4.midi.xml | 91 +++++++++++++++++++++++--- res/controllers/American-Audio-VMS4-scripts.js | 49 ++++++++++++-- 2 files changed, 124 insertions(+), 16 deletions(-) diff --git a/res/controllers/American Audio VMS4.midi.xml b/res/controllers/American Audio VMS4.midi.xml index 147d89d857..3116252a7a 100644 --- a/res/controllers/American Audio VMS4.midi.xml +++ b/res/controllers/American Audio VMS4.midi.xml @@ -4,7 +4,8 @@ American Audio VMS4/4.1 Anders Gunnarsson & Sean M. Pappalardo http://mixxx.org/wiki/doku.php/american_audio_vms4 - 2-deck control/4-deck mixer preset for Mixxx 2.1. Assumes "Post EQ" mode. (See Wiki for full setup instructions.) + 2-deck control/4-deck mixer preset for Mixxx 2.1. +Assumes "Post EQ" mode. (See Wiki for full setup instructions.) @@ -270,13 +271,13 @@ [Channel1] - cue_play + cue_gotoandplay 0x91 0x0C [Channel1] - cue_play + cue_gotoandplay 0x81 0x0C @@ -705,14 +706,50 @@ - [Channel1] - VMS4.touch_strip + [Library] + VMS4.strip_scroll 0xB0 0x28 + + [Channel1] + VMS4.strip_touch + 0x90 + 0x57 + + + + + + [Channel1] + VMS4.strip_touch + 0x80 + 0x57 + + + + + + [Channel1] + VMS4.strip_touch + 0x91 + 0x57 + + + + + + [Channel1] + VMS4.strip_touch + 0x81 + 0x57 + + + + @@ -936,13 +973,13 @@ [Channel2] - cue_play + cue_gotoandplay 0x91 0x2E [Channel2] - cue_play + cue_gotoandplay 0x81 0x2E @@ -1366,14 +1403,50 @@ - [Channel2] - VMS4.touch_strip + [Library] + VMS4.strip_scroll 0xB0 0x2D + + [Channel2] + VMS4.strip_touch + 0x90 + 0x58 + + + + + + [Channel2] + VMS4.strip_touch + 0x80 + 0x58 + + + + + + [Channel2] + VMS4.strip_touch + 0x91 + 0x58 + + + + + + [Channel2] + VMS4.strip_touch + 0x81 + 0x58 + + + + diff --git a/res/controllers/American-Audio-VMS4-scripts.js b/res/controllers/American-Audio-VMS4-scripts.js index 6f4d95a731..8096205cee 100644 --- a/res/controllers/American-Audio-VMS4-scripts.js +++ b/res/controllers/American-Audio-VMS4-scripts.js @@ -1,7 +1,7 @@ /** - * American Audio VMS4 controller script v2.0 for Mixxx v2.0 + * American Audio VMS4 controller script v2.1 for Mixxx v2.1.x * Copyright (C) 2010 Anders Gunnarsson - * Copyright (C) 2011-2015 Sean M. Pappalardo + * Copyright (C) 2011-2018 Sean M. Pappalardo * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -228,6 +228,8 @@ VMS4.Deck.prototype.keyLockButtonHandler = function(value) { } VMS4.Deck.prototype.effectParamButtonHandler = function(value) { + // Couldn't get this to work. The buttons are mapped instead to VMS4.effectParameterButton + // if(value == ButtonState.pressed) { // this.controlEffectParameter=!this.controlEffectParameter; // if (this.controlEffectParameter) { @@ -244,6 +246,10 @@ VMS4.Deck.prototype.effectParamButtonHandler = function(value) { VMS4.Decks = {"Left":new VMS4.Deck(1,"[Channel1]"), "Right":new VMS4.Deck(2,"[Channel2]")}; VMS4.GroupToDeck = {"[Channel1]":"Left", "[Channel2]":"Right"}; VMS4.GroupToDeckNum = {"[Channel1]":1, "[Channel2]":2, "[Channel3]":3, "[Channel4]":4}; +VMS4.StripToSide = {0x28:"Left", 0x2D:"Right"}; +VMS4.touchStripPos = {"Left":null, "Right":null}; // Stores the position on touch + // to convert the absolute sliders + // to relative ones VMS4.GetDeck = function(group) { try { @@ -392,11 +398,40 @@ VMS4.jog_move_msb = function(channel, control, value, status, group) { deck.jogMsb = value; } -VMS4.touch_strip = function(channel, control, value, status, group) { - // Only modify the playposition if the deck is NOT playing! - if (engine.getValue(group, "play") === 0) { - engine.setValue(group, "playposition", value/0x7F); - } +// VMS4.touch_strip = function(channel, control, value, status, group) { +// // Only modify the playposition if the deck is NOT playing! +// if (engine.getValue(group, "play") === 0) { +// engine.setValue(group, "playposition", value/0x7F); +// } +// } + +VMS4.strip_touch = function(channel, control, value, status, group) { + var deck = VMS4.GetDeckNum(group); + if (deck === 1) { // Left side + if ((status & 0xF0) === 0x90) { // If button down + // TODO: Need a CO to focus explicitly on category selection pane + // "[Library]","MoveFocus" just toggles and is frustrating + } else { // Button up + VMS4.touchStripPos["Left"] = null; + } + } else { // Right side + if ((status & 0xF0) === 0x90) { // If button down + // TODO: Need a CO to focus explicitly on track selection pane + // "[Library]","MoveFocus" just toggles and is frustrating + } else { // Button up + VMS4.touchStripPos["Right"] = null; + } + } +} + +VMS4.strip_scroll = function(channel, control, value, status, group) { + var side = VMS4.StripToSide[control]; + if (VMS4.touchStripPos[side] != null) { + // Higher on the strip gives a higher value, and up is negative on Library + // scroll controls + engine.setValue(group, "MoveVertical", VMS4.touchStripPos[side] - value); + } + VMS4.touchStripPos[side] = value; } VMS4.vinyl = function(channel, control, value, status, group) { From 00dc8100a40c5b1ab10ced81567003b31865befb Mon Sep 17 00:00:00 2001 From: "Sean M. Pappalardo" Date: Wed, 16 May 2018 16:34:34 -0700 Subject: [PATCH 4/6] AA VMS4 preset update - touch strip FX - Add effects dry/wet control to shifted touch strips - Replace setValue() with setParameter() - Delete now-unneeded strip touch button down if branch --- res/controllers/American Audio VMS4.midi.xml | 18 +++++++++++++ res/controllers/American-Audio-VMS4-scripts.js | 36 ++++++++++++-------------- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/res/controllers/American Audio VMS4.midi.xml b/res/controllers/American Audio VMS4.midi.xml index 3116252a7a..7e4d0330c8 100644 --- a/res/controllers/American Audio VMS4.midi.xml +++ b/res/controllers/American Audio VMS4.midi.xml @@ -714,6 +714,15 @@ Assumes "Post EQ" mode. (See Wiki for full setup instructions.) + + [EffectRack1_EffectUnit1] + VMS4.strip_fx_dw + 0xB1 + 0x28 + + + + [Channel1] VMS4.strip_touch @@ -1411,6 +1420,15 @@ Assumes "Post EQ" mode. (See Wiki for full setup instructions.) + + [EffectRack1_EffectUnit2] + VMS4.strip_fx_dw + 0xB1 + 0x2D + + + + [Channel2] VMS4.strip_touch diff --git a/res/controllers/American-Audio-VMS4-scripts.js b/res/controllers/American-Audio-VMS4-scripts.js index 8096205cee..0a001a77dc 100644 --- a/res/controllers/American-Audio-VMS4-scripts.js +++ b/res/controllers/American-Audio-VMS4-scripts.js @@ -319,7 +319,8 @@ VMS4.effectSelect = function(channel, control, value, status, group) { diff += wrapCount*128; - engine.setValue("[EffectRack1_EffectUnit"+VMS4.GetDeckNum(group)+"_Effect1]","effect_selector",diff); + engine.setValue("[EffectRack1_EffectUnit"+VMS4.GetDeckNum(group)+"_Effect1]", + "effect_selector",diff); } VMS4.effectSelectPress = function(channel, control, value, status, group) { @@ -336,11 +337,9 @@ VMS4.effectControl = function(channel, control, value, status, group) { var deck = VMS4.GetDeck(group); var deckNum = VMS4.GetDeckNum(group); if (deck.controlEffectParameter) { - engine.setValue("[EffectRack1_EffectUnit"+deckNum+"]","super1", - script.absoluteLin(value,0,1)); + engine.setParameter("[EffectRack1_EffectUnit"+deckNum+"]","super1",value/0x7F); } else { - engine.setValue("[EffectRack1_EffectUnit"+deckNum+"]","mix", - script.absoluteLin(value,0,1)); + engine.setParameter("[EffectRack1_EffectUnit"+deckNum+"]","mix",value/0x7F); } } @@ -398,27 +397,18 @@ VMS4.jog_move_msb = function(channel, control, value, status, group) { deck.jogMsb = value; } -// VMS4.touch_strip = function(channel, control, value, status, group) { -// // Only modify the playposition if the deck is NOT playing! -// if (engine.getValue(group, "play") === 0) { -// engine.setValue(group, "playposition", value/0x7F); -// } -// } +VMS4.strip_fx_dw = function(channel, control, value, status, group) { + engine.setParameter(group,"mix",value/0x7F); +} VMS4.strip_touch = function(channel, control, value, status, group) { var deck = VMS4.GetDeckNum(group); if (deck === 1) { // Left side - if ((status & 0xF0) === 0x90) { // If button down - // TODO: Need a CO to focus explicitly on category selection pane - // "[Library]","MoveFocus" just toggles and is frustrating - } else { // Button up + if ((status & 0xF0) === 0x80) { // If button up VMS4.touchStripPos["Left"] = null; } } else { // Right side - if ((status & 0xF0) === 0x90) { // If button down - // TODO: Need a CO to focus explicitly on track selection pane - // "[Library]","MoveFocus" just toggles and is frustrating - } else { // Button up + if ((status & 0xF0) === 0x80) { // If button up VMS4.touchStripPos["Right"] = null; } } @@ -429,7 +419,13 @@ VMS4.strip_scroll = function(channel, control, value, status, group) { if (VMS4.touchStripPos[side] != null) { // Higher on the strip gives a higher value, and up is negative on Library // scroll controls - engine.setValue(group, "MoveVertical", VMS4.touchStripPos[side] - value); + if (side === "Left") { + engine.setValue("[Playlist]", "SelectPlaylist", + VMS4.touchStripPos[side] - value); + } else { + engine.setValue("[Playlist]", "SelectTrackKnob", + VMS4.touchStripPos[side] - value); + } } VMS4.touchStripPos[side] = value; } From 89c951158c58296e21c8720ea336b8ea0523fd1a Mon Sep 17 00:00:00 2001 From: "Sean M. Pappalardo" Date: Mon, 21 May 2018 08:28:22 -0700 Subject: [PATCH 5/6] Address code review notes. --- res/controllers/American-Audio-VMS4-scripts.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/res/controllers/American-Audio-VMS4-scripts.js b/res/controllers/American-Audio-VMS4-scripts.js index 0a001a77dc..ab7cd72d0d 100644 --- a/res/controllers/American-Audio-VMS4-scripts.js +++ b/res/controllers/American-Audio-VMS4-scripts.js @@ -326,9 +326,7 @@ VMS4.effectSelect = function(channel, control, value, status, group) { VMS4.effectSelectPress = function(channel, control, value, status, group) { var deckNum = VMS4.GetDeckNum(group); if (value > 0x40) { - engine.setValue("[EffectRack1_EffectUnit"+deckNum+"_Effect1]","enabled", - !engine.getValue("[EffectRack1_EffectUnit"+deckNum+"_Effect1]","enabled") - ); + script.toggleControl("[EffectRack1_EffectUnit"+deckNum+"_Effect1]","enabled"); } } @@ -416,7 +414,7 @@ VMS4.strip_touch = function(channel, control, value, status, group) { VMS4.strip_scroll = function(channel, control, value, status, group) { var side = VMS4.StripToSide[control]; - if (VMS4.touchStripPos[side] != null) { + if (VMS4.touchStripPos[side] !== null) { // Higher on the strip gives a higher value, and up is negative on Library // scroll controls if (side === "Left") { From 715548faf594a68c23ac8fccc32ce7d2108526bc Mon Sep 17 00:00:00 2001 From: "Sean M. Pappalardo" Date: Mon, 21 May 2018 09:10:14 -0700 Subject: [PATCH 6/6] Add needle drop when deck isn't playing, FX dry/wet when it is. --- res/controllers/American Audio VMS4.midi.xml | 4 ++-- res/controllers/American-Audio-VMS4-scripts.js | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/res/controllers/American Audio VMS4.midi.xml b/res/controllers/American Audio VMS4.midi.xml index 7e4d0330c8..e1b83a2fc9 100644 --- a/res/controllers/American Audio VMS4.midi.xml +++ b/res/controllers/American Audio VMS4.midi.xml @@ -715,7 +715,7 @@ Assumes "Post EQ" mode. (See Wiki for full setup instructions.) - [EffectRack1_EffectUnit1] + [Channel1] VMS4.strip_fx_dw 0xB1 0x28 @@ -1421,7 +1421,7 @@ Assumes "Post EQ" mode. (See Wiki for full setup instructions.) - [EffectRack1_EffectUnit2] + [Channel2] VMS4.strip_fx_dw 0xB1 0x2D diff --git a/res/controllers/American-Audio-VMS4-scripts.js b/res/controllers/American-Audio-VMS4-scripts.js index ab7cd72d0d..c312e0394a 100644 --- a/res/controllers/American-Audio-VMS4-scripts.js +++ b/res/controllers/American-Audio-VMS4-scripts.js @@ -396,7 +396,13 @@ VMS4.jog_move_msb = function(channel, control, value, status, group) { } VMS4.strip_fx_dw = function(channel, control, value, status, group) { - engine.setParameter(group,"mix",value/0x7F); + var deck = VMS4.GetDeckNum(group); + // When the deck is playing, adjust effect dry/wet. When it isn't, do needle drop. + if (engine.getValue(group, "play") === 0) { + engine.setValue(group, "playposition", value/0x7F); + } else { + engine.setParameter("[EffectRack1_EffectUnit"+deck+"]","mix",value/0x7F); + } } VMS4.strip_touch = function(channel, control, value, status, group) {