Hello everyone,

Since the time I have been a part of Mixxx I always wanted to have a
more challenging role in the Mixxx development process. I have been
following the IRC and the mailing list and have fixed a handful of
bugs so far. I am a hard worker and always willing to go that
extra-mile.

I want to participate in GSoC this year, and Mixxx being a part of
this is my only choice for application. The 'Midi learning feature' of
Mixxx as one of the features that is underdeveloped in Mixxx as well
as in other commercial Dj softwares. Adding a point and click
functionality to the MIDI learning feature will greatly enhance the
experience of DJ that have to map various controllers that do not come
supported with Mixxx. I hope you will read and give in your
suggestions about what I have thought so far.

Before I proceed with explaining what and how I plan to design the
feature, I found the following shortcomings in the current MIDI
learning feature of Mixxx from a usability and tech standpoint, after
using it to map a MIDI myself:

1) The associations (mappings) are represented in tabular format which
bear no resemblance to how a person visualizes relationships. On has
to scroll the table and see the channel and control value fields to
know the mapping, the associations aren't obvious.
2) The whole MIDI learning process is a very long one. Since it has a
linear flow, it makes it difficult to know which control to be mapped
lies ahead (might confuse DJs using pads that don't come with any
labeling, DJs will need to write the mappings down!). So to map all
the MIDI controls, one has to go through the entire process till the
last mapping is done or the wizard ends.
3) When I counted the number of controls available through the 'Add'
functionality for a Deck (CH:1 or CH:2), they were 78 (not counting
the other deck, mic, samplers and flanger). The total available
controls in the MIDI learning wizard are something like 132. So... the
wizard omits certain controls, this needs to be addressed.
4) We can't use controls as we map them, this prevents a DJ from
getting the feel of the setup. Controls like potmeters (encoders...
knobs etc) need to be checked out for the right sensitivity and
accelerations. The midi settings apply only after clicking OK in the
preferences window. Traktor offers this feature.
5) The dialog style of the MIDI learning wizard is not that of the
skin, it does not give a blended feel to the process. Again this is
something most DJ softwares lack (like VDJ), except Traktor that has
it all skinned. (No I am not a Traktor fan, but it's good and
expensive :-X)
6) When one control is mapped in the MIDI learning wizard and we move
on to the next, clicking previous does not restore the previously
mapped values onto the wizard, though they remain effective in the
mapping table. Moreover tweaking a control at this point assigns it.
It issues no warning to the user that it is overwriting a previous
value. Similarly, when a new control is assigned a MIDI control that
was previously assigned to another control, the assignment takes place
without any warning.
7) Mixxx controls that are mapped can be identified in the table by
using the value pair of control-group and control-value. While mapping
the " 'Add' control route" the control-value values are more like our
programming values that even follow the camel case convention. These
are not at all descriptive, values like 'pfl' (pre-fader listen),
playposition, back etc are not at all descriptive and totally opposite
of our 'beginner' friendly tooltip laden UI.

For the point-and-click implementation I had several doubts regarding
how we will utilize the screen real-estate to incorporate the
representation of the mapped data without much of a variation in the
UI. Also need to discuss how we should go about representing the
invisibly controls like hotcues 5- 36 on the same UI.

The feature I wish to implement, besides overcoming the above
mentioned shortcomings will also provide features in the
point-and-click midi learning like:
-Hovering above a control automatically display the midi note its mapped to.
-All assigned (Mapped) controls on Mixxx ui will be highlighted to
indicate they are already mapped.
-When one clicks a control, (say for in skin Deere), the waveform area
(which is blanked out when MIDI wizard starts) on the right will
display the control description, control-group, control-value, status
(if mapped or not) [Need to discuss these details] and the one on the
right will display the Mapping features for the given control like
mapped-to channel x, status, number etc [Again need to refine this]
and a reset button to reset values.
-Sensitivity and acceleration sliders for encoders (knobs).

=>I have decided to incorporate the descriptive info into the waveform
widget since it is the part of the skin that that wont be a
representation of a control. As far as jog wheels are concerned,  we
use the overview waveform for that. I need you views on this. More on
the technical aspects...

I tried my hand at creating a dialog that morphs over the Mixxx skin,
so I have thought about utilizing the waveform display area of the
skin to incorporate the reset, sensitivity and acceleration sliders
(yes I am considering auto-generated midi scripts too) etc. Qt does
not offer any straight forward way of creating translucent windows and
the resulting code that does so isn't platform independent. I thus
sought the use of QMask to only cover the areas (QRegion's) occupied
by the waveform widget, its works smooth and is platform independent.

For the issue of discovering the widgets that are under the cursor's
hover, I plan to utilize the <size> tag in the skin.xml. Since Mixx is
shipped with resolution dependent skins, the sizes and positions of
the widgets vary for each skin. Currently the <size> tag isn't used in
the Mixxx code but is supported by the skin.xml, we could utilize this
information to locate the widget that should be highlighted on mouse
hover. I will have to hardcode these values though since the
computational overhead of calculating these values from their loaded
images is too much and not required.

I am thinking of implementing a smart algorithm that will calculate
the widget that must be highlighted on mouse over very fast (thinking
of a divide-n-conquer way by splitting screen into logical sections).

What follows of how we map the controller and everything is pretty
much well done by team Mixxx and I'll possibly need to just tweak the
code a little.

MIDI support for any DJ software is crucial, that is essentially what
makes gigs possible. Often various commercial softwares do not support
MIDI for their free versions (e.g Virtual DJ home), what Mixxx offers
is a premium feature and thus I want to make sure that Mixxx looks
best here in comparison to other softwares. DJs tend to use a wide
variety of controllers and providing mappings for each isn't possibly
also customizations are desired. So most DJs with bigger setups (or
different controllers) always end up using the MIDI learning feature.
All DJ
softwares have a very basic MIDI learning interface, VDJ being the
worst and Traktor offers a better interface with more options for
encoders like acceleration and sensitivity (This is also possible in
Mixx but needs scripting). What all the softwares follow is a two
level model select
channel and its associated controls appear) which is also followed in
Mixxx's 'Add' feature. What must be noted is that, it is oly Mixxx
which offers a separate MIDI learning wizard, whole other solutions
have integrated the learning part with the 'Add' like feature they
offer. Thus having an 'ahead of all' MIDI learning feature will not
only make Mixxx more usable but also be a trend setter for other DJ
softwares.

I am interested in working with Mixxx for GSoC and feel it is the best
place where I could be and a place meant for me. I'll love to be a
part of it. I would choose to do another project (other than
Point-And-Click Controller Mapping) if need be rather than not doing
anything at all.

Hope you guys have read the whole mail :P. Please tell me your
suggestions and advice. I am working on making a screenshot dummy.
Thats coming soon....



Thank you,
Akash. Shetye

------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Mixxx-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Reply via email to