Ralf Öchsner


NIControl is a small program that maps the Control events of the Native Instruments Audio Kontrol 1 to MIDI compliant signals under Linux. The sound card is well supported through the ALSA project and the driver produces kernel input events for the controls on top of the sound card. These input events are keyboard events for the buttons and joystick events for the wheel. With most of the music software needing a MIDI compliant controller the kernel events can hardly be used to control these programs. Therefore I have written the small program NIControl which maps the kernel events to MIDI compliant signals.


You can download the latest version of NIControl and its source here. An Ubuntu package will be provided soon. The program uses the RtMidi library for generating real time MIDI events. The library (which is very small) is included in the NIControl package and its sources are provided so that no further dependency has to be dealt with.

Building NIControl

The source package provides a configure script and a makefile which can be used to compile NIControl:
tar xzvf nicontrol.tar.gz
cd nicontrol
For successfully compiling it you need to have the development files of the shared library for ALSA applications (which is a dependancy of the used RtMidi library) installed. On Ubuntu therefore you have to install the libasound2-dev package (sudo apt-get install libasound2-dev).

Running NIControl

NIControl needs to have read access to the /dev/input/event* file that is provided by the kernel driver of the sound card. Be sure that you have the right permissions to this file on your system. You can set the correct permissions by creating a udev rule as described in this tutorial.

Then simply start the MIDI daemon with:

cd src

When everything works, the LEDs of the three buttons will blink for a moment and then turn off. When you press a button or turn the wheel the according LED will turn on.

Additional Information

You can find additional information on this sound card under Linux on this page. It is possible to control the LEDs manually (for example with scripts) and to use all four output channels with ALSA as well as JACK.