"Intermediary midi mapping" software *discussion thread* (Traktor mapping is a pain)
Home :: Post and find Controller Mappings :: "Intermediary midi mapping" software *discussion thread* (Traktor mapping is a pain)Reply
"Intermediary midi mapping" software *discussion thread* (Traktor mapping is a pain) Posted on: 16.06.2011 by Arcelia Siebeneck IntroductionJust wanted to start a discussion thread regarding the shortcomings of mapping midi controllers using Traktors default mapping options. And by that, I don't just mean the annoying non-resizeable window, lack of serious copy/paste/clipboard functions and the recent inablity to directly edit the xml mapping files with a text editor. What I'm really talking about is the limitations of the default Traktor midi mapping window to achieve more powerful, dynamic and complex mappings... mappings that go well beyond what Traktor is normally capable of. So what do I mean by this? Well if we look at the djtt firmwares for the vci-100 and midifighter as an example you can see that Traktor is capable of some amazing things. Superfaders, fx triggers, etc are made possible by combining various midi commands into one control which are then executed in a certain way. The only realistic way to achieve this is by re-writing the firmware on a midi controller at a hardware level. Yes, it's true that some of these effects can be done via a plain old Traktor mapping - but it gets very complicated and isn't as full featured. The obvious disadvantage with using modified firmwares is that only a few people have the skill and know how to write them. Also, the firmware will only work on specific midi hardware. What I propose is some sort of intermediary midi software that sits between Traktor and your hardware. A utility that allows full access to every midi command available in Traktor with the aim of achieving the kind of custom mappings only normally available via custom firmwares. The solution This isn't an easy undertaking so I'm hoping that the clever people on DJTT can get involved in the discussion and hopeful development of such a tool. In the absence of any sort of Traktor public SDK, here's how it could be achieved: Traktor - A mapping is created that maps literally every control to a different midi CC. All these controls are set to receive midi from a virtual midi device such as LoopBe. The midi commands are then routed via LoopBe from the mapping utility which could be created via one of the following programs: Synthmaker/SynthEdit - Both Windows programs which allow the creation of midi plugins/vst's. Usually the plugins are effects/synths for DAW's such as Cubase, Ableton Live, etc however they can also export standalone Windows executables with midi in/out functionality. Reaktor - Same as Synthmaker/Synthedit but probably more powerful and there may be more people on here that know how to use Reaktor properly. Trouble is, I don't believe there's a plugin export function so you'd need to run Reaktor in the background.. not ideal. Emulator - the new version of Emulator allows you to design your own touchscreen interface GUI and map midi commands to each button/control. GlovePie - probably quite a good option as their is decent scripting and midi support. Disadvantage is that it's a bit unstable in my experience. Autohotkey - my area of expertise (lol) but not really designed for such a job... I might use it to knock up a prototype though. VisualStudio - probably the most viable and professional option... a decent programming language that is stable, fast and powerful. So what would the custom midi mapping software look like? and what kind of things could it do? This is obviously up for discussion, but the first and most important function should be a wholesale replacement of the standard Traktor mapping window. The tool should allow easy duplicating, adding, deleting, etc of all the various Traktor controls and the ability to setup modifiers etc. Once this is implemented, we can look at ways to achieve complex midi mappings based on rules, scripts, etc. This might enable functions such as superfaders and other midifighter features but also: - complex ADSR/LFO based controls - sequenced/pre-scripted midi control - Serato-style continuous play in the background after beatjuggling has ended - GUI editor for custom diy controllers (edit the midi controls in a more visual manner) - simpler midi LED mappings - stuff I haven't even thought of...! How you can help Feel free to contribute to this thread... let me know if this is something that you would find useful and what you would do differently. The suggestions I've listed above are just ideas and I'm keen to get something developed that will be useful for everyone so get posting | |
Nana Mohs 13.12.2013 |
Originally Posted by wolfbiter
At least upload your 4deck "traktor" TSI/config file to here (probably has to be a .zip file to upload .lua if I remember correctly) When you are done with your LP mapping upload that too. I feel like a lot of us use LP that use midimasher. I'm currently fine tuning my mapping right now. (2 track decks / 2 sample decks) If you upload your config and tsi file, I will be able to add to yours making even more usability for the community. A+ for teamwork!!! I personally haven't had any problems w/ crashing. Mac or PC? I have used it on both, and Linux totally fine. I don't ever have a ton of midi signals going out at once though. @ djsckid I will have some time tomorrow to try to figure your issue out. Probably something silly, but I'm a little pressed for time at the time being. Maybe PM me a copy of your .lua file? Just copy and paste the text into a PM and that will help a ton |
Jeanette Heckmann 23.11.2013 | Hey! Thanks for the reply.. I'm starting to get really close now. When I saw your update about the send command I realized the launchpad config file merely calls on the functions which are part of the library lua files (it's been a few years since I've been in a programming class.. I'm a little rusty lol).. The only problem I have now from what I can tell is getting traktor to kickstart the scs3d devices into action. I see data passing through loopMIDI on the Traktor to MM output, just nothing from MM to Traktor when I push any buttons on the scs3d. So midimasher and loopmidi are communicating to the scs3ds fine, there is just a missing link somewhere in my config to get traktor to fully trigger the scs3ds to operate correctly. Here is my updated config file which initializes the scs3d devices and from what I can tell starts the spinning led function (but doesn't work yet in traktor): open_midi_device("scs1", "scs3d", "SCS.3d", "SCS.3d", 2) open_midi_device("scs2", "scs3d", "SCS.3d", "SCS.3d", 2) open_midi_device("traktor", "traktor", "V:Traktor to MM", "V:MM to Traktor") scs3d.init("scs1") scs3d.init("scs2") scs3d.spinning_jog("scs1", "a", "vinyl") scs3d.spinning_jog("scs2", "b", "vinyl")
Originally Posted by muffintop
|
Jeanette Heckmann 16.11.2013 |
Originally Posted by muffintop
The launchpad config works great! It's recognized pretty quickly once I have everything up. I believe that's the problem with my scs3d config.. It's not initializing somewhere. :/ Here is the config I've tried so far: open_midi_device("scs3d", "scs3d", "SCS.3d", "SCS.3d", 2) open_midi_device("scs3d", "scs3d", "SCS.3d", "SCS.3d", 2) open_midi_device("traktor", "traktor", "V:Traktor to MM", "V:MM to Traktor") open_midi_device("midifighter1", "generic", "V:SCS.3D1 Input", "V:SCS.3D1 Output", 2) open_midi_device("midifighter2", "generic", "V:SCS.3D2 Input", "V:SCS.3D2 Output", 2) The second open midi device line is for my second scs3d. The problem is that I don't know if the virtual ports/loopmidi are required for the scs3ds and also what to do in Traktor's Controller Manager. Can I just used the scs3d listings in the first two lines without virtual ports? Or do I need to have three configs setup with loopmidi virtual ports in Traktor (Traktor to MM -> MM to Traktor, Traktor to MM -> SCS.3D1 Input, Traktor to MM -> SCS3D2 Input)? If I follow the Launchpad config as a reference, I believe I'm supposed to use virtual port. But I'm missing something somewhere... Hmmmmm... |
Nana Mohs 13.12.2013 |
Originally Posted by wolfbiter
At least upload your 4deck "traktor" TSI/config file to here (probably has to be a .zip file to upload .lua if I remember correctly) When you are done with your LP mapping upload that too. I feel like a lot of us use LP that use midimasher. I'm currently fine tuning my mapping right now. (2 track decks / 2 sample decks) If you upload your config and tsi file, I will be able to add to yours making even more usability for the community. A+ for teamwork!!! I personally haven't had any problems w/ crashing. Mac or PC? I have used it on both, and Linux totally fine. I don't ever have a ton of midi signals going out at once though. @ djsckid I will have some time tomorrow to try to figure your issue out. Probably something silly, but I'm a little pressed for time at the time being. Maybe PM me a copy of your .lua file? Just copy and paste the text into a PM and that will help a ton |
Lilla Dultz 01.12.2013 | Hi, I've been using your mapping (thank you so much for it), but am having some problems with crashing. It seems fairly random, but occurs most regularly when I'm pressing a button which sends a lot of midi messages (ex. the button i use to play all 4 decks at once). Has anyone else run into this? I can get some stack traces if that could help. Thanks, Kane p.s. I plan to release my mapping to anyone/everyone when it's complete: single launchpad with full control over 4 decks (it uses shifts to target deck(s)) |
Lilla Dultz 26.11.2013 | Hi, So I'm totally loving midimasher. I'm a programmer turned DJ, so this whole idea (exposing traktor's api via a scriptable midi layer) appeals to me on a deep level. I had discovered the site http://midimasher.djism.com/ accidentally while browsing the internet, downloaded it, and began using it. I had thought development on it had been halted (since the last version was released sometime in 2012), but then discovered this thread! Long story short: Damn this scripting is amazing. I personally use all 4 track decks, and since that isn't already supported in midimasher, I implemented it in my local copy (as in I added (add control ...) statements / corresponding mappings in traktor in order to expose decks C/D to midimasher). But rather than hacking on custom attachments like that, I'd rather support midimasher by contributing it for others to use as well. So my question is: Is there still active development on midimasher? Greetings from the Bay Area, -wolfbiter |
Jeanette Heckmann 23.11.2013 | Hey! Thanks for the reply.. I'm starting to get really close now. When I saw your update about the send command I realized the launchpad config file merely calls on the functions which are part of the library lua files (it's been a few years since I've been in a programming class.. I'm a little rusty lol).. The only problem I have now from what I can tell is getting traktor to kickstart the scs3d devices into action. I see data passing through loopMIDI on the Traktor to MM output, just nothing from MM to Traktor when I push any buttons on the scs3d. So midimasher and loopmidi are communicating to the scs3ds fine, there is just a missing link somewhere in my config to get traktor to fully trigger the scs3ds to operate correctly. Here is my updated config file which initializes the scs3d devices and from what I can tell starts the spinning led function (but doesn't work yet in traktor): open_midi_device("scs1", "scs3d", "SCS.3d", "SCS.3d", 2) open_midi_device("scs2", "scs3d", "SCS.3d", "SCS.3d", 2) open_midi_device("traktor", "traktor", "V:Traktor to MM", "V:MM to Traktor") scs3d.init("scs1") scs3d.init("scs2") scs3d.spinning_jog("scs1", "a", "vinyl") scs3d.spinning_jog("scs2", "b", "vinyl")
Originally Posted by muffintop
|
Nana Mohs 23.11.2013 | open_midi_device("scs3d1", "scs3d", "SCS3D1", "SCS3D1", 2) open_midi_device("scs3d2", "scs3d", "SCS3D2", "SCS3D2", 2) open_midi_device("traktor", "traktor", "V:Traktor to MM", "V:MM to Traktor") open_midi_device("mf1", "generic", "V:MidiFighter1 Input", "V:MidiFighter1 Output") open_midi_device("mf2", "generic", "V:MidiFighter2 Input", "V:MidiFighter2 Output") virtual_midifighter("scs3d1", "mf1", 0, 0) virtual_midifighter("scs3d2", "mf1", 0, 0) If you are trying to get regular midi fighters on you SCS3Ds try this. If that isn't right names for the midi channels midimasher will give you a name of all of the connected controllers when you try to connect. I don't own a scs3d, so I can't be sure those coordinates are the ones that make since for a midifighter. You might have to toy around with that. Here are some bits from my current launchpad lua (WIP will post my fresh one soon). Replace device names and stuff w/ what you need and it should be ok for you. (Note, I use multiple pages, so the extra "1" in the MF part is for the page, so you should take it out if you are only using one page on the SCS) ------------------------------------------------------------------------------- -- connect devices ------------------------------------------------------------------------------- open_midi_device("lp", "launchpad", "Launchpad", "Launchpad", 4) open_midi_device("traktor", "traktor", "V:Traktor to MM", "V:MM to Traktor") open_midi_device("mf1", "generic", "V:MidiFighter1 Input", "V:MidiFighter1 Output") open_midi_device("mf2", "generic", "V:MidiFighter2 Input", "V:MidiFighter2 Output") open_midi_device("mf3", "generic", "V:MidiFighter3 Input", "V:MidiFighter3 Output") -- -- virtual midifighters x2 normal mode -- virtual_midifighter("lp", 1, "mf1", 0, 0) virtual_midifighter("lp", 1, "mf2", 4, 4) ------------EDIT-------------- I just reread an earlier post and saw that you just want the spinning LED on the SCS open_midi_device("scs1", "scs3d", "SCS3D1", "SCS3D1") open_midi_device("scs2", "scs3d", "SCS3D2", "SCS3D2") open_midi_device("lp", "launchpad", "Launchpad", "Launchpad") open_midi_device("traktor", "traktor", "V:Traktor to MM", "V:MM to Traktor") open_midi_device("mf1", "generic", "V:MidiFighter1 Input", "V:MidiFighter1 Output") open_midi_device("mf2", "generic", "V:MidiFighter2 Input", "V:MidiFighter2 Output") send(scs1, "vinyl") send(scs2, "vinyl") virtual_midifighter("lp", "mf1", 0, 0) virtual_midifighter("lp", "mf2", 0, 4) Maybe? that should give you a jumbled mess, but something you can work from Then must hook your SCS3D straight up to traktor and map through there. That'd what I'd do at least. Zestoi will try to talk you out of that though :P It would probably be more helpful for you if the master hopped in on this, but I can probably figure it out if that doesn't work |
Jeanette Heckmann 16.11.2013 |
Originally Posted by muffintop
The launchpad config works great! It's recognized pretty quickly once I have everything up. I believe that's the problem with my scs3d config.. It's not initializing somewhere. :/ Here is the config I've tried so far: open_midi_device("scs3d", "scs3d", "SCS.3d", "SCS.3d", 2) open_midi_device("scs3d", "scs3d", "SCS.3d", "SCS.3d", 2) open_midi_device("traktor", "traktor", "V:Traktor to MM", "V:MM to Traktor") open_midi_device("midifighter1", "generic", "V:SCS.3D1 Input", "V:SCS.3D1 Output", 2) open_midi_device("midifighter2", "generic", "V:SCS.3D2 Input", "V:SCS.3D2 Output", 2) The second open midi device line is for my second scs3d. The problem is that I don't know if the virtual ports/loopmidi are required for the scs3ds and also what to do in Traktor's Controller Manager. Can I just used the scs3d listings in the first two lines without virtual ports? Or do I need to have three configs setup with loopmidi virtual ports in Traktor (Traktor to MM -> MM to Traktor, Traktor to MM -> SCS.3D1 Input, Traktor to MM -> SCS3D2 Input)? If I follow the Launchpad config as a reference, I believe I'm supposed to use virtual port. But I'm missing something somewhere... Hmmmmm... |
Nana Mohs 15.11.2013 | After minimalizing my set up for a while, I'm going to add my Launchpad w/ midimasher back into my setup. Playing a set with it tomorrow evening
. Can't wait. Thanks again zestoi! @djsckid you should post your full scs3d config file, so we can know where you're going wrong. How are you liking the launchpad config? |
Jeanette Heckmann 27.10.2013 | Hey.. I'm trying to set it up with the SCS.3d as well and I've been scratching my head while setting up the config file. - Do I need virtual midi ports in loopmidi for them? I've tried with and without them and nothing is being sent to the SCS.3D Here is my config file so far: open_midi_device("scs3d", "scs3d", "SCS.3d", "SCS.3d", 2) open_midi_device("scs3d", "scs3d", "V:SCS.3D1 Input", "V:SCS.3D1 Output", 2) loopmidi is showing data going to Traktor to MM and whatever virtual port I select as an output, but still no response by the device. (just trying to get the spinning LED platter indicator code to work!) I have a launchpad as well and that is working fine with the launchpad config, but nada on the SCS... I feel like I'm very close just off somewhere with the config file. HALP! |
Arletta Thornes 10.06.2013 | I'm attempting to use this for an SCS.3 system set up- if the discussion is still on going i'd really love to learn this software. |
Elina Opbroek 23.05.2013 | I need big help. I'm trying to simulate Mackie Control implementation with midimasher. So im trying to sniff all the midi msgs that ableton sends into the faux Mackie. The thing is i get a lot of "pressure", sysex, and wheel msgs which i don't know how to capture or replicate. Can you please help me? |
Elina Opbroek 21.05.2013 | Quick question. Is there any way of getting cursor position with midimasher? |
Chasidy Heckenbach 28.03.2013 | should be possible to just grab all via a loop like this: Code:
for i = 0,127 do capture("my_device", string.format("%03d", i), ALL, 0, 'my_filter_function') capture("my_device", string.format("CC%03d", i), ALL, 0, 'my_filter_function') end for something like a musical keyboard you don't need to define a devices file for it and can still then capture() via either of these two formats for notes '023' or 'C#-2' and 'CC012' for CC's. |
Elina Opbroek 28.03.2013 | Is there a way for me to monitor every note msg recieved from my piano midicontroler so that i can filter some keys and change them to different values without having to declare every single note with Add_control() ? My controler has a lot of knobs and keys so i dont want to have to declare them all. |
Chasidy Heckenbach 18.03.2013 | you can do raw hid stuff in midimasher too. there's a config that turns a 12button gamepad into a midifighter for example: http://midimasher.djism.com/lua/conf...ter_4banks.lua http://midimasher.djism.com/lua/devi...epad_12btn.lua hiddump+hidlearn should let you create a 'device' from your keyboard. really not well documented, but pots are trickier than buttons to map. have quite a few bug fixes applied since i last made a release as well as a new simpler config format. i'll try and test my code and put out a new version soon. |
Elina Opbroek 18.03.2013 | Thank you very much again! I'm almost done with my script. And its fucking incredible. Converted my good ole nanokontrol2 into a multipurpose controller for ableton live. Im so happy right now. btw. i checked the post regarding keystrokes, but that seems to be done with glovepie. See i have been able to do just that with midiHID but i was hoping to be able to capture qwerty keystrokes directly from within midimasher. Is that even possible? Thanks in advance again. |
Chasidy Heckenbach 18.03.2013 | you can build the message yourself via send_midi_raw() or use either of these two forms: Code:
send("mydevice", "PC37") send_midi("mydevice", 1, MIDI_PC, 37) |
Elina Opbroek 18.03.2013 | Thanks for the help. One last question. How do i go about sending program changes with midimasher? |
Chasidy Heckenbach 15.03.2013 |
Originally Posted by Pineda
|
Elina Opbroek 15.03.2013 | A keystroke in a qwerty kb is what i need to capture. Sorry for not being clear enough Any hints on that? |
Chasidy Heckenbach 15.03.2013 |
Originally Posted by derschaich
Originally Posted by Pineda
|
Elina Opbroek 14.03.2013 | So far so good. Im almost done with my script. One question though is... how would i go about capturing a keystroke from my keyboard? Thanks1 |
Allene Manitta 29.01.2013 | just pipe one input to two outputs: pipe (input, output1) pipe (input, output2) don't hate me if i'm wrong. it's been some time since i worked with this software. reminds me of finishing my FX mapping, finally! |
Elina Opbroek 29.01.2013 | is there any way for me to send 2 different messages at the same time? like for virtual keyboard shortcuts. |
Elina Opbroek 29.01.2013 | i'm actually building my own mackiecontrol emulation scheme on this baby. like i said, once you get the hang of it, it becomes really easy. it would be super cool if the documentation was completed. but so far everything is cool. thanks again. |
Chasidy Heckenbach 28.01.2013 | cheers as it happens i've finally unpacked most of my midi controllers and stuff after moving house and ready to play with midimasher again. i don't have a nanokontrol2 but will have my mk1 back soon. i'd be glad to help if u can give me a few days as i'll be a bit busy for a bit. i may need poking again via this thread or PM if i forget edit: i shouldn't have replied to a post that i had cached in my browser glad it's of some use to you |
Elina Opbroek 28.01.2013 | nevermind. i got it working. once you get the hang of it you can do amazing thing whit this thing. thanks again for such amazing peace of software. |
Elina Opbroek 26.01.2013 | Im thrilled by midimasher, seems to be the solution i've been looking for ages. I have a nanokontrol2 midicontroller which i'd love to run into ableton live. The problem with this is, im not much of a programer. What i'd love to do basically is caprturing the imput from the nk2 into midimasher, changing its values, and then sending it to ableton live via IAC driver (im on a mac). The type of message i would be sending would mostly be CC. Like i said, im not much of a programer, so i've been reading the documentation, but i havent found a suitable way to build my own config file, as it all seems to be geared towards tracktor. Could you please help me get started? i'd really apreciate that. Thanks in advance! |
Nana Mohs 10.07.2012 | If I ever go 4 track decks I just use 4x Deckalized MF's via MM on the grid... Plenty for me. Normally I just use 2 decks and the loop recorder, or 2 track+2 sample decks. For me 64 is plenty |
Chasidy Heckenbach 10.07.2012 | true... a launchpad is just about the right number of buttons for controlling 2 decks in mixxx or traktor. as soon as you start getting into complex effects mappings or clips/samples then a 2nd one comes in useful |
Nana Mohs 11.07.2012 |
Originally Posted by zestoi
1 LP is pretty amazing for traktor/mixxx though. I don't know what I would do with 2 LPs inside traktor or mixxx. Too many buttons |
Chasidy Heckenbach 07.07.2012 | only thing better than a launchpad is two launchpads mixxx is a great piece of software and i reckon has come on leaps and bounds the last few releases. 1.10.1 is out now - but there's lots of good stuff coming in the imminent 1.11. i coded a little C++ for 1.11 and spent a lot of time on mappings, both midi and hid as 1.11 has native support for hid mapping i created a multi page launchpad mapping that i believe is pretty good, basically using some ideas from the midimasher core and my lua launchpad mapping and ported it to javascript. |
Santiago Brasier 07.07.2012 | Looking forward to try the new updates. Will probably get a second launchpad to... One can't have to many buttons I'm still on a pc but are on the verge of ordering a new mac to try it out. Would be great to find a good alternative to AHK first though. Great to hear you're involved with mixxx! //Joel |
Chasidy Heckenbach 07.07.2012 | been a while since i played about with it too tbh, as i've been coding mappings for mixxx in javascript recently. funny timing tho as i just started to get back to finishing the new simpler config format yesterday so i can finally get that released. it still supports lua too and lua can be used within the new config format too for more complex stuff. as for key strokes on mac not sure... if i can find an api to generate keystrokes tho i could put it into midimasher. i don't believe it'd be too tricky but i'd need to at least add the functionality for both windows and mac. i'll have a dig around tomorrow. might be some useful info on that 'hack the f1' thread too. |
Santiago Brasier 07.07.2012 | Hi, been a while since i played around with the masher. Just had an idea today. Wanted to use my launchpad for shortcuts in other progs. Either by converting midi to keystrokes or if someone comes up with another nifty idea. So, could midimasher be used to convert midi to keystrokes? Or could autohotkey perhaps recognize midi? Is there btw a good alternative to AHK for mac? Sorry if this post sidetracked somewhat. The main q is still to find out if it is possible to use midimasher to emulate keystrokes from my mididevice. Even though this might sound like going backwards. Best regards //Joel |
Chasidy Heckenbach 06.05.2012 | u mean to send a message sometime in the future? for that there's an optional 5th argument for send() which is the delay in milliseconds like: send("traktor", "play_a", ON, 0, 500) so u could for example make traktor play deck 'a' for just 2 seconds if wanted: send("traktor", "play_a", ON) send("traktor", "play_a", ON, 0, 2000) which reminds me that i need to come up with a simple syntax for that in the new config format, as well as an easy way for auto repeats to work, i was believeing of something like "play_a ON delay 20ms" for a delayed command and "play_a ON repeat 50ms" to auto repeat a command. auto repeats already work with pure LUA code ofc, believe i posted an example here before of that. or u mean something else by timed messages? |
Allene Manitta 06.05.2012 | so, any news on timed midi-messages? would be glad to hear! |
Chasidy Heckenbach 01.05.2012 | the grammar actually makes this valid - tho bloody confusing: Code:
map button1 : $cond1 ? 2 & $cond2 ? 1 : 2 & $cond3 ? 2 : 3 : 4 Code:
capture("lp", "button1", ALL, 0, function(d, e, v, p) if get("cond1") > 0 then send("lp", "button1", 2) if get("cond2") > 0 then send("lp", "button1", 1) else send("lp", "button1", 2) if get("cond3") > 0 then send("lp", "button1", 2) else send("lp", "button1", 3) end end else send("lp", "button1", 4) end end) |
<< Back to Post and find Controller MappingsReply