Hello mixxx developers. I've been hacking beatcontrols branch, initially to test how it fits in scripting and skinning but now to restructure some interfaces. The beatcontrols branch introduces the concepts of: quantization, beatloop, beatseek.
Quantization uses the Beats interface to set Hotcues, Loop In, Loop Out to beats. Beatloop creates what might be known as Autoloop at beats with variable sizes, and beatseek jumps to Nth beats(either forward or backward) on next beat. >From testing it on tracks with low (detected) bpms, like dubstep at half-tempo 70 BPM(with usefull rhythm features at 140 BPM), I came to some conclusions. First, that Quantization should be configurable to beat divisions. Second that all beatcontrols should work with or without quantization. Knowing a track bpm, or with more precision having a Beats object, it's possible to know a beat metric and calculate from any sample a jump/loop of say 4 beats, 1/2 beat or 11/8 beat(for the loony beatjunglists). So I sketched a framework that works like this, from the user perspective: 1. Quantization When the user issues a command that depends on current sample position, quantization comes in(if it's on). These commands are: Loop In, Loop Out, Beat "jumping" starting point(ie. at which sample should the seek be executed), Auto Loop starting position, Hot Cues. Quantization can be very usefull at sub beat level for syncopation(at track or perfomance level). 2. Autoloop An autoloop has a size prior to trigger(shown in user interface and controllers where possible through scripting), and that's modifiable via user interface and scripting. On autoloop trigger a Loop In is set at current position(possibly quantized), and a Loop Out is set depending on the size. 3. Loop Moving With a current setup loop(active or not), the user can move it by an offset of known size. Loop in and Loop out is modified by this offset(forward or backward) 4. Beat Jumping and Beat Seeking Beat Seeking, as the name implies, is searching for next/previous Nth beat(or possibly with a fractional part), and jumping to it. The mechanics of when to jump, from a user view, is related to Quantization as said before. Beat Jumping is an instant jump of a known size, in terms of beats, quantization still in mind. The difference between the two is kind of cloudy when quantization is taken in consideration. I would define seeking as always searching next beat(whatever is the quantum) before using the size and jumping as using current position(with quantum in mind). 5. Loop Resize Loop Resize is setting a current set loop(active or not) to a different size, usually half or double of current size. There is the issue of whether Loop In or Loop Out is modified. Since much of this functionality can be done via manual Loop In or Loop Out, resizing with modifing only Loop Out is a good start. Loop Resize is kind of orthogonal to previous concepts, but I mention it here because it has implications on programmer view. The GUI can get quite confusing with all these features, so maybe we can have a simple starting skin without all these and an advanced one. >From a programmer/scripter/skinner perspective: 1. Quantization Engine commands that trigger on current sample(conventional scratching obviously excluded), should queue until next quantum for triggering. 2. Autoloop, Loop Modifications, Beat Jumping, Seeking Autolooping and Modifing a loop is simply setting Loop In and Loop Out positions based on some calculation. You have internals COs for autoloop size, current loopsize and intended loopmove size. Beat Jumping and Seeking is also that simple: setting current sample position based on calculations. I think that Beat Jumping/Seeking and Loop Move could use the same CO for size. With that in mind I started to hack and propose there changes: 1. Beat metric The concept that integrates user interface to calculations on loop in, loop out and curret sample position is beat metric: based on bpm, or Beats, what is are the sample relations in terms of beats? beatsLengthToOffset and offsetToBeatsLength are the functions designed for these, which I found Beats interface to be the best place. 2. ControlObjects and ControlPushButtons helpers There are ControlObjects for loop size, autoloop size, beatjump/seek size, and helper ControlPushButtons for convetional use. The CO are script manipulable for unconventional use. The COs are: [channelN,loop_size], [channelN,autoloop_size], [channelN,move_size] The CPBs are: [channelN,loop_half], [channelN,loop_double], [channelN,autoloop_half], [channelN,autoloop_double], [channelN,autoloop], [channelN, move_half], [channelN, move_double], [channelN, loop_fwd], [channelN, loop_back], [channelN, beatseek_fwd], [channelN, beatseek_back], [channelN, beatjump_fwd], [channelN, beatjump_back] As far as code goes, I think all loop modification and setting(autoloop) fits in LoopingControl. Beatcontrol should have current positions moves, but generalized to non-quantum ones too. Quantization needs some CO for quantum size, LoopIn and LoopOut need to enque commands if quantized. Everything should use new functions on beats interface for offset calculation, except beatseek which beats already calcuates. On my branch (lp:~vininim/mixxx/beatcontrol-hack), loop resize and quantized autoloop are implemented(reusing beatcontrol beatloop), so I would like to know what you developers think before implementing the other features, and adapting beatcontrol to this design. I want these features in main branch(not exactly the hack I'm doing :)), some could probably go into 1.10, others will have to wait. There is also some implementation of how to show sizes to GUI with WRation, but it's kind of orthogonal issue too. Also how does feature freeze work wrt to patchs(or merge proposes) and code reviews? ------------------------------------------------------------------------------ Enable your software for Intel(R) Active Management Technology to meet the growing manageability and security demands of your customers. Businesses are taking advantage of Intel(R) vPro (TM) technology - will your software be a part of the solution? Download the Intel(R) Manageability Checker today! http://p.sf.net/sfu/intel-dev2devmar _______________________________________________ Mixxx-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mixxx-devel
