Forums > Dev

novation nocturn usb protocol

May 6, 2013 | 8:12 pm

i found my nearly forgotten novation nocturn controller in the corner. after thinking about reimplementing it into my system, i instantly remembered what a pain is the Automap software and setting it up. (unfortunately the nocturn will not work without this software because it does not work as a generic midi controller. why novation, why?)
btw: i’m on windows..
i started to look around if someone already created a custom driver or even a max object. i found this guy on youtube who sniffed and "hacked" the usb protocol of the nocturn with python under linux.
https://www.youtube.com/watch?v=uy4oY5Mkytg
https://github.com/felicitus/nocturn-game

another guy who tried to add the midi part

https://github.com/dewert/nocturn-linux-midi

i thought about doing it in C (long term objective, need more C training first) and there’s libusb wich even seems to provide a cross-platform usb lib.

https://github.com/Chronic-Dev/libusb

i was able to create and install the libusb driver for the nocturn, but have some trouble with the header files (no missing files but missing links, probably noobish problems)
anyways, i don’t expect me to be able to create a nocturn object in near future but i want to share this for interessted people.
maybe you can tell me if it’s possible in general to use the information in the phyton files to create a nocturn-external for max?. O.


May 7, 2013 | 7:56 am

A nocturn external would be perfect as I also had forgotten mine in a dusty corner because of automap’s pain. This is far from what they told it is…


May 13, 2013 | 10:36 am

i’ve made great progress with this. Seems like i AM able to create a nocturn object in near future :) (for windows) i guess because simplifies it.

at first i focus on the input (nocturn->pc).
the usb read function blocks the thread, so i created an extra thread for the read function. stopping the thread will only work if i use a timeout for the usb read request, so that the thread can check if it’s "stop" variable is true. i wonder what time to use for the timeout or if i can stop a thread allthough it’s blocked currently..
i understand mutex, but what is the qlem for?
i dunno much about usb specs. Is there another buffer before the application? at some point it seemed to me that i can press the button on nocturn, AFTER THAT executing the read function will still get some values? so it wouldn’t miss something if the worker thread stops reading for a moment to do other things?

i will post a beta version when the object is reporting all input and stable on my system. O.


May 13, 2013 | 10:43 am

don’t know if you see the link above, i don’t see it but i also do not see post dates currently. just in case ;)

"because libusb-win32 simplifies it"

http://sourceforge.net/apps/trac/libusb-win32/wiki


May 16, 2013 | 6:36 am

please send me mail to contactolsen at gmail if you want to help me testing the external in it’s very early beta state. required is Windows and a Novation Nocturn. no Automap software needed, not even the novation driver. O.


February 23, 2014 | 11:19 am

results: http://www.11olsen.de/code/max-objects/11nocturn


February 24, 2014 | 2:30 am

Brilliant! Any plans for a Mac port of the external?


February 24, 2014 | 9:36 am

i can’t do it without a mac. please send me a new macbook pro ;). i’ll share the source with everyone who asks for it. but there’re os specific things that won’t translate 1:1. maybe there’s a mac version of libusb, i didn’t do any research into that direction. O.


Viewing 8 posts - 1 through 8 (of 8 total)