Did we ever get the mappings for the NuMark TotalControl merged into 
trunk ? Some people were asking on IRC about it.

-RJ


Albert Santoni wrote:
> Hi guys,
>
> Patch has been committed.
>
> Alex: Can you please send us your Numark MIDI mapping? (It should work
> with trunk now, right?)
>
> Thanks,
> Albert
>
> On Tue, 2008-06-17 at 14:58 +1000, Tom Care wrote:
>   
>> Hey guys,
>>
>>
>> Looks fine to me :)
>>
>>
>> During my refactoring of the MIDI system I may change a few things (to
>> do with generalising for other types of relative controls, as well as
>> a possible general structural change), but for the moment I'm sure
>> people will appreciate this!
>>
>>
>> Thanks
>>
>>
>> Tom
>>
>>
>>
>> On 17/06/2008, at 9:14 AM, Albert Santoni wrote:
>>
>>     
>>> Hi Tom,
>>>
>>> Patches are attached. 
>>>
>>> Alex: Tom's going to review and comment on or commit your MIDI
>>> patches.
>>> Sorry for taking so long to get going on these, we were just too
>>> close
>>> to the beta3 release when you sent them to us. We have a history of
>>> breaking MIDI accidentally before our releases, so I was trying to
>>> minimize the chance of that happening. :)
>>>
>>> Thanks,
>>> Albert
>>>
>>> From: Alex Markley <[EMAIL PROTECTED]>
>>>
>>> Date: 28 March 2008 9:59:31 AM
>>>
>>> To: mixxx-devel <[email protected]>
>>>
>>> Subject: [Mixxx-devel] Another MIDI Control Patch (Select Knob)
>>>
>>>
>>>
>>>
>>> This patch (not to be confused with my Diff Sensitivity patch)
>>> implements a MIDI track selection knob.
>>>
>>> On my controller, I have a track selection knob which reports a
>>> signed, relative number which should be interpreted as a number of
>>> clicks in a clockwise or counter-clockwise direction. (Depending on
>>> the sign.)
>>>
>>> In order to implement a slot which behaves properly, I had to add a
>>> MIDI_OPT_SELECTKNOB which should be useful in any situation where a
>>> relative control's current position shouldn't be remembered from
>>> event to event.
>>>
>>> My track selection knob also generates a button event if it is
>>> pressed down. Since this button does not specify a particular
>>> channel, I added a slotLoadSelectedIntoFirstStopped, which allows a
>>> MIDI button to behave like double-clicking a track in the library.
>>>
>>> Since this patch only adds features to the codebase (instead of
>>> altering older features) I don't expect it to affect anything else.
>>> It _should_ be safe to commit.
>>>
>>> Once Mixxx HEAD has all the code necessary to write a working MIDI
>>> mapping for the Numark Total Control, I'll be contributing a
>>> complete MIDI mapping which can be included in the next release. :)
>>>
>>> ttyl
>>> -- 
>>> Alex (Malex) Markley
>>> 740.927.3588 - http://MalexMedia.Net/ - http://SermonMP3s.com/
>>> Index: src/configobject.h
>>> ===================================================================
>>> --- src/configobject.h (revision 1900)
>>> +++ src/configobject.h (working copy)
>>> @@ -44,7 +44,8 @@
>>>     MIDI_OPT_BUTTON           = 6, // Button Down (!=00) and Button
>>> Up (00) events happen together
>>>     MIDI_OPT_SWITCH           = 7, // Button Down (!=00) and Button
>>> Up (00) events happen seperately
>>>     MIDI_OPT_HERC_JOG         = 8, // Generic hercules wierd range
>>> correction
>>> -    MIDI_OPT_SPREAD64         = 9  // Accelerated difference from
>>> 64
>>> +    MIDI_OPT_SPREAD64         = 9, // Accelerated difference from
>>> 64
>>> +    MIDI_OPT_SELECTKNOB       = 10,// Relative knob which can be
>>> turned forever and outputs a signed value.
>>> } MidiOption;
>>>
>>> typedef QMap<char,char> MidiValueMap;
>>> Index: src/configobject.cpp
>>> ===================================================================
>>> --- src/configobject.cpp (revision 1900)
>>> +++ src/configobject.cpp (working copy)
>>> @@ -179,6 +179,8 @@
>>>             midioption = MIDI_OPT_HERC_JOG;
>>>         else if (optname == "spread64")
>>>             midioption = MIDI_OPT_SPREAD64;
>>> +        else if (optname == "selectknob")
>>> +         midioption = MIDI_OPT_SELECTKNOB;
>>>         else {
>>>             qWarning() << "Unknown option:" << optname;
>>>             midioption = MIDI_OPT_NORMAL;
>>> @@ -240,6 +242,8 @@
>>>         midioption = MIDI_OPT_HERC_JOG;
>>>     else if (option.contains("Spread64", false))
>>>         midioption = MIDI_OPT_SPREAD64;
>>> +    else if (option.contains("SelectKnob", false))
>>> +        midioption = MIDI_OPT_SELECTKNOB;
>>>     else
>>>         midioption = MIDI_OPT_NORMAL;
>>>     // Store string with corrected config value
>>> @@ -293,6 +297,8 @@
>>>         value.append(" Diff");
>>>     else if (midioption == MIDI_OPT_SPREAD64)
>>>         value.append(" Spread64");
>>> +    else if (midioption == MIDI_OPT_SELECTKNOB)
>>> +        value.append(" SelectKnob");
>>>
>>>     qDebug() << "Config value:" << value;
>>>     //qDebug() << "--1, midino: " << midino << ", midimask: " <<
>>> midimask << ", midichannel: " << midichannel;
>>> @@ -361,6 +367,17 @@
>>>             _newmidivalue = _prevmidivalue + _newmidivalue;
>>>         }
>>>     }
>>> +    else if (midioption == MIDI_OPT_SELECTKNOB)
>>> +    {
>>> +        //Interpret 7-bit signed value using two's compliment.
>>> +        if (_newmidivalue >= 64.)
>>> +            _newmidivalue = _newmidivalue - 128.;
>>> +        //Apply sensitivity to signed value.
>>> +        if(sensitivity > 0)
>>> +            _newmidivalue = _newmidivalue * ((double)sensitivity /
>>> 50.);
>>> +        //Since this is a selection knob, we do not want to inherit
>>> previous values.
>>> +        return _newmidivalue;
>>> +    }
>>>     else if (midioption == MIDI_OPT_BUTTON)
>>>     {
>>>         if (_newmidivalue != 0.) {
>>> Index: src/track.h
>>> ===================================================================
>>> --- src/track.h (revision 1900)
>>> +++ src/track.h (working copy)
>>> @@ -121,9 +121,11 @@
>>>     /** Slots for loading the selected track into players */
>>>     void slotLoadSelectedTrackCh1(double);
>>>     void slotLoadSelectedTrackCh2(double);
>>> +    void slotLoadSelectedIntoFirstStopped(double);
>>>     /** Slots for moving the selection cursor in the track list */
>>>     void slotSelectNextTrack(double);
>>>     void slotSelectPrevTrack(double);
>>> +    void slotSelectTrackKnob(double);
>>>
>>>     /** Returns pointer to active playlist */
>>>     TrackPlaylist *getActivePlaylist();
>>> @@ -206,7 +208,7 @@
>>>     /** Pointer to ControlObject for next/prev buttons */
>>>     ControlObjectThreadMain *m_pNextTrackCh1, *m_pNextTrackCh2,
>>> *m_pPrevTrackCh1, *m_pPrevTrackCh2;
>>>     /** Pointer to ControlObject for playlist navigation/loading
>>> into Players */
>>> -    ControlObjectThreadMain *m_pLoadSelectedTrackCh1,
>>> *m_pLoadSelectedTrackCh2, *m_pSelectNextTrack, *m_pSelectPrevTrack;
>>> +    ControlObjectThreadMain *m_pLoadSelectedTrackCh1,
>>> *m_pLoadSelectedTrackCh2, *m_pLoadSelectedIntoFirstStopped,
>>> *m_pSelectNextTrack, *m_pSelectPrevTrack, *m_pSelectTrackKnob;
>>>     /** Pointer to ControlObject for play position */
>>>     ControlObjectThreadMain *m_pPlayPositionCh1,
>>> *m_pPlayPositionCh2;
>>>     /** Pointer to waveform summary generator */
>>> Index: src/track.cpp
>>> ===================================================================
>>> --- src/track.cpp (revision 1900)
>>> +++ src/track.cpp (working copy)
>>> @@ -214,12 +214,16 @@
>>>     // Make controls for tracklist navigation and current track
>>> loading
>>>     m_pLoadSelectedTrackCh1 = new ControlObjectThreadMain(new
>>> ControlObject(ConfigKey("[Channel1]","LoadSelectedTrack")));
>>>     m_pLoadSelectedTrackCh2 = new ControlObjectThreadMain(new
>>> ControlObject(ConfigKey("[Channel2]","LoadSelectedTrack")));
>>> +    m_pLoadSelectedIntoFirstStopped = new
>>> ControlObjectThreadMain(new
>>> ControlObject(ConfigKey("[Playlist]","LoadSelectedIntoFirstStopped")));
>>>     m_pSelectNextTrack = new ControlObjectThreadMain(new
>>> ControlObject(ConfigKey("[Playlist]","SelectNextTrack")));
>>>     m_pSelectPrevTrack = new ControlObjectThreadMain(new
>>> ControlObject(ConfigKey("[Playlist]","SelectPrevTrack")));
>>> +    m_pSelectTrackKnob = new ControlObjectThreadMain(new
>>> ControlObject(ConfigKey("[Playlist]","SelectTrackKnob")));
>>>     connect(m_pLoadSelectedTrackCh1, SIGNAL(valueChanged(double)),
>>> this, SLOT(slotLoadSelectedTrackCh1(double)));
>>>     connect(m_pLoadSelectedTrackCh2, SIGNAL(valueChanged(double)),
>>> this, SLOT(slotLoadSelectedTrackCh2(double)));
>>> +    connect(m_pLoadSelectedIntoFirstStopped,
>>> SIGNAL(valueChanged(double)), this,
>>> SLOT(slotLoadSelectedIntoFirstStopped(double)));
>>>     connect(m_pSelectNextTrack, SIGNAL(valueChanged(double)), this,
>>> SLOT(slotSelectNextTrack(double)));
>>>     connect(m_pSelectPrevTrack, SIGNAL(valueChanged(double)), this,
>>> SLOT(slotSelectPrevTrack(double)));
>>> +    connect(m_pSelectTrackKnob, SIGNAL(valueChanged(double)), this,
>>> SLOT(slotSelectTrackKnob(double)));
>>>
>>>     TrackPlaylist::setTrack(this);
>>>
>>> @@ -1147,11 +1151,22 @@
>>>         // Fetch the currently selected track
>>>         index =
>>> m_pView->m_pTrackTableView->m_pSearchFilter->mapToSource(m_pView->m_pTrackTableView->currentIndex());
>>>         pTrack =
>>> m_pView->m_pTrackTableView->m_pTable->m_pTrackPlaylist->getTrackAt(index.row());
>>> - // If there is one, load it
>>> +        // If there is one, load it
>>>         if (pTrack) slotLoadPlayer2(pTrack);
>>>     }
>>> }
>>>
>>> +void Track::slotLoadSelectedIntoFirstStopped(double v)
>>> +{
>>> +    if (v)
>>> +    {
>>> +        if
>>> (ControlObject::getControl(ConfigKey("[Channel1]","play"))->get()!
>>> =1.)
>>> +            this->slotLoadSelectedTrackCh1(v);
>>> +        else if
>>> (ControlObject::getControl(ConfigKey("[Channel2]","play"))->get()!
>>> =1.)
>>> +            this->slotLoadSelectedTrackCh2(v);
>>> +    }
>>> +}
>>> +
>>> void Track::slotSelectNextTrack(double v)
>>> {
>>>     // Only move on key presses
>>> @@ -1164,6 +1179,24 @@
>>>     if (v) m_pView->m_pTrackTableView->selectPrevious();
>>> }
>>>
>>> +void Track::slotSelectTrackKnob(double v)
>>> +{
>>> +    int i = (int)v;
>>> +    while(i != 0)
>>> +    {
>>> +        if(i > 0)
>>> +        {
>>> +            m_pView->m_pTrackTableView->selectNext();
>>> +            i--;
>>> +        }
>>> +        else
>>> +        {
>>> +            m_pView->m_pTrackTableView->selectPrevious();
>>> +            i++;
>>> +        }
>>> +    }
>>> +}
>>> +
>>> void Track::slotNextTrackPlayer1(double v)
>>> {
>>>     if (v && m_pTrackPlayer1)
>>> <patch_selectknob.patch.asc>-------------------------------------------------------------------------
>>> Check out the new SourceForge.net Marketplace.
>>> It's the best place to buy or sell services for
>>> just about anything Open Source.
>>> http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
>>> _______________________________________________
>>> Mixxx-devel mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/mixxx-devel
>>>
>>>
>>>
>>> From: Alex Markley <[EMAIL PROTECTED]>
>>>
>>> Date: 28 March 2008 7:57:41 AM
>>>
>>> To: Ben Wheeler <[EMAIL PROTECTED]>, mixxx-devel
>>> <[email protected]>
>>>
>>> Subject: Re: [Mixxx-devel] MIDI Control Patch
>>>
>>>
>>>
>>> Ben Wheeler wrote:
>>>       
>>>> Should that last line be
>>>>           _newmidivalue = _prevmidivalue + _newmidivalue;
>>>> ?
>>>> Otherwise it seems like the formula no longer incorporates
>>>> the previous value...
>>>>         
>>> Haha, wow... Oops. :-P
>>>
>>> Revised patch attached.
>>>
>>> -- 
>>> Alex (Malex) Markley
>>> 740.927.3588 - http://MalexMedia.Net/ - http://SermonMP3s.com/
>>> Index: src/configobject.cpp
>>> ===================================================================
>>> --- src/configobject.cpp (revision 1900)
>>> +++ src/configobject.cpp (working copy)
>>> @@ -355,11 +355,14 @@
>>>     }
>>>     else if (midioption == MIDI_OPT_DIFF)
>>>     {
>>> -        if (_newmidivalue > 64.) {
>>> -            _newmidivalue = _prevmidivalue - 128. + _newmidivalue;
>>> -        } else {
>>> -            _newmidivalue = _prevmidivalue + _newmidivalue;
>>> -        }
>>> +        //Interpret 7-bit signed value using two's compliment.
>>> +        if (_newmidivalue >= 64.)
>>> +            _newmidivalue = _newmidivalue - 128.;
>>> +        //Apply sensitivity to signed value.
>>> +        if(sensitivity > 0)
>>> +            _newmidivalue = _newmidivalue * ((double)sensitivity /
>>> 50.);
>>> +        //Apply new value to current value.
>>> +        _newmidivalue = _prevmidivalue + _newmidivalue;
>>>     }
>>>     else if (midioption == MIDI_OPT_BUTTON)
>>>     {
>>> <patch_diffsensitivity.patch.asc>-------------------------------------------------------------------------
>>> Check out the new SourceForge.net Marketplace.
>>> It's the best place to buy or sell services for
>>> just about anything Open Source.
>>> http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
>>> _______________________________________________
>>> Mixxx-devel mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/mixxx-devel
>>>
>>>
>>>       
>>     
>
>
> -------------------------------------------------------------------------
> Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
> Studies have shown that voting for your favorite open source project,
> along with a healthy diet, reduces your potential for chronic lameness
> and boredom. Vote Now at http://www.sourceforge.net/community/cca08
> _______________________________________________
> Mixxx-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mixxx-devel
>   


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Mixxx-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Reply via email to