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
