Quick Sign In:  

Forum: VirtualDJ Plugins

Topic: Need help with creating a mapper for M-Audio IControl, have most of the midi function codes

This topic is old and might contain outdated or incorrect information.

I hope someone can help me here.
My Request is if someone with c++ skill could help me create a mapper for The M-Audio Icontrol to use in virtual DJ.
A Pal of mine use's Garage Band on the mac and had a spare icontrol that was well used. Well being a fiddler i wondered if it could be used outside of garage band.
Now using midi-ox on windows pc i have created a list of midi codes it uses and found that if you send the same code back certain buttons light up.
In Virtual Dj I have got all the buttons as well as dials (encoders) and volume slider.
Now i have written in pascal years ago but not c++ so would not really know where to start.
I also have a few ideas looking at the available functions/feedback that VDJ gives you.
Link to picture of icontrol in case you don't have one handy

http://macgroup.infopop.cc/eve/forums/a/tpc/f/4646075902/m/3551064471

For Icontrol transport funtion
Rec = Cue, Reset to start = ?, rewind = rewind , Play=Play pause, fforward = fforward, cycle = bpm/pitch match
dial = scratch function
track/parameter buttons = deck1 top, deck2 botton

on all the set buttons = loops 1-7

for the rec,volume,sound buttons i have them set as follows

deck 1- 2 = bass/mid/hi kill, dial = gain
sounds effect deck 1 -2 on next set
pitch bend/reset/pitch up/down on dial

bottom row is video effects
volume is cross over mixer
there are still many more buttons to use so if you have one lying around it might make a good project, they are also cheap on ebay.
Now to use the leds all you have to do is send 127 back as a midi command and it lights up, 0 to turn off.

so if we read back from vitual dj the BassKill,MediumKill,HighKill; values for each deck we can iluminate the first two rows showing those value for on/off

The track/parameter leds could show which deck is selected with the 'Selected;' value
you could also flash them with the 'BeatLed;' value to show beat directly on the unit (a toggle for this on off would be usefull)

play/pause could show playing value;
rec could show beatlocked; value
Automix could show on option

Now as VDJ supports the icontrol as a midi device throught windows the icontrol output to vdj is taken care of already by them so it's mainly reading the value from vdj and outputting them as midi control even out to icontrol
using a ini file you could have a controlable setup and be able to change the values for tweaking for other devices that use this same method for feedback.
Attach is the .xml for the icontrol for input only. this is my setup i used to try this out so you could come up with you own tweaks or a new one altogether
Tip, hold the key down until you click ok for saving so it keep the value of 127 and not '0', you can also toggle between momerty action (event only happens while key is pressed , good for sound effects/loops) and click lock on, click lock off (like the bass/mid/hi kill)
I am going to play with the c++ and see what i can come up with (my mac friend would also like to see it in mac version too )

Before i forget the .xml midi info

<?xml version="1.0" encoding="windows-1252"?>
<midi version="5" date="13/02/2009">
<ctrl ctrl="109" mode="button" ctrlvalue="128" action="play_pause" />
<ctrl ctrl="7" mode="slider" action="crossfader" scale="0" />
<ctrl ctrl="24" mode="encoder" encodermode="0" action="scratch" chan="active" increments="1" />
<ctrl ctrl="106" mode="button" action="pause_stop" value="auto" />
<ctrl ctrl="64" mode="button" ctrlvalue="128" action="kill_bass" chan="1" value="temporary " />
<ctrl ctrl="80" mode="button" ctrlvalue="128" action="kill_medium" chan="1" value="temporary " />
<ctrl ctrl="72" mode="button" ctrlvalue="128" action="kill_high" chan="1" value="temporary " />
<ctrl ctrl="104" mode="button" action="select" chan="1" value="temporary " />
<ctrl ctrl="105" mode="button" ctrlvalue="128" action="select" chan="2" value="temporary " />
<ctrl ctrl="24" mode="encoder" encodermode="0" action="scratch" increments="1048" />
<ctrl ctrl="65" mode="button" ctrlvalue="128" action="kill_bass" chan="2" value="temporary " />
<ctrl ctrl="81" mode="button" ctrlvalue="128" action="kill_medium" chan="2" value="temporary " />
<ctrl ctrl="73" mode="button" ctrlvalue="128" action="kill_high" chan="2" value="temporary " />
<ctrl ctrl="111" mode="button" action="sync" />
<ctrl ctrl="16" mode="encoder" encodermode="0" action="gain" chan="1" increments="20" />
<ctrl ctrl="17" mode="encoder" encodermode="0" action="gain" chan="2" increments="20" />
<ctrl ctrl="107" mode="button" ctrlvalue="128" action="cue_stop" />
<ctrl ctrl="23" mode="encoder" encodermode="0" action="video_crossfade" increments="20" />
<ctrl ctrl="106" mode="button" ctrlvalue="128" action="pause" />
<ctrl ctrl="99" mode="button" action="video_trans" />
<ctrl ctrl="18" mode="encoder" encodermode="0" action="pitch" chan="1" increments="30" />
<ctrl ctrl="19" mode="encoder" encodermode="0" action="pitch" chan="2" increments="30" />
<ctrl ctrl="82" mode="button" ctrlvalue="128" action="pitch_reset" chan="1" />
<ctrl ctrl="83" mode="button" ctrlvalue="128" action="pitch_reset" chan="2" />
<ctrl ctrl="74" mode="button" ctrlvalue="128" action="pitch_bend" chan="1" value="temporary 1000" />
<ctrl ctrl="71" mode="button" ctrlvalue="128" action="video_fx" value="temporary Negative" />
<ctrl ctrl="79" mode="button" ctrlvalue="128" action="video_fx" value="Ghost" />
<ctrl ctrl="79" mode="button" ctrlvalue="128" action="video_fx_param" value="800" />
<ctrl ctrl="87" mode="button" ctrlvalue="128" action="video_fx" value="Sonique" />
<ctrl ctrl="87" mode="button" ctrlvalue="128" action="video_fx_param_2" value="1000" />
<ctrl ctrl="95" mode="button" ctrlvalue="128" action="video_fx" value="Boom_auto" />
<ctrl ctrl="95" mode="button" action="video_fx_param" value="800" />
<ctrl ctrl="99" mode="button" action="show_pannel" value="1" />
<ctrl ctrl="100" mode="button" action="show_pannel" value="2" />
<ctrl ctrl="101" mode="button" action="show_pannel" value="7" />
<ctrl ctrl="88" mode="button" ctrlvalue="128" action="sample_play" value="1" />
<ctrl ctrl="89" mode="button" ctrlvalue="128" action="sample_play" value="2" />
<ctrl ctrl="90" mode="button" ctrlvalue="128" action="sample_play" value="3" />
<ctrl ctrl="91" mode="button" ctrlvalue="128" action="sample_play" value="4" />
<ctrl ctrl="92" mode="button" ctrlvalue="128" action="sample_play" value="5" />
<ctrl ctrl="93" mode="button" ctrlvalue="128" action="sample_play" value="6" />
<ctrl ctrl="94" mode="button" ctrlvalue="128" action="sample_play" value="7" />

</midi>

scratch function needs tweaking
You will notice video function also use the same midi codes for setting fx parameters, i have noticed that some plugins crash when chosen via key shortcut (which in effect is all the midi codes from icontrol are doing, in both digital and analog values)
I will also look at a skin at a later date, but have my hands full with this project.
I am not sure what other midi products(control sufaces) out there would also benifit from this project, but i am asuming that any using the midi events codes to control the surface(feedback) would. i have looked into the midi protocol and it's complicated for me but i did pick up the fact the codes are broken in to MSB/LSB codes, event codes, System exclusive ( seems to be a channel to send non midi defined protocol for device specific operations) .
Using MIDI-OX i could read all of the values for icontrol and using the send midi command option i was able to turn on all the lights at will. if you loop the midi out to midi in channels of the icontrol then the unit turns on the led when you press the button
That gave me the idea of have a button on the icontrol which toggles iluminate all/while pushed/while active for a boolean value(true false values like bass kill)
another idea is have a toggle to turn the individule rec/colume/headphone buttons into led db meter.

Well hope this info is helpful to anyone out there and if anyone is willing to help on the c++ code i would be gratefull
Regards







 

Posted Mon 16 Feb 09 @ 2:10 pm
cstollPRO InfinityMember since 2004
You can not just write a mapper for a device that does not have an existing Native reference. And the M-Audio iControl does not have native support in VirtualDJ as you imply. So, as you have already mapped the MIDI codes to the General MIDI this is how you will need to use it.

 

Posted Mon 16 Feb 09 @ 8:49 pm
Shame, that's sad news. I felt that from what i had read it would be possible to send out midi codes of your choice. so even if i could code in c++ virtualdj would not allow me to include code to transmit midi codes to activate the lights on the control surface. thats all it needs to do, read the led values and match them up to a midi code and send.
well it's not all sad news as i have ordered the behringer 3000 unit and vdj pro from my local south african mix shop.
I still gonna look into this as i found that delphi can do com objects and i hate giving up.
Thanks for the quick reply and i hope any one out there can find the icontrol info usefull anyway.

Regards

 

Posted Mon 16 Feb 09 @ 11:40 pm
SBDJPRO Infinity Member since 2006
It can be done, but the plugin would have to be written as a different class (DSP for example) which brings it's own issues. You would have to do the MIDI control yourself which is no big deal. You might have difficulty opening the MIDI device however, and might have to use MIDI yoke or something similar instead.
 

Posted Tue 17 Feb 09 @ 5:19 am
cstollPRO InfinityMember since 2004
grimreefer wrote :
... i have ordered the behringer 3000 unit and vdj pro from my local south african mix shop.


VirtualDJ Pro is not sold in stores ... it will most likely be an illegal pirated copy. You must purchase VirtualDJ Pro from our website if you want a legal version.

 

Posted Tue 17 Feb 09 @ 11:11 am
grimreefer wrote :
... i have ordered the behringer 3000 unit and vdj pro from my local south african mix shop.

VirtualDJ Pro is not sold in stores ... it will most likely be an illegal pirated copy. You must purchase VirtualDJ Pro from our website if you want a legal version.



Yes you are right, i got traktor instead. My initual finding of this program are i hate it, i got virtual dj up, running and doing cool stuff within a day, adding midi funtions took another, in traktor i find myself more lost than i care to be.
It was not the stores fault, they took my question to be more towards 'is it virtual dj compatible' ,anyway will pull the ccard out and order.
have a mate who does delphi for work is willing to help me convert some of the c++ into delphi and help me write my plug in, after playing with the behringer 3000 i find that needs basic tweaking to be easy to use so i am going to include that in some form.
Wish me luck folks

 

Posted Thu 26 Feb 09 @ 5:16 pm


(Old topics and forums are automatically closed)