Skip to content

SCS3 mapping with support for four decks#809

Merged
Pegasus-RPG merged 37 commits intomixxxdj:masterfrom
sbalmer:SCS3
Dec 23, 2015
Merged

SCS3 mapping with support for four decks#809
Pegasus-RPG merged 37 commits intomixxxdj:masterfrom
sbalmer:SCS3

Conversation

@sbalmer
Copy link
Copy Markdown
Contributor

@sbalmer sbalmer commented Dec 13, 2015

This is an update to the Stanton SCS3 mappings. It features 4-deck support and controlling the filter racks. The mapping deviates in some important ways from the classic SCS3 mapping which is why I added it as an alternate '4deck' mapping.

These new mappings were discussed in pull request #762. I decided to commit again to get a cleaner version history for the original mappings.

@sbalmer sbalmer mentioned this pull request Dec 13, 2015
@sblaisot
Copy link
Copy Markdown
Member

please add new files to windows uninstaller:
http://www.mixxx.org/wiki/doku.php/contributing_mappings#windows_installer_update

@Be-ing
Copy link
Copy Markdown
Contributor

Be-ing commented Dec 14, 2015

@Pegasus-RPG : Should this be the new default mapping for the 3M?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change the version to 2.0.0+ now :)

@Pegasus-RPG
Copy link
Copy Markdown
Member

Okay, I've had a chance to test your SCS.3m preset and I first want to say great job on the FX editing! This is the first preset I've seen that actually lets you edit and selectively activate all four effects units in an intuitive way (and on such a compact controller!) Well done!

So I would like to make yours the definitive SCS.3m preset for 2.0 but there are a few things that need tweaking or fixing first:

  • Previous behavior matching: Deck pre-gain should be adjusted when holding down Deck Switch rather than FX
  • Previous behavior matching: While holding down Deck Switch, allow the cross-fader to perform needle-dropping on the current deck.
  • Don't switch decks until Deck Switch is released within 200ms or so. (Whatever value I used in the original script.)
  • While Deck Switch is held, you can light both A & C or B & D buttons. (It's important to always somehow acknowledge the touch.)
  • Offer the ability (via a state variable at the top of the script) to remember the previously-used mode on each deck and change to it on deck switch.
  • Why do things flicker so much on deck switch? Specifically the EQ/FX sliders (regardless of mode) and the effect unit select buttons?
  • FX should light red when editing FX parameters.
  • Holding FX and touching parameter sliders above should reset them to the parameter's default value (but you already knew this. :) )
  • I would swap the colors on the four effect unit select buttons: blue for the one being edited, red for ones that are active on the current deck. (Because red means "on" or "active.")
  • Bug: I'm getting "Warning [Main]: "EffectParameter(Mid)" WARNING: Value was outside of limits, clamped." for each of the EQ sliders. Probably an off-by-one error.
  • Pressing FX by itself is currently a no-op. Either make it edit the last-edited effect unit or we can come up with another use for this possible mode, maybe something with the Super Knob. (In the mean time, extinguish the FX light instead of making it blue because blue means "not currently active, press me to activate.")
  • Question: do you think it's useful to add back the play, cue, FF and REW buttons when in EQ mode? (Then users would have to press FX to change them to unit select buttons.)

If you need help with any of these, just let me know and I can make a PR against your SCS3 branch.

@rryan
Copy link
Copy Markdown
Member

rryan commented Dec 16, 2015

@Pegasus-RPG based on this laundry list I'm guessing this is not going to be ready for the 2.0 release. Is it worth delaying to 2.1 or should we leave these as TODOs?

@sbalmer would you have time to get these fixed in the next few days?

@Pegasus-RPG
Copy link
Copy Markdown
Member

I'd really like to get this into 2.0 since the 3m is designed for four decks and effects. Though my list is long, about everything in it should be quick to change/fix. Hopefully @sbalmer will have a chance to do so in the next few days since it will be quicker for him than me, but I can if he's unable.

@sbalmer
Copy link
Copy Markdown
Contributor Author

sbalmer commented Dec 18, 2015

Thank for this thorough examination! I agree that most changes are shallow and I should be able to do most of that today. I'm not sure I'll get the time to test it well this weekend.

@Pegasus-RPG
Copy link
Copy Markdown
Member

That's fine. If you can do the changes, I can test the heck out of them. :)

@sbalmer
Copy link
Copy Markdown
Contributor Author

sbalmer commented Dec 18, 2015

Why do things flicker so much on deck switch? Specifically the EQ/FX sliders (regardless of mode) and the effect unit select buttons?

I've streamlined the modesetting process in commit 6595fc4 and this reduced the flicker a lot. Reducing flicker further should be possible but I'm not sure it's worth the complexity.

For the deck switch I wanted immediate feedback that directly maps to the screen location of the deck (when you use the standard skin). The EQ sliders flash to indicate the deck you switched to for confirmation. When you switch to the alt deck (C or D) the bottom part will flash, when you switch back the top part flashes. If you think this is too confusing I can remove it or make it optional.

There is now also the case when you hold for more than 110ms which triggers modesetting for relative mode. Then releasing before 200ms which will switch decks and modeset for absolute mode. This will trigger two modesets in short time and causes considerable flickering. I wanted the held-mode to be ready quickly and still allow deck-switch.

@sbalmer
Copy link
Copy Markdown
Contributor Author

sbalmer commented Dec 18, 2015

I've added the eqModePerDeck setting where the EQ/FX mode is remembered per-deck. What should be the preset for eqModePerDeck? Either is acceptable to me.

I would propose we make eqModePerDeck = true the standard behaviour and remove the option. I'm no fan of options that change the behaviour in subtle ways.

Conflicts:
	res/controllers/Stanton-SCS3m-4deck-scripts.js
@sbalmer
Copy link
Copy Markdown
Contributor Author

sbalmer commented Dec 19, 2015

I tested the mapping for basic functionality this morning and it worked fine.

@Pegasus-RPG
Copy link
Copy Markdown
Member

I'm wondering, do you have the SCS.3m MIDI spec or have you been working from my preset and your own detective work?

For the deck switch I wanted immediate feedback that directly maps to the screen location of the deck

Okay but it doesn't appear intentional to me (looks like something's buggy.) If you like it, I'd say make it optional and default it to off. The A/C and B/D lights are enough for most people.

There is now also the case when you hold for more than 110ms which triggers modesetting for relative mode

Oh, I didn't realize this was present. (Did I just miss it on the wiki page?)
You don't need two separate timeouts, one is fine. Just don't actually change decks unless the Deck Switch button is released before that time. (If released after it, stay on the current deck.)

I've added eqModePerDeck where the EQ/FX mode is remembered per-deck. What should be the preset for eqModePerDeck?

It should be True for consistency with the default for the SCS.3d preset. People may want the option (they explicitly asked for it on my first SCS.3d preset) so I'd leave it changeable, just defaulted to True.

I would swap the colors on the four effect unit select buttons: blue for the one being edited, red for ones that are active on the current deck. (Because red means "on" or "active.")

I must disagree because red is used for modes that are engaged on the device.

This is why I'm saying to light the FX button red whenever the sliders are operating on effects parameters. As for the four soft-buttons, since red draws the eye much better than blue, if a user is quickly looking to see which effects units are engaged on that deck, red buttons would be more quickly visible (and also denote "hey, I'm currently doing something audible.")

So far I've treated the FX button as an alt/shift button that enabled alternative behaviour while it was held. I would prefer it if the device didn't have another mode, unless it's a really useful mode ;-)

That's fine, just make the FX button black whenever the sliders are not controlling effects parameters. (So whenever in EQ mode.)

Personally I was permanently scared to come near the Play, Cue, FF, and REW buttons because they can ruin a good mix unintentionally. Not having those dangerous options there feels better to me.

That's a great point. Let's leave them out then. If anyone complains, we can always add them in the future. (But I expect nobody will since I'm willing to bet that most anyone who owns an SCS.3m has at least one other controller with transport controls.)

I'd prefer to leave it as-is and get the API fixed to accept 1.0 as max parameter value.

Ah, that's fine. We need a bug filed to fix the API.

You can now switch effect units from the 3m by holding a soft-button then touching left or right on the pitch slider to cycle the effects for that unit.

Sweet! (Make sure that's on the wiki page too.)

@sbalmer
Copy link
Copy Markdown
Contributor Author

sbalmer commented Dec 20, 2015

I've removed the "intentional flickering" and made eqModePerDeck the preset. Oh and yes I have to update the wiki.

I'm wondering, do you have the SCS.3m MIDI spec or have you been working from my preset and your own detective work?

The modesetting stuff I took from your mapping, couldn't have figured it out otherwise. I also ran a script that sent all possible Midi messages to observe what lights would light for which addresses. Eventually I found some documentation which helped clear the remaining questions I had, well most answers took the form "you can't".

You don't need two separate timeouts, one is fine. Just don't actually change decks unless the Deck Switch button is released before that time.

I now do it as you suggest which is simpler and it avoids some (not all) flickering. I'll just have to get used to the lag :-)

@sbalmer
Copy link
Copy Markdown
Contributor Author

sbalmer commented Dec 21, 2015

The mapping now allows switching to the last used effect unit by pressing FX. The preselected effect depends on the deck. So when you press FX on deck 3, it switches to effect unit 3 unless you've selected another unit for that deck previously. I'm not sure this is sensible. We could also preselect effect unit 1 for all decks initially. (This is what happens when eqModePerDeck is off.)

@sbalmer
Copy link
Copy Markdown
Contributor Author

sbalmer commented Dec 21, 2015

I've spent some time reflecting on the red/blue lighting of the soft buttons. We could swap the logic with the lights so that pressing one of the soft buttons enables or disables an effect for the channel (red), and holding FX lets you select the active effect unit for this deck (blue).

I think we use two different mental models for the device modes:

  1. "Separate FX" has the five modes EQ, FX1, FX2, FX3, and FX4 on each side
  2. "Combined FX" has two modes EQ and FX, where FX has sub-modes 1, 2, 3, and 4.

So in "Separate FX" model one would think "Now I need to control effects in unit 1 and I do that on the left side" and would press left soft button 1. In this model the effect units are not tied to a deck, and controlling an effect on the master channel, or controlling two effects for one channel is expected. This is the way I'm currently using the effects. I have the effect chains statically assigned, say a Filter effect on unit 1 and a Reverb effect on unit 2. Then I enable effect unit 1 for the deck that I want to use the Filter on.

In the "Combined FX" model one would think "I want to control the effect for deck 1" and would press left FX. In this model the effect units are tied to a channel. I realize that eqModePerDeck is also a step in that direction, and pressing FX to control an effect only makes sense in that model. I think that you see things more from that perspective. In this model you would change the effect chain in unit 1 to get a different effect on deck 1.

Coincidentally, my 3d mapping uses the "Combined FX" model.

@Pegasus-RPG
Copy link
Copy Markdown
Member

So when you press FX on deck 3, it switches to effect unit 3 unless you've selected another unit for that deck previously. I'm not sure this is sensible.

That will be fine. I'm sure a major use case is to use a single separate effect on each deck.

We could also preselect effect unit 1 for all decks initially.

That might be worth making an option at the top of the script as well.

I think we use two different mental models for the device modes:

My mental model is somewhere between the two. Obviously some of the power of Mixxx's effect units is that they can be assigned to any channel, or multiple simultaneously. I really like the way you have made the SCS.3m able to completely accomplish that and want to keep that behavior.

I think where we're differing is that I see the EQ and FX buttons as "slider mode" buttons, telling the user what the sliders above them are controlling. So it's possible to meld the two paradigms in this way: if a user presses the FX button, they'll control the last-edited effect unit (which you've now defaulted to the one matching the deck number, so this works for those expecting unit-to-deck correlation,) and at the same time if a user presses any of the four soft buttons, they'll edit that effect unit, regardless of to which channels it's assigned. (The current behavior.) I was just wanting the FX light to be red when that happens so it's clear that the sliders are controlling effect parameters.

I haven't had a chance to test since 6 days ago, so let me see how things are in the current iteration before you do anything else. I have a feeling everything is fine now.

@sbalmer
Copy link
Copy Markdown
Contributor Author

sbalmer commented Dec 22, 2015

if a user presses the FX button, they'll control the last-edited effect unit (which you've now defaulted to the one matching the deck number, so this works for those expecting unit-to-deck correlation,) and at the same time if a user presses any of the four soft buttons, they'll edit that effect unit, regardless of to which channels it's assigned. (The current behavior.) I was just wanting the FX light to be red when that happens so it's clear that the sliders are controlling effect parameters.

I think you've described the current state exactly :-)

I haven't had a chance to test since 6 days ago, so let me see how things are in the current iteration before you do anything else.

I don't have plans to change the behaviour further.

One last thing I've experimented with is to prevent enabling or disabling wet effects on live channels as a safety feature. It can save you from a blunder like changing an effect that is being used on another channel. Because the logic does not know about the neutral positions of the different effects, it does not allow adding wet effects to live channels. This is pretty irritating to me because I habitually disable the Filter effect on live decks when it's fully wet but neutral. So I'm not sure how I like this attack on my liberty to blunder. If you think this would be a useful addition see commit 91bbff7.

@Pegasus-RPG
Copy link
Copy Markdown
Member

That sounds like something Mixxx should support in the central configuration, much like "Don't allow loading tracks to playing decks" is now. Care to file another bug? :)

@sbalmer
Copy link
Copy Markdown
Contributor Author

sbalmer commented Dec 22, 2015

Thanks for all the help so far!

I will be away from my devices the next few days so while I might be able to comment I won't be able to do much work on them. I'm ok with merging the current state. The commits I added in the last two days have not seen any live use, I only tested them quickly for the properties I expected to change.

Pegasus-RPG added a commit that referenced this pull request Dec 23, 2015
sbalmer's SCS3 mappings with support for four decks
@Pegasus-RPG Pegasus-RPG merged commit e3eb244 into mixxxdj:master Dec 23, 2015
@Pegasus-RPG
Copy link
Copy Markdown
Member

Thank you very much!

@Pegasus-RPG
Copy link
Copy Markdown
Member

Aw crap this was against Master. We'll fix it.

@Be-ing
Copy link
Copy Markdown
Contributor

Be-ing commented Dec 23, 2015

I don't see the old 3M mapping being replaced in this PR. Is that what is intended?

@Pegasus-RPG
Copy link
Copy Markdown
Member

Yes, I'm going to take care of that.

@Be-ing
Copy link
Copy Markdown
Contributor

Be-ing commented Dec 23, 2015

@sbalmer Can you update http://mixxx.org/wiki/doku.php/stanton_scs.3m to only describe the new mapping?

@Pegasus-RPG
Copy link
Copy Markdown
Member

@Be-ing I'll take care of that too

rryan added a commit that referenced this pull request Dec 23, 2015
@rryan
Copy link
Copy Markdown
Member

rryan commented Dec 23, 2015

I re-based this onto 1.12 and then merged it in be035b6.

@rryan
Copy link
Copy Markdown
Member

rryan commented Dec 23, 2015

Many thanks for your work and patience @sbalmer with this months-long code review!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants