An improved control script for the Novation Impulse 25/49/61 allowing Bitwig users to use all features of the Impulse devices. Additionally the target of this script is to allow users to access the most important functions of Bitwig directly from the Impulse without using a mouse or computer keyboard.
- Working: Midi keyboard
- Working: Channel aftertouch
- Working: Modwheel
- Working: Pitchbend
- Working: All rotary encoders
- Working: Transport buttons
- Working: Master fader
- Working: Midi/mixer button
- Working: Track select buttons (shift + octave up/down)
- Working: Plugin, midi, mixer, page up, page down buttons
- Working: All drum pads including aftertouch
- Not implemented (yet): Clip launch functions
- Not implementd (yet): Autodiscovery. The controller must be added manually atm.
Since I don't own these devices for now the 8 faders and fader buttons probably won't work. But while reverse engineering the Impulse's template data I most probably found the relevant midi messages the faders and buttons send. So, as soon I find the time I can add support for these too.
Since the Impulse devices have quite a lot of buttons and LEDs and a Display we can send data to, I want to make as many Bitwig features as I can accessible via the Impulse.
- Drum pad cc/note on values: Set the brightness of the background led.
- Midi / Plugin / Mixer State
- F0 00 20 29 00 71 0F 5A 00 00 00 06 09 05 F7: Go into boot menu and be ready to receive a firmware update. This is the first part of a firmware update.
- F0 00 20 29 00 70 F7: Get firmware version. Example response: F0 00 20 29 00 70 00 00 06 05 08 00 00 06 09 03 0D F7 == Boot version: 658, Main version: 693
- F0 00 20 29 [sender midi id] 06 01 01 01 F7: Device inquiry + activating the connection to the computer. Example response: F0 00 20 29 67 07 19 F7 == 719 is the device id of the Impulse 25. I can't find the Pdf anymore where I found this but I think 71A is the 49 key version and 71B the Impulse 61.
- F0 00 20 29 00 08 [8 bytes of ascii text] F7: Show the given text on the text display of the Impulse.
- F0 00 20 20 00 09 [3 bytes of ascii text] F7: Display text in the big 3 charachter area of the display.
- F0 00 20 29 43 00 00 [impulse template] F7: Write the given template data into the ram. This is the same as manually changing all settings/mappings and lights up the 'save' element on the display meaning that a user can save the current settings as a template.
At any time when we send the template sysex message we can overwrite the currently selected (or even changed and unsaved) template.
There is almost complete documenation of the template data format. So it's quite easy to create your own template without having to manually set all values on an Impulse device.
While reverse engineering and testing all features of the Impulse 25 I came across several things that might not be intutive and owners should know. Maybe someone from Novation/Focusrite reads this at some point and uses it as inspiration for firmware updates.
- Some, but not all buttons send midi messages both for pressing and releasing them.
- The Midi/mixer button below the master fader sends messages only on button release and sends different CCs depending on the button's state.
- The Octave up/down buttons change the keyboard octave only on button release - this feels slow while performing. (It would be extremely useful if this would send a midi CC message.)
- When changing the octave the display lights up an 'octave' element. But this is only lit directly after pressing an octave button. I'd have expected this to keep being lit as long as the octave is changed.
- (BUG?) When pressing shift + any other button and then releasing them, shift does not send a midi message for the button release.
- In midi state (after pressing the midi/page-down button) everytime an ecoder is rotated, the text display is set to 'CC# XX'. It's not possible to send text to the display in this case because it gets overwritten immediately. The same goes for the master fader in midi mode.
- The encoders in plugin and mixer state send a CC with the direction of the change while in midi mode they send absolute values. This is a limitation because we can't use the encoders in midi mode as generic buttons since when the absolute value is the minimum or maximum no more midi messages are sent.
- We can change the background color of the drum pads by sending midi messages to the Impulse. BUT only if the device is in clip launch mode. What we can do tough is setting the brightness by sending a midi message.
- In the default template (BascMidi) the rotary encoders 7 and 8 use the same CC values as rewind and fast forward making it impossible to distinguish between them.
- There's no way of programmatically triggering a dump of the current template. If we could do this it would be possible to programmatically change specific values which would enable us to add many features that are impossible right now.
When the impulse is in clip launch mode (and only then), we can set the pad's colors by sending CC events: sendNoteOn(0xb0, 60 + [0-7], [color]); These are the available colors:
0 | Off |
1 | Red dark |
2 | Red medium |
3 | Red full |
4 | Off |
5 | same as 1 |
6 | same as 2 |
7 | same as 3 |
8 | Red dark blinking |
9 | Red medium1 blinking |
10 | Red medium2 blinking |
11 | Red full blinking |
12 | same as 8 |
13 | same as 9 |
14 | same as 10 |
15 | same as 11 |
16: | Green |
17 | Yellowish green |
18 | Light orange |
19 | Orange |
20 | same as 16 |
21 | same as 17 |
22 | same as 18 |
23 | same as 19 |
24 | Green blinking |
25 | Yellowish green blinking |
26 | Light orange blinking |
27 | Orange blinking |
28 | same as 24 |
29 | same as 25 |
30 | same as 26 |
31 | same as 27 |
32 | Green |
33 | Yellowish green |
34 | Greenish yellow |
35 | Yellow |
36 | same as 32 |
37 | same as 33 |
38 | same as 34 |
39 | same as 35 |
40 | Green blinking |
41 | Yellowish gree blinking |
42 | Greenish-yellow blinking |
43 | Yellow blinking |
44 | same as 40 |
45 | same as 41 |
46 | same as 42 |
47 | same as 43 |
48 | same as 32 |
49 | same as 33 |
50 | same as 34 |
51 | same as 35 |
52 | same as 36 |
53 | same as 37 |
54 | same as 38 |
55 | same as 39 |
56 | same as 40 |
57 | same as 41 |
58 | same as 42 |
59 | same as 43 |
60 | same as 44 |
61 | same as 45 |
62 | same as 46 |
63 | same as 47 |
64 | same as 0 |
65 | same as 1 |
… |