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

Reply via email to