On Tue, Jan 29, 2008 at 09:59:09PM -0800, Tom Jennings wrote:
> I get, vaguely, how MIDI mapping works, and is done (ugh,
> XML in vi, but I've done worse things).
>
> But I'm missing how the "primitives" that mixxx supports are
> specified.
>
> So a (example) jog wheel generates ROTATE-CLOCKWISE (CW) and
> ROTATE-COUNTERCLOCKWISE (CCW) events issued as MIDI command
> strings. But where and/or how is the mixxx-function-mapped-to
> that performs the "increase playback rate in forward direction"
> (map to CW) or "increase playback rate in reverse direction"?
Well, you'll have to hope your jog *doesn't* work like that because
mixxx couldn't handle different messages for different directions
as things stand... :)
> There's two things hidden in that question: one of mapping
> mechanism (syntax, etc)
By far the best way to find that out is to look at the existing
map files, particularly the Xponent one which has an accompanying
README which may help to make things clearer. Bear in mind that
different controllers do things in somewhat different ways, and
jog wheels are currently the most "individual" feature so there
are currently 3 different controls: 'wheel', 'scratch' and 'jog'.
I don't like this situation at all, I think there should be one
control and everything else should be translated to suit it using
midioptions, but there it is, all I could do in the end was get
it working for my controller and try not to break Hercules. Most
of the weirdness is down to Hercules at the end of the day.
> and the other is the more-occult
> paradigm, eg. how does jogging actually work at the interface
> level?
>
> I mean, playing normal speed is a function of mp3 bitrate and
> all; let's call that speed 1X. Given nothing else, mixxx clearly
> plays tracks at that rate.
>
> In a "vinyl" model, I'd twist the EP clockwise/faster (positive
> sign) or drag finger-slow it (negative factor). Twisting the
> vinyl EP creates an accelleration rate (in my head and fingers
> and ear) that translates to a bunch of instantaneous playback
> speeds (1X ... 1X, 1.5X, 2X, 3X, ... 2.2X, 1.2X, 1X times
> normal rate). (Finger-drag-slowdown is the same, only the sign
> changes -- I think.)
>
> Does the controller need to maintain accelleration profile
> ("now play at 1X" ... "now play at 3X") or does mixxx build one,
> given a series of CW or CCW events from the MIDI jog dial?
Mixxx builds the playback speed every time it goes to process a
bunch of samples for playback. Lots of factors affect this:
* Is the track playing? (If not, there still might be samples to play,
eg if the jog wheel is being moved it will scrub through the audio)
* Pitch control
* Temporary pitch up/down buttons
* Fast-forward/rewind buttons
* Reverse button
* Jogwheel movement (including mouse drag on the waveform, which is the
same thing as the 'wheel' control, plus the mysterious 'scratch' and
'jog' controls)
Take a look at all the calculations for the variable 'rate' in
EngineBuffer::process()
Ben
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Mixxx-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mixxx-devel