we definitely need them, which is basically part of the modifier system we
have been discussing:
http://mixxx.org/wiki/doku.php/modifier_system
so you'd be able to map a control to change or query a modifier from xml,
javascript or the gui.
it might also be nice to have a builtin layer system with led recall. i
implemented something like that for my novation launchpad mapping (in the
trunk now) that flips between two pages, one for the main controls and one
for a virtual mixer. when the page is flipped all led's reset to what they
need to be for that page. this may be useful for 'banking' a subset of
controls on other controllers - but probably far less useful than the need
for a modifier/shift.
i agree it needs to be possible to map most of what people need just via
the gui and hence xml, without having to resort to any scripting.
the xml needs to support more than just "only if this shift is set" option
though. even traktor allows a control to depend on up to two modifiers and
each modifier can have the values 0 to 8.
vdj allows the use of the ternary operator to construct conditionals that
are mapped to controls. we probably don't need that as people can resort to
javascript for really complex stuff, but it would be nice to at least be
able to map something like this as a condition "channel1_play = true &&
modifier1 == 1 && modifier2 > 3 && modifier3 != 'fish'"
allowing some syntax to set modifers from within the xml like "modifier1 ==
1 && modifier1 = 2" would allow latching values, like the 3 fx modes in the
herc mk2 mapping. we'd have allow multiple entries in the xml for the same
status/midino tho for that to work well.
while we're at it, simplifying the xml format to use attributes so it's
easier to manually code would be great ;) i'd also like to see "names"
adding in there so that you can refer to that control via name in any
script which keeps most of the nasty actual midi spec in the xml file where
it should be.
something like this:
<control name="my_button" status="0xb0" midino="0x04" group="[Channel1]"
key="play" condition="modifier1" />
it would also be nice if we optionally allowed type+channel to be used in
place of status, starting at channel1 and not 0, to make it more readable
by non-geeks:
<control name="my_button" type="cc" channel="1" midino="0x04"
group="[Channel1]" key="play" condition="modifier1" />
i'd also quite like it if optionally the devices definition file didn't
have to contain <key> elements, and they can be added in via a separate
"mapping" xml file, which would allow users to define their own mappings
more simply for controllers we have already mapped as *most* controllers
don't allow the user to select what midi it should send.
so then this might be a line from a mapping xml file, using the predefined
definition of "my_button":
<control name="my_button" key="play" condition="modifier1" />
On 2 June 2012 20:57, Owen Williams <owilli...@mixxx.org> wrote:
> A lot of midi controllers have a "shift" key, which effectively doubles
> the number of buttons by allowing the user to hold the shift button
> while pressing another to activate secondary behavior.
>
> Because the controller xml spec doesn't support buttons with
> dual-functions, this means a lot of logic is in javascript files. The
> actual logic is pretty simple, but it means that any button that could
> have two functions must be defined in the javascript file.
>
> While it's nice to have javascript to do advanced configuration, I think
> that shift functions are common enough that they should be directly
> supported. I think it would be fairly straightforward to add support
> for shift buttons inside the xml spec itself.
>
> First, the xml file would have a basic button declaration for shift.
> The shift buttons would just be simple pushbutton control objects:
>
> <control>
> <status>0x80</status>
> <midino>0x04</midino>
> <group>[Master]</group>
> <key>shift_1</key>
> <options>
> <button/>
> </options>
> </control>
>
> We could have support for up to 4 shift buttons, although most
> controllers only have 1.
>
> Then, designating one button to do two things would be done by creating
> two items for the same midi control and specifying a term in the
> <options> tag of one of them.
>
> <control>
> <status>0x80</status>
> <midino>0x14</midino>
> <group>[Channel1]</group>
> <key>hotcue_1_activate</key>
> <options>
> <button/>
> </options>
> </control>
>
> <control>
> <status>0x80</status>
> <midino>0x14</midino>
> <group>[Channel1]</group>
> <key>hotcue_1_clear</key>
> <options>
> <button/>
> <shift_1/>
> </options>
> </control>
>
>
> As far as implementing this in Mixxx, here's the todo:
> * the midi code would need to support multiple mappings for one key
> (insertMulti).
> * If a midi button is pushed the midi code will get multiple
> notifications, but only one will match the current shifted state. The
> midi code would just have to know about the shift_X control objects and
> check their status when receiving the event.
> * the learning wizard would need to be tweaked to understand and create
> shifted functions.
>
> I think this would fit in to Mixxx pretty easily, though it's not worth
> delaying 1.11 for. Existing controller configurations wouldn't be
> broken, and new configurations could do clever things like having
> shifted script activation.
>
>
> And, of course, I wouldn't have to write any javascript for the
> controller I'm working on right now :)
>
> Owen
>
>
>
> ------------------------------------------------------------------------------
> Live Security Virtual Conference
> Exclusive live event will cover all the ways today's security and
> threat landscape has changed and how IT managers can respond. Discussions
> will include endpoint security, mobile security and the latest in malware
> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
> _______________________________________________
> Get Mixxx, the #1 Free MP3 DJ Mixing software Today
> http://mixxx.org
>
>
> Mixxx-devel mailing list
> Mixxx-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/mixxx-devel
>
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org
Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel