PICMIX - DIY midi DJ controller

Home :: Reviews of DJ equipment :: PICMIX - DIY midi DJ controllerReply
PICMIX - DIY midi DJ controller
Posted on: 26.10.2011 by Dannielle Glassey
After years of mixing with vinyl and a DVS system for a while it is time to take a next step. A midi DJ controller. I looked at almost every possible controller there is on the market but I didn't really found what I was looking for. Too cramped or too much bells and whistles and so on. I mix mnml, deep and tech house and never use effects.
I wanted a controller that has only the buttons and faders I want and what is there has to work great and accurate. As I don't like a sync button the pitch fader has to have a 10 bit resolution at least.

The Vestax VCI-100 comes almost closest to what I wanted with the 1.4 firmware but since I do have electronic knowledge I decided to build it myself. I'm very familiar with PIC microcontrollers so I did't have to believe long.

A lot of believeing and prototyping was done first to see if it was do-able to do it myself. Everything went great so I started gathering parts to measure.
After that I've drawn a front panel and sent it to Schaeffer. The result is just stunning:



You see it has a very basic and simple layout. Everything is panel mounted, I want it to feel solid. I'm used to quality feel, this has to be it too.

The mainboard runs of a PIC16f887, I do program it with a C compiler. Jog wheels will be driven on an optical encoder. Playback buttons are arcade buttons.

The panel is almost completely mounted but I don't have a pic of that yet.

So, more details and updates will follow. Next will be wiring everything up and test every component.
Dannielle Glassey
18.11.2011
What do you guys believe of a vintage wooden look:

Dannielle Glassey
17.11.2011
Both jogs are installed now finally. Next will be the casing.

Chasidy Heckenbach
17.11.2011
Originally Posted by michaeldunne109
Ya i got a question

Have ya any resources for coding Midi in C? Have to a project in college next year and it has to involve a bit of coding.

Cheers.
i use the RtMidi library for midimasher: http://www.music.mcgill.ca/~gary/rtmidi/

it's cross platform and also i believe what the new midi fighter utility uses.

it's very simple to use and comes with plenty of example code.

edit: it's C++ not straight C tho
Dannielle Glassey
17.11.2011
Well I use the CCS compiler in combination with a Microchip PIC. It's a very powerful piece of software and it lets you code in pretty standard C. Not that hard to understand. Though the compiler is not that cheap. The cheapest thing would be an Arduino. You can use an Arduino that has lots of I/O pins so you don't have to worry about multiplexing and so on. Otherwise with lesser I/O pins you could use serial shift registers like a 74HC595 and 74HC165.

Sending out midi with the CCS compiler is easy, I made a small function for it.

Code:
void midiout(int cc_data, int c_num, int c_val){
putc(cc_data);
putc(c_num);
putc(c_val);
}
putc(); spits out a byte.
Maryanne Weatherill
16.11.2011
Originally Posted by Skirmitt
At the end of the project I'll post my resources. Meanwhile feel free to ask what you want :-)
Meanwhile I made the holes from the perspex top plate countersunk. 1 done, 1 to go. Not my favorite thing to do as perspex cracks easily under stress :eek:
Ya i got a question

Have ya any resources for coding Midi in C? Have to a project in college next year and it has to involve a bit of coding.

Cheers.
Era Roka
17.11.2011
Looking goooooooood
Dannielle Glassey
15.11.2011
Hehe, would be an honour :-)

Meanwhile a pic of the countersunk screws on the jogs. A lot better imo.

Era Roka
15.11.2011
If you'll make a tut. A link of it would be in my signature for sure!
Dannielle Glassey
15.11.2011
At the end of the project I'll post my resources. Meanwhile feel free to ask what you want :-)
Meanwhile I made the holes from the perspex top plate countersunk. 1 done, 1 to go. Not my favorite thing to do as perspex cracks easily under stress :eek:
Maryanne Weatherill
15.11.2011
Really liking this. You should do a tutorial.
Dannielle Glassey
15.11.2011
Then I need to modify the front panel and I don't want to screw it up :-)
I'll make the screws from the top plate countersunk so they look better.
I learned a lot from this build. If I would make another one not many things would change but still, you can always improve.
Arcelia Siebeneck
15.11.2011
looking good man

why not set the encoders lower down below the front plate? You could use pcb mounting bolts like these:

http://www.ebay.co.uk/itm/150665393728
Dannielle Glassey
15.11.2011
That is weird. I expected more feedback on this :-) I'll keep posting updates anyway. I'll be mounting the second jog wheel today wich means the front panel will be finished hooray !
Dannielle Glassey
14.11.2011
Jog pieces are in. Had to adjust the holes a bit but now everything is fine. Gave them a quick black spray for now. It consists of 3 pieces as you see. I wanted it to be a bit lower but I can't do that with these encoders so it will stay like this. At the end of the project I'll give them an extra shot of paint.



Dannielle Glassey
10.11.2011
While waiting for the jogs I dreamed about an improved version:
http://mylantec.be/upload/pm2_pre.pdf
Chasidy Heckenbach
08.11.2011
i suspect that will be plenty just checked my icon idj and it has exactly 80 ticks per rotation. not all that many but the jogs are also pretty small. the jogs on that are actually very nice to use.

i guess there must be some optimal number of ticks relative to the platter size, rather than just the bigger the number the better. also i suspect how fast the controller processes and ends out the data will be at least as important. can't get my old hercules mk2 to work at the moment, but i suspect the number of ticks there isn't much different to my idj but the jogs feel very sluggish when u use them in comparison.
Dannielle Glassey
08.11.2011
I checked how many ticks I now have per rotation of the jogs. I have now 512 ticks. Pretty good for a DIY solution imho and more than enough for my purposes. A shame that a lot of commercial devices don't say how many ticks they offer.
Dannielle Glassey
08.11.2011
I play tech, deep and mnml indeed. A more relax mixing style is what I handle. I've chosen those knobs cause I'm used to a http://www.rodec.com/productdetails.php?code=14 mixer and I like this one very much. I play almost 15 years now with this flavor of knobs.
You can "throw" with these if you need to.
Lilliana Perris
08.11.2011
May I ask why you prefer those fader caps over the usual style ones?

You probably not into slamming em etc. Do you play minimal tech or?

Just wondering!

Awesome job at finishing this project....almost!

Dannielle Glassey
08.11.2011
Got a mail today to tell me that the jogs will be shipped today
I expect them to be here at the end of the week. Meanwhile I did some mixing with it and all I can say is wow, this works just the way I want it to.

Also installed the browse encoder and knob. The knob is a solid piece of aluminum. When you turn the knob you browse in the tracklist. When you press the knob you scroll through the map list and load A and B collapse and expand the maps. Easy to work with.

Dannielle Glassey
03.11.2011
I might be missing something to. Guess I'll have to look close on what is possible with all the options Traktor has. Do you guys have a reference guide for the MIDI controls in Traktor ?

Small thing I did today is wiring the encoder to browse in the file list. Now everything is wired up and works. Now finishing the case and waiting for the Jog wheels and the extensive testing can begin :-) Offcourse I'll post a small video of it in action.
Chasidy Heckenbach
03.11.2011
Originally Posted by MiL0
one solution would be to program the PIC so that the play button outputs a different midi CC when releasing the button (note off).

but it might be easier to do it with the Traktor mappings... not sure how though.
isn't that the default 'cue' behaviour anyway tho? unless he doesn't want it to jump the the cue point first ofc. alternatively just map "play" in traktor in "hold" mode surely? guess i'm missing something as it's morning and i'm still working from yesterday
Arcelia Siebeneck
03.11.2011
Originally Posted by Skirmitt
how can you map the cue(play?) button in Traktor so that it plays if I press it and stop if I release it ?
one solution would be to program the PIC so that the play button outputs a different midi CC when releasing the button (note off).

but it might be easier to do it with the Traktor mappings... not sure how though.
Dannielle Glassey
03.11.2011
The mapping for Traktor is complete after I've cleaned up my code with the help of the page that zestoi gave me.
Now I've drawn the jog wheels. These will be 90mm in diameter. The base is 2 layers of MDF and a perspex top. The perspex top will make it possible to use some sort of skins between the MDF and the perspex. I hope all fits well, fingers crossed. The parts will be laser cut.

Also made an MDF case for it, glue is drying at the moment.

---------

Another question, how can you map the cue(play?) button in Traktor so that it plays if I press it and stop if I release it ?
Dannielle Glassey
01.11.2011
Impressive what you've made. I always believe that the best solutions come from people that build it for theirself with only the end result in mind
Such projects have passion.
Chasidy Heckenbach
01.11.2011
Originally Posted by Skirmitt
The reason I'm sending on that particular channel is cause I didn't have a good midi message reference, I do now with that page you gave me, thanks a lot for that.
good point i only started to get back into midi stuff a few months ago. i keep having to refer back to that webpage. it's pretty handy.

I hope to finish the PCB
and basic form of the code this week so I can do some testing with it.
cool. pretty impressive building your own controller and coding it too

I heard of Midimasher before a lot, what does it do exactly ?
sort of like bomes meets midikatapult and automap i guess? or something like that...

i wanted an app that would connect to all my controllers (and to traktor via one massive tsi and some virtual midiports) and route data any which way i wanted. the core is C++ (bad C++, more just C really) and implements any number of virtual layers for any controller with full led recall, handles reading the data and passing it onto user defined callbacks (coded in LUA) when needed.

i was afraid of latency issues using LUA but it seems fine. hadn't even heard of LUA until using it, but it seems ideal for what i need and embedible.

here for example is my attempt at recreating the slicer that the twitch/itch has in midimasher http://midimasher.djism.com/lua/lib/slicer.lua

quick code example, this will make a launchpad led flash to the beatphase in traktor:

Code:
capture("traktor", "heartbeat_a", ALL, 0, function(d, e, v, p)
  print("beat "..v)
  if v > 0 then
    send("lp", "0,0", 1, lp_yellow)
  else
    send("lp", "0,0", 1, lp_black)
  end
end)
and i have functions that build on stuff like that to create virtual faders on a launchpad or emulate a 4banks midifighter etc etc... LUA is cool in that it allows u to create functions kind of like javascript or perl that u can pass to other functions. in fact saying "function foo() end" is actually only syntactic sugar for "local foo = function() end"
Dannielle Glassey
01.11.2011
The reason I'm sending on that particular channel is cause I didn't have a good midi message reference, I do now with that page you gave me, thanks a lot for that.

Changing all midi messages to something that makes sense was on top of my to do list. Must be something weird then with that Numark controller :-)

Sending a note off message might only be usable for cueplay actions where you hold the button indeed. You're right about that. I hope to finish the PCB and basic form of the code this week so I can do some testing with it.

I heard of Midimasher before a lot, what does it do exactly ?
Chasidy Heckenbach
01.11.2011
any reason you're sending on midi channel 7? each midi port can send data on each of the 16 midi channels without getting mixed up with a different controller etc. i only ever used to care about midi channels when i was chaining synths via old school din-style midi cables using the midi-thru ports.
Chasidy Heckenbach
01.11.2011
Originally Posted by Skirmitt
Thanks for your answer !! The reason I asked is cause the Numark Total Control I looked at from my friend is sending the note on on release so the track starts playing on release. You could believe of releasing a record to make it play, though I don't believe it is logical for a controller.

I do send CC for a fader and pitch bend for the pitch fader. As for the buttons I now send only a note on with value 0 and 127. Example:

Code:
newd0 = input(pin_d0);
if(oldd0 != newd0)
{
   if(newd0)midiout(150,40,127);
   else midiout(150,40,0);
}
Still have to find a page that informs me about all the possible midi messages and their range.
odd re: the total control, even if it was sending out a noteon with zero velocity on release i'd still expect it to send out a non zero velocity noteon message on press. maybe due to some custom setup app?

this is the url i usually refer to for basic midi spec info: http://www.midi.org/techspecs/midimessages.php

your code seems sensible. no real need to send an actual noteoff message on release. internally in midimasher i just translate all noteon and noteoff messages into 'note' message for callbacks to attach to. only really makes any difference if you want to control an actual synth, where u need to send a noteoff message else the next noteon won't retrigger the ADSR envelope.
Dannielle Glassey
01.11.2011
Thanks for your answer !! The reason I asked is cause the Numark Total Control I looked at from my friend is sending the note on on release so the track starts playing on release. You could believe of releasing a record to make it play, though I don't believe it is logical for a controller.

I do send CC for a fader and pitch bend for the pitch fader. As for the buttons I now send only a note on with value 0 and 127. Example:

Code:
newd0 = input(pin_d0);
if(oldd0 != newd0)
{
   if(newd0)midiout(150,40,127);
   else midiout(150,40,0);
}
Still have to find a page that informs me about all the possible midi messages and their range.
Chasidy Heckenbach
01.11.2011
Originally Posted by Skirmitt
I was wondering, what do most controller send out on a button press ? Do they send an on press message and an on release message ? What do you guys prefer, play on release or press ?
most controllers will send out a note-on on press (often just 0x7f if non velocity sensitive) and a note-off (often with a velocity of 64 which i still find odd) on release, tho sometimes just another note-on with zero velocity. controllers will almost always send out cc's for faders and encoders instead of notes tho in reality it makes no real odds whether notes or cc's are used ofc for dj type controllers.

you definately want to send out a message when the buttons are pressed and if you don't also send out a message on release then the buttons can't be mapped to "hold" type controls. i.e: can only be used for triggers or toggles.

the lpd8 in PC mode is like that as it only sends out a PC message when u press a pad - tho PC messages only need 2 bytes. makes the PC mode not so useful anyway, even when they're translated into notes or cc's.

the shorter answer to your question is "play on press"
Dannielle Glassey
01.11.2011
I was wondering, what do most controller send out on a button press ? Do they send an on press message and an on release message ? What do you guys prefer, play on release or press ?
Era Roka
31.10.2011
Originally Posted by Skirmitt
Ok I'll see what I can do about that :-) If the prototype works I'll draw some schematics. I'll make a PCB out of it, no problem to share it.
You're the best!
Dannielle Glassey
31.10.2011
Ok I'll see what I can do about that :-) If the prototype works I'll draw some schematics. I'll make a PCB out of it, no problem to share it.
Era Roka
30.10.2011
If you would share a how-to on the pcb(build and programming) you would be the best ever!!
Fatimah Czuprynski
30.10.2011
i believe most important would be a shopping list so everybody could see what they have to pay. And maybe a list of the major steps you have to follow for those who never build a midi controller before.

when we will see a finished picture of your beatiful work?
Era Roka
30.10.2011
Originally Posted by Skirmitt
What would like to know in detail ? I would like to help.
I believe he means a how-to on the brain (i would love it too)
Chasidy Heckenbach
30.10.2011
Originally Posted by Skirmitt
I can buy spareparts easily and I control the firmware :-)
this is the best bit/reason i reckon imho the midi fighters seem a bit expensive for what they are but i bought one so i now have a controller i can completely customise the firmware on if i want - tho i'm using midimasher to do most of that now, i'll also come up with some tweaks for the mf firmware eventually.
Dannielle Glassey
30.10.2011
What would like to know in detail ? I would like to help.
Fatimah Czuprynski
30.10.2011
dude, would be so happy if you could bring us a complete building tutorial

<< Back to Reviews of DJ equipment Reply

Copyright 2012-2023
DJRANKINGS.ORG n.g.o.
Chuo-ku, Osaka, Japan

Created by Ajaxel CMS

Terms & Privacy