"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
Introduction

Just 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
Chasidy Heckenbach
01.05.2012
cool i was hoping the syntax would be fairly easy to get the basics of quickly. i've had quite a bit if help from synthet1c in refining the syntax too - to hopefully find the middle ground between being understandable and usable.

i'll mess with some configs in my spare time over the next few days to see if there's any common corner cases that i could improve on (to avoid needing to code raw lua too often) and release a new version - most likely in a new thread as this one is getting a bit messy....

edit: i'm sure some of it can be done in a better way, but this is the full grammar for now http://midimasher.djism.com/script.txt
Angella Mosiniak
01.05.2012
I completely get the syntax immediately. I just had to check the raw code to make sure I understood where the conditions were thnx

I'm sold if can use that kind of format!
Chasidy Heckenbach
30.04.2012
Originally Posted by Phi
Hey, that looks really good! I want to play! I'm definatly going to check this out. Thank you
cheers... the config format is a bit much... hopefully this new format should help with that. here's an example i have working so far which demonstrates most of the syntax. this example is 97 lines and the lua it converts to (so it can actually run) is 218 lines.

# connect the midi devices we need
midi_device traktor traktor "V:Traktor to MM" "V:MM to Traktor"
midi_device ableton ableton "V:Ableton to MM" "V:MM to Ableton"
midi_device lpd8 lpd8 LPD8 LPD8 8
midi_device lp launchpad Launchpad Launchpad

##
## basic routing of controls
##

# route page 3 of the launchpad to ableton and back, except for controls with custom maps
route lp 3 <=> ableton

# route all controls including ones you custom map
routeall lp 3 <=> ableton

# just route from ableton to page 3 of the launchpad (but not back)
route ableton => lp 3

# route a single control one way
route 2,2 => traktor play_a

# route a single control both ways to get led feedback
route 2,2 <=> traktor play_a

##
## custom mappings
##

# select device to map
device lp

# a simple map (equivalent to "route 0,0 => traktor play_a")
map 0,0 : traktor cue_a

# use 'toggle' instead of 'map' to toggle play from the button
toggle 0,1 : traktor play_a

# make the led light up yellow when pressed, red otherwise
map 0,1 : pressed ? 50 : 16

# use of a shift
map 1,0 : set $shift
map 1,1 : $shift ? traktor select_set_store_hotcue_1_a : traktor delete_hotcue_1_a

# only map a control when the button is pressed or released
map 1,2 : pressed ? traktor play_a
map 1,3 : released ? traktor play_a

# reverse the action for press and release
map 1,2 : pressed ? traktor play_a off
map 1,3 : released ? traktor play_a on

# chaining using the & character
map 1,4 : $shift & pressed ? traktor play_a on & traktor play_b on

# add some led feedback using the & character
map 2,2 : pressed ? traktor play_a & 50 : 16
map 2,3 : released ? traktor play_a & 50 : 16

# multiple maps in one line using the ; character
map 1,5 : pressed ? traktor play_a ; released ? traktor play_a

# specify feedback from a different device
map traktor play_a : lp 1,6

# some buttons for changing page on the launchpad
map user1 : set_page 1
map user2 : set_page 2

# the same page change buttons which toggle the others led and light themselves
map user1 : set_page 1; lp user2 lp_lo_red ; lp_hi_yellow
map user2 : set_page 2; lp user1 lp_lo_red ; lp_hi_yellow

# map something to page 3 of the current device (launchpad)
page 3
map 0,0 : traktor play_a

# multiple conditions to create an if... else if... else...
map 0,1 : $shift ? traktor play_a : $shift2 ? traktor play_b : traktor play_a off & traktor play_b off

# switch to mapping page 2 of the lpd8
device lpd8 page 2

# use comment: and :comment tags to create a comment block
comment:
anything in here is...
...ignored
:comment

# use code: and :code tags to wrap around lua code
code:
send("traktor", "master_tempo_clock_send", ON)
traktor.loops("lp", grid("6,0", "7,3"), 3, lp_hi_green, lp_lo_green, "a", "lp_shift", loop_sizes)
:code

and a quick example of the code it outputs... this is from the "if... elseif..." example above:

Code:
capture("lp", "0,1", ALL, 3, function(d, e, v, p)
    if get("shift") > 0 then
        send("traktor", "play_a", v)
    else
        if get("shift2") > 0 then
            send("traktor", "play_b", v)
        else
            send("traktor", "play_a", off)
            send("traktor", "play_b", off)
        end
    end
end)
Angella Mosiniak
30.04.2012
Hey, that looks really good! I want to play! I'm definatly going to check this out. Thank you
Chasidy Heckenbach
29.04.2012
quick update... i'm almost finished with a much simpler config format for midimasher scripting. it compiles to lua - so internally works the same.

here's a couple of examples (the last "map" is quite contrived - just to show some possibilities with it)

Code:
device: lpd8

map fader1 : traktor volume_fader_a
map 0,1 : toggle traktor play_a
map 0,1 : traktor cue_a
map 0,2 : $shift ? traktor select_set_store_hotcue_1_a : traktor delete_hotcue_1_a
map 1,3 : set $shift
map 1,0 : pressed & $shift ? traktor play_a on & traktor_play_b on ; released ? traktor play_a off & traktor play_b off

lua:
-- raw lua code can go here
:lua
i've realised that one of the biggest issues with midimasher is it being almost impossible to start playing around with - hopefully this should help to solve some of that.

the names like "0,0" are just the names given to the pads on the lpd8 (row,column) but can be whatever u want to call the controls on your controller.
Chasidy Heckenbach
05.04.2012
thats the 2nd spam bot post in *this* thread the last week or so
Chasidy Heckenbach
04.04.2012
Originally Posted by aplus
maybe you should take a look at these guys http://www.xtrememapping.com/

its a mac app available in the app store. I bought it last evening cus I was fed up with the shitty interface that traktor has.
this was the first app i bought from the app store as soon as i got my mac the other month

it's a decent app but agree some stuff i want to change still seems to take too many clicks. i've been using xtrememapping to create the master midimasher.tsi file as its much nicer to use than the traktor window. even simple stuff like scrolling is easier one thing that bugs the hell out of me tho is that if u choose to say only display "Filteres: Effects Units" as thats what you're working on, and then add a new one... it just goes back to displaying "all" again afterwards.

i did end up adding the last few controls directly within traktor as it's not ideal having to edit->save->run traktor->import etc each time. when you're testing out stuff u have no choice really but to work within traktor. really wish they'd improve on the mapping window in traktor at least a *bit* sometime...
Ciera Roarke
03.04.2012
maybe you should take a look at these guys http://www.xtrememapping.com/

its a mac app available in the app store. I bought it last evening cus I was fed up with the shitty interface that traktor has.

It is definitely an improvement over traktor's but its not great. I dont like the fact you cant set the target deck on a bunch of selected mappings, so its one at a time. Luckily you can change midi channel on a bunch of mappings but its buried in a stupid 3 tiered menu. Hopefully they can make some simple tweaks and really blow the doors open on the power of the app, cus theyve done most of the legwork reading and writing the tsi's and making an interface for it.
Chasidy Heckenbach
03.04.2012
i presume u had "Send MIDI Clock" enabled in "prefs > MIDI Clock"? i should save that with the midimasher.tsi file but it'd still only get set via a "big import button" import anyway
Chasidy Heckenbach
02.04.2012
Originally Posted by derschaich
had the midi clock running for a while, then canged something in traktors controllermanager... gave up for today.

will MM scan all ports for the midi clcok, or just the opened ports?
all ports defined in your config file via a open_midi_device(). midi clock is just a set of midi messages so it has to have the port open to be able to read them.

if you're connected to traktor via two ports with something like this it should be fine:

open_midi_device("traktor", "traktor", "V:Traktor to MM", "V:MM to Traktor")

u wanted to do something with that 'beat' event?

it should be able to read clock from something like ableton too, it's just midi, but will need to be able to read from the device.

i haven't done much testing on windows recently, mostly mac and linux, but there *shouldnt* be any reason why it wouldn't work on windows too.
Allene Manitta
02.04.2012
had the midi clock running for a while, then canged something in traktors controllermanager... gave up for today.

will MM scan all ports for the midi clcok, or just the opened ports?
Chasidy Heckenbach
02.04.2012
Originally Posted by derschaich
will reply, when massive midi-clipped mapping has finished!

thank you so much for this quick update with the midi-clock!
cheers using the midi clock was a lot less hassle than i had figured on. using the beatphase monitor was always pretty hit and miss so i'm pretty pleased with this.

if u wanted some finer control using your gamepad based pots u could try mapping them to pitch bend messages too. most of the time i believe a range of 0 to 127 is fine, but it's no extra effort now to get twice the resolution out of them.

i had coded most of the midi clock stuff before but hadn't actually *used* it for anything

one note tho on the midi clock... *any* device can send clock to midimasher but make sure only one app is - else it will get very confused...
Allene Manitta
02.04.2012
will reply, when massive midi-clipped mapping has finished!

thank you so much for this quick update with the midi-clock!
Chasidy Heckenbach
01.04.2012
ok chaps, quite a few changes in this latest version. figured i should put out a decent update for my 2000th post.

download: http://midimasher.djism.com/downloads/

the full changelog is on that page but the important updates are:

* new worker thread responsible for writing to each midi device - has reduced quite a bit of latency
* full support for pitchbend messages and added some for traktor for controlling pitch, xfader and volume faders
* u can map a pitch bend msg to a normal midi message, to another pitch bend msg, a hid device input to a pitch bend or any other combination
* slicer now using midi clock for sync which seems much more stable - u can also tweak it's phase to line it up properly
* added some buttons to the launchpad mapping... midi clock send on/off toggle (vol), midi clock send sync (pan), midi clock phase adjust +/- on snda and sndb buttons
* midi clock also being used to sync flashing launchpad led's
* new option to scale input/output ranges in pipe() and the core route{} function. u can now use any gamepad to control your pitch fader with twice the resolution of most midi controllers

pipe("gamepad", "volume_fader_a", 0, "traktor", "tempo_fader_a_hires", 0, MIDI_HIRES_RANGE / 256)

edit: the slicer and other timings doesn't rely on the absolute bpm calculated but u can use this code to see how stable (or not) it is:

capture("_global", "beat", ALL, 0, function(d,e,v,p)
local bpm = get_bpm()
print("bpm="..bpm)
end)

it's pretty stable using my macbook once it zones in (which takes a few beats, it samples 8 beats worth) - not checked on windows

the timing stuff just relies on a beat starting every 24 midi clock ticks
Chasidy Heckenbach
30.03.2012
improved performance when using slow controllers like a launchpad...

not released yet as i've just been experimenting but by spawning a new thread to handle writing data to each attached midi device i've seen some big improvements.

the worst thing about the launchpad is the slow led update time, due (only?) to being usb1. not a big deal with most controllers but with the lp sometimes u have a whole heap of led's to update - tho maybe this will also benefit other controllers too.

a couple of times when doing page flips with some debug output i can see there's up to 36 messages queued up to be sent out to the launchpad, so can make quite a big difference, allowing the main thread to get back to more important stuff. a lot of the time the controller update thread keeps up with the messages needing to be sent out but not always...

it should decrease latency overall as the time spent waiting for the lp to update an led before was wasted while now the main thread gets on with processing the next event - maybe also for the lp but maybe for a different controller.

edit: according to the launchpad doc:

Launchpad uses a low-speed version of USB. A limitation of this is that it accepts a maximum of
400 messages per second
so if we have those 36 messages queued up to send to the launchpad (the actual queueing process almost instant) for a fairly complete led update (midimasher only ever sends out updates for led's that have changed value due to it's internal caching) the new version will have had 1 / 400 * 36 = 0.09 seconds to have spent doing other important stuff, whereas the old version would have just wasted that time waiting for the launchpad.

that's 90 milliseconds! plus the fact that before the working out what led to update would be done in series with this waiting (i.e: calc led val1, update launchpad, calc led val2, update launchad...) so i believe this should make quite a difference, esp for launchpad use.
Chasidy Heckenbach
30.03.2012
13 posts in and this bot is still spamming the community then? <sarcasm>oh great...</sarcasm>
Chasidy Heckenbach
29.03.2012
Originally Posted by MiL0
another good reason why a video review / tutorial / guide would be good I reckon - especially if it's something that can be posted on the DJTT blog. That way MM will get lots more exposure, people will understand what it does and how it could be useful to them and then hopefully you'll get more people involved in the LUA scripting side of things.

this is true... making vids isn't really my *believe* but maybe i'll have a go sometime. i'm not against anyone making some ofc

edit: if i do it will be after the traktor 2.5 release and i have my f1 emulation in, plus may also have the live sequencer and some other enhancements done by then.

edit2: don't believe it's djtt blog material anyway - maybe one day if it was completely finished or something. atm it's a bit too tricky for most normal people to pick up and use really... tho i *will* sometime/soon have at least a finished launchpad+nanokontrol mapping for traktor 2.5 that i'll create a new thread for
Arcelia Siebeneck
29.03.2012
Originally Posted by zestoi
good to get some feedback too... apart from the last few posts here it's usually me just saying what changes i've been making

up till now i've had very little feedback from anyone really. every now and again someone will come into this thread with questions, but they've been quite few and far between.

i'm just happy to have any feedback for now... but who knows...
another good reason why a video review / tutorial / guide would be good I reckon - especially if it's something that can be posted on the DJTT blog. That way MM will get lots more exposure, people will understand what it does and how it could be useful to them and then hopefully you'll get more people involved in the LUA scripting side of things.

Chasidy Heckenbach
27.03.2012
quick(ish) note... the ability to create events in the future is quite handy and can be used for auto-repeat on buttons like this:

Code:
capture("lp", "0,0", ALL, 0, function(d, e, v, p)
  if v > 0 then
      print "do something..."
      create(d, e, v, p, 100) -- repeat the event 100ms later
  else 
      clear(d, e) -- clear any queued events
  end
end)
i haven't worked out how to most cleanly add that to existing functions tho yet...
Chasidy Heckenbach
27.03.2012
Originally Posted by derschaich
glad you're working on this for the community!
cheers good to get some feedback too... apart from the last few posts here it's usually me just saying what changes i've been making

will continue posting functions that i consider helpful for everyone. 1/16 would be nice, although it might be wise to handle the clock events completely internally to prevent a potential overflow of the midi signal.
definitely posting any lua snippets of code here i believe will be very useful... i do believe the biggest issue with midimasher is that it'd quite daunting to get into for any non coder.

btw: do you want to keep this open source? - would be a WIN for the whole community!
if there's enough interest i may well do... up till now i've had very little feedback from anyone really. every now and again someone will come into this thread with questions, but they've been quite few and far between.

for now i want to keep control over the code and ofc it's only the core compiled stuff that people can't modify, but going open source in the future, if that makes sense, is def an option.

+ this thread blows off, we should keep an eye open for other options of communication (maybe get an own subcommunity here on DJTT)
i'm just happy to have any feedback for now... but who knows...

+ maybe lauching sort of MIDI-clips (timed via clock) would be a great thing for automation!
indeed it would

i mostly added in the midi clock decode for a new internal sequencer i've been working on. basically it lets u say "repeat this midi message on beat X.Y and repeat every 8 beats" and also the ability to dynamically clear them.

i want to be able to use the new remix deck stuff for programming beats basically... i believe it should work ok and be tight enough but it's not at a testable stage yet.

u will also be able to say "send this midi on beat X.Y once" ofc for launching a midi clip. u can already specify a command to be sent out a certain number of milliseconds in the future like this:

Code:
send("traktor", "play_a", ON, 0, 2000)
but that's not quite useful for clip launching - tho the internals are shared.
Allene Manitta
27.03.2012
glad you're working on this for the community!

will continue posting functions that i consider helpful for everyone. 1/16 would be nice, although it might be wise to handle the clock events completely internally to prevent a potential overflow of the midi signal.

btw: do you want to keep this open source? - would be a WIN for the whole community!

EDIT:
+ this thread blows off, we should keep an eye open for other options of communication (maybe get an own subcommunity here on DJTT)

+ maybe lauching sort of MIDI-clips (timed via clock) would be a great thing for automation!
Chasidy Heckenbach
27.03.2012
Originally Posted by woorszt
midimasher is great and unique tool. works perfectly with my launchpad. Already created my own mapping.

Just one thing: Can you please provide a changelog on your homepage?
cool i really haven't had any clue that anyone has been using it tbh. i see i get plenty of downloads when i grep the web server logs, but that's about it...

and sure, i'm commiting all changes using 'git' so i always know exactly what goes in, i'll make sure to add a changelog in future.

cheers for the feedback
Rosetta Jungmeyer
27.03.2012
midimasher is great and unique tool. works perfectly with my launchpad. Already created my own mapping.

Just one thing: Can you please provide a changelog on your homepage?
Chasidy Heckenbach
27.03.2012
Originally Posted by derschaich
writing my own mappings and functions atm.

hid is working fine, faders (potis on thumbsticks, etc...) are working properly now.
awesome did u have to use hidlearn(.exe) at all? it's not very clever for pots... it works if u leave the pot at it's max value, else u need to edit the bitmask after in the devices file and even then u need to change the 'type' from 'button' to 'fader'

would be nice to add this function to the pool, as the HID-Faders only cover the first half of the way by default if you pipe them (e.g. you push the fader to half, and it already sends 127):

Code:
 function hid_fader(input_device, event_i, value_i, p)
	value_o = value_i/2
	send("cl", event_i, value_o)
 end

-- call it via:

 capture("gp", "fader1", ALL, 0, "hid_fader")
will do also add that 'cl' device name in as a 5th argument (and also allow capture() to take a list of optional args after the function name) so then u can call like:

Code:
capture("gp", "fader1", ALL, 0, "hid_fader", "cl")
as atm the only way of making that generic would be to embed the function inline like this

Code:
capture("gp", "fader1", ALL, 0, function(input_device, event_i, value_i, p)
	value_o = value_i/2
	send("cl", event_i, value_o)
end)
i didn't have a hid device with actual pots on until last week when i realised i could run my old hercules mk2 in hid mode if i didn't install their drivers.

up till that point it was easy... i didn't support pitch bend (or any other hi res messages) and only midi, so *every* input and output had a max value of 127. what i'm doing now is adding intelligence in so it will automatically scale any value to the output based on the input and output ranges. i.e: in your case the 0-255 will get scaled to 0-127 and if you wanted to map it to a pitch bend message it would auto scale to the output range of 0-16383.

this will also have the nice side effect that a controller based on a gamepad can have twice the resolution for it's pots in traktor (or whatever app) if u use the 16 available pitch bend messages

as a whishlist for the clock input:

- 24 messages per beat are not necessary in my opinion
- tempo [BMP] would be nice
- beat counter with reset function to set it to zero would be great!
sure. the 24 ticks are processed internally in midimasher to work out the bpm and start of the beats but they won't all end up as 'events' that can be capture()'ed.

i'll make available a 'beat' event for each beat, that maybe cycles round values 1-16 or 1-8 or something? that would let u do what u want. i'll also store the actual bpm in some variable in case it's useful to get hold of it.

fantastic to get some feedback from some custom config code
Allene Manitta
27.03.2012
Originally Posted by zestoi
cool! so you're using it via hid mode in midimasher or as a midi device and using something else to convert to midi? curious as i'm keen for any feedback on the hid stuff. i'm also adding in the ability to send data to a hid device but that's not needed for a gamepad type thing ofc.

what config are u loading atm? mappings can be completely customised and aren't too tricky once u get your head round them. they're just based around writing snippets of code that deal with what happens when a message comes in that u are interested in.

...

i'm up for answering any question on using lua in midimasher anyway

you can't access midi clock atm. it's being decoded and used by the internal sequencer i've been working on but will need to make it available anyway now for the slicer stuff.

what data do u want to get from the clock? i presume not all the 24 ticks per beat... being able to capture() and do stuff on the beat via the midi clock is what i need and also wouldn't hurt to be able to get hold of the actual bpm in a variable for other use. so i can do something on each beat based on it.
writing my own mappings and functions atm.

hid is working fine, faders (potis on thumbsticks, etc...) are working properly now.

would be nice to add this function to the pool, as the HID-Faders only cover the first half of the way by default if you pipe them (e.g. you push the fader to half, and it already sends 127):

Code:
 function hid_fader(input_device, event_i, value_i, p)
	value_o = value_i/2
	send("cl", event_i, value_o)
 end

-- call it via:

 capture("gp", "fader1", ALL, 0, "hid_fader")
as a whishlist for the clock input:

- 24 messages per beat are not necessary in my opinion
- tempo [BMP] would be nice
- beat counter with reset function to set it to zero would be great!

i imagine usages like:
*click button*
Code:
do

beat 1:
beatmasher 1 beat

beat 2:
beatmasher 1/2 beat

beat 3:
beatmasher 1/4 beat

beat 4:
beatmasher 1/8 beat

beat 5-6:
beatmasher 1/16 beat
transform FX from 0 to 127
end
Chasidy Heckenbach
26.03.2012
Originally Posted by muffintop
---EDIT---
WORKS!!!!

thanks zestoi, you're the man
awesome what did i fix in the most recent version?
Chasidy Heckenbach
26.03.2012
Originally Posted by muffintop
I don't get it...
Here are screenshots of my problem...
Also, to run MM i have to double click on the midimasher.sh and run it in terminal.
Double clicking on mm does nada.
can you post a bigger screenshot - i can't make out much from that really. if u dble click it will run. you can check by something like "ps -efa | grep mm" which should show up the process. if you want to be able to select some option then you need to right click and "run in terminal" tho personally i do everything via a shell anyway, so i do:

Code:
$ cd src/midimasher/
$ ./midimasher.sh 
midimasher: build 20120326 (Linux)

#1: launchpad.lua
#2: debug.lua
#3: default.lua
#4: mpd18_midifighter_4banks.lua
#5: lpd8_midifighter_4banks.lua
#6: lpd8.lua
#7: mpd32_midifighter_4banks.lua
#8: gamepad_midifighter_4banks.lua
#9: launchpad_scroll_demo.lua
#10: midifighter_4banks.lua
#11: launchpad_twitch.lua

select a config >
tho u can also just run "./mm -i" as that's all the midimasher.sh script is doing. the shell script is more useful tho if you run something like the launchpad.sh one which preselects the launchpad config and so then can just run in the background, no need for the shell. launchpad.sh is just this:

Code:
#!/usr/bin/env bash
./mm -f launchpad.lua
but you could just run "./mm -f launchpad.lua &" from a prompt instead if u wanted

i'll debug your actual issue tho if u can post a bigger photo or just cut&paste any output.
Nana Mohs
26.03.2012
I don't get it...
Here are screenshots of my problem...
Also, to run MM i have to double click on the midimasher.sh and run it in terminal.
Double clicking on mm does nada.


---EDIT---
WORKS!!!!

thanks zestoi, you're the man
Chasidy Heckenbach
27.03.2012
Originally Posted by derschaich
works a charm now!

have a DIY midifighter clone here.

but want to define my own mapping, including slicer-like functions.

how can i access the midi-clock from traktor in MM?
cool! so you're using it via hid mode in midimasher or as a midi device and using something else to convert to midi? curious as i'm keen for any feedback on the hid stuff. i'm also adding in the ability to send data to a hid device but that's not needed for a gamepad type thing ofc.

what config are u loading atm? mappings can be completely customised and aren't too tricky once u get your head round them. they're just based around writing snippets of code that deal with what happens when a message comes in that u are interested in.

the file config/launchpad.lua is the most complete mapping atm, but is also quite complex so a bit confusing... i need to add more documentation to the webpage sometime.

i'm up for answering any question on using lua in midimasher anyway

you can't access midi clock atm. it's being decoded and used by the internal sequencer i've been working on but will need to make it available anyway now for the slicer stuff.

what data do u want to get from the clock? i presume not all the 24 ticks per beat... being able to capture() and do stuff on the beat via the midi clock is what i need and also wouldn't hurt to be able to get hold of the actual bpm in a variable for other use. so i can do something on each beat based on it.
Chasidy Heckenbach
27.03.2012
Originally Posted by MiL0
has anyone made a video of MM in action yet? keen to see what it can achieve
i had thought even a simple video showing multiple page switching with led recall and the slicer on a launchpad would be worth doing, also showing the virtual faders. i remember seeing a video with multiple pages and faders on a launchpad using midikatapult and that alone made me want to get a copy...
Allene Manitta
26.03.2012
works a charm now!

have a DIY midifighter clone here.

but want to define my own mapping, including slicer-like functions.

how can i access the midi-clock from traktor in MM?
Arcelia Siebeneck
26.03.2012
has anyone made a video of MM in action yet? keen to see what it can achieve
Chasidy Heckenbach
26.03.2012
Originally Posted by drmore
I was going to sugest using the midi clock to time the jumps.
yep, it should be better as it won't be "after the fact", i.e: we know when to send a message to traktor instead of waiting for the beatphase (which means we are already too late ofc)

The way it looks/work in my head is as follows

A button sets drops a loop in traktor.
i've tried setting an actual loop in traktor, it's how i really wanted to do it, but the issue was sometimes the beatjump jumping outside of the loop and then it's game over... should work fine now that it sends a "jump to active" cue before any beatjumps tho.

When a grid button is pressed Midimasher crunches the numbers and spits out the correct size beat jump for Tracktor
this is how i first tried to do it but it was never very reliable. it's now basically using the method described on the djtt blog a while back which is to first jump to a cuepoint and then issues beatjumps. this means even if it messes up once when u press again the mess doesn't get any worse as we jump back to the active cue again before doing anything else.

Midimasher then issues a 1 beat backwards jump in time with midi clock while the button is held to create the 1 beat slice.
ah yep... for when you're holding down a pad, as opposed to just pressing a bunch. it sounds quite behind the beat atm when u hold down a pad. hopefully this can be fixed by using midi clock instead of the beatphase.

Midimasher continues its original count in the background.

When the grid button is released a beat jump is issued to get the play head back to the position in loop that it would of been if you had not pressed a slice button.
this would be very cool... i did have an implementation of this in my original version and should put that back in. even if not holding down a pad, but just pressing, it would be good for it to jump back to where it would have been after that beat has finished.

I have no idea if thats even posible but the idea is to issue as little sequential commands to Traktor as posible. Im also assuming c++ can process such a small sequence of events way quicker than 1ms delay required to issue a sequence to traktor.
the c/c++/lua code is quick enough i believe, the biggest issue seems to be having to send multiple commands to traktor. nothing takes anything close to a full millisecond. i had timed one of my functions for setting up an effects unit traktor.fx_control(), that took around 0.4ms if it had to send out around 10 (i believe) commands to traktor. even that tho will be reduced in my next version which will mean the main processing thread doesn't have to wait for any midi ports when sending out data.

mm keeps track of the current beat and knows what beat u want to jump to ofc, question is how to get there... if you are on beat 4 and pressed the pad for beat 2 my first attempt at a slicer would issue a jump -2 whereas this current one issues a cuejump and a beatjump +2. it's a lot more reliable but does mean an extra command+delay.

i'm keen to work on this slicer tho if anyone actually wants to use it... i had given up on it before as no one seemed all that interested and i'd been looking at other things

would be cool to know exactly what/how the vci400 implements the slicer... i haven't even seen a demo of that yet
Chasidy Heckenbach
26.03.2012
Originally Posted by derschaich
gave MM a go this morning after being frustated by GlovePIE for the last couple of days.

tried the learn.exe, and everything went well except for me not being able to quit (same with hidlearn.exe)
it seems i screwed up with some mods recently... fixed and new versions built: mm.djism.com/downloads

a few changes internally on some unfinished mods since my last release but hopefully nothing that will affect anything. what controller you trying to learn? i'm always keen to add new device config files to my releases ofc
Tawna Ulmen
26.03.2012
I was going to sugest using the midi clock to time the jumps.

The way it looks/work in my head is as follows

A button sets drops a loop in traktor.

Same button starts Midimasher counting using midi clock for sync

Midimasher sets up a virtual grid of all the slices

When a grid button is pressed Midimasher crunches the numbers and spits out the correct size beat jump for Tracktor

Midimasher then issues a 1 beat backwards jump in time with midi clock while the button is held to create the 1 beat slice.

Midimasher continues its original count in the background.

When the grid button is released a beat jump is issued to get the play head back to the position in loop that it would of been if you had not pressed a slice button.

I have no idea if thats even posible but the idea is to issue as little sequential commands to Traktor as posible. Im also assuming c++ can process such a small sequence of events way quicker than 1ms delay required to issue a sequence to traktor.
Allene Manitta
26.03.2012
gave MM a go this morning after being frustated by GlovePIE for the last couple of days.

tried the learn.exe, and everything went well except for me not being able to quit (same with hidlearn.exe)

i tried typing:
q
Quit
quit
QUIT
exit

nothing helped.

any idea what i am doing wrong?


WIN 7 here
Chasidy Heckenbach
24.03.2012
another mod i believe i'll do (not that it solves this issue directly) is use midi clock to sync the slicer actions now that midimasher decodes midi clock. it should provide more accurate control than the beat phase monitor and i can then probably remove that from the tsi which might have some effect overall - as there'll be less midi spewing into midimasher all the time. will have to see...
Chasidy Heckenbach
24.03.2012
Originally Posted by drmore
Spent some more time testing this morning. There is defo a delay. After the first slice you start to miss a millisecond of the sound.
ah... missed that u said that before. so the first slice works ok - but not the others. that makes sense... since we have to add a 1ms delay in between the "jump to active cue" and the beatjump. not that u would notice something as small as 1ms, but in the meantime the main processing loop is having to update leds on the launchpad that all in all probably means the beajjump gets sent out too late. wouldn't need any of this logic if we could just send out the "jump to active cue" and "beatjump" together and traktor not get confused.

hopefully these new threads will solve the issue - won't have time to code/test that for a few days - but will be the first thing i'll do next in midimasher.
Chasidy Heckenbach
24.03.2012
you finding the delay is just with the slicer functions or beatjumps from within midimasher? i.e: you're still using midimasher for any multi pages or gone back to native traktor mapping?

led feedback on the launchpad is sloooow and i suspect that's where the issue is. looks like it won't take much code to create a new thread for each output anyway so then the main processing loop is never held up by any device. i probably should have thought of doing this from the getgo tbh.
Tawna Ulmen
24.03.2012
Spent some more time testing this morning. There is defo a delay. After the first slice you start to miss a millisecond of the sound.

For now im just using a grid of 8 pre defined beatjumps. That combined with beatmasher, gater, flangers and delays gives me all the crazy sounds I could need.

Worked out how to use a free modifier as a page select button so now I can flick between 8 hotcue or 8 beatjumos without altering the rest of the pad.

<< Back to Post and find Controller MappingsReply

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

Created by Ajaxel CMS

Terms & Privacy