Module Duplex.Applications.NotesOnWheels
Notes On Wheels (N.O.W) is an arpeggiating step sequencer.
Inheritance: Duplex.Application > Duplex.Application.NotesOnWheels
Features
N.O.W. allows you to create a sequence and control all aspects of each step (such as the pitch, velocity etc.) in realtime.
As for input, N.O.W. is very flexible, as you can control it via an additional MIDI input. Also, the virtual control surface will, when focused, detect and respond to keypresses within a specific range.
The virtual keyboard supports both ordinary transpose (one octave up/down from the middle C), and multi-step sequences (press keys while holding the SHIFT modifier). Same goes for the external MIDI keyboard, which can be set up to act upon CC messages and pitch bend.
Controller setup
A dedicated control surface is located in the Renoise tools menu: Duplex > Custombuilt > Notes On Wheels
_________________________________________________
| _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
| |_||_||_||_||_||_||_||_||_||_||_||_| |_||_| | <- Position + Line offset
| _ _ _ _ _ _ _ _ _ _ _ _ ______ |
| (_)(_)(_)(_)(_)(_)(_)(_)(_)(_)(_)(_) |__||__| | <- Pitch controls
| _ _ _ _ _ _ _ _ _ _ _ _ ______ |
| (_)(_)(_)(_)(_)(_)(_)(_)(_)(_)(_)(_) |__||__| | <- Velocity controls
| _ _ _ _ _ _ _ _ _ _ _ _ ______ |
| (_)(_)(_)(_)(_)(_)(_)(_)(_)(_)(_)(_) |__||__| | <- Offset controls
| _ _ _ _ _ _ _ _ _ _ _ _ ______ |
| (_)(_)(_)(_)(_)(_)(_)(_)(_)(_)(_)(_) |__||__| | <- Gate controls
| _ _ _ _ _ _ _ _ _ _ _ _ ______ |
| (_)(_)(_)(_)(_)(_)(_)(_)(_)(_)(_)(_) |__||__| | <- Retrigger controls
| _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
| |_||_||_||_||_||_||_||_||_||_||_||_| (_)(_) | <- Steps + Spacing/Length
| |
| |Write| |Learn| |Fill| |Global| |Modes...| | <- Various controls
| ______________________________________________|
Also, check out the compact version, which use fewer controls, but still manages to contain every feature of it's bigger brother. This is possible because the sliders in that version are switching between the currently active mode (pitch, velocity etc.), and therefore, require only a small set of physical controls. Perhaps it's a more realistic starting point for your wn controller mapping than the fully expanded version? It's located here: Duplex > Custombuilt > Notes On Wheels (compact)
Discuss
Tool discussion is located on the Renoise forum
Changelog
0.98
- First release
Functions
__init (VarArg) | Constructor method |
start_app () | inherited from Application |
select_midi_port (port_idx) | initialize MIDI input |
midi_callback (message) | receive MIDI from device |
schedule_output (seq_step, mask_mode) | schedule output, simple way to reduce number of pattern writes: remember the last step / mode - if either change, output immediately |
output_sequence (seq_step, mask_mode, stream, force) | output sequence to pattern |
on_idle () | inherited from Application |
on_new_document () | inherited from Application |
disable_write_mode () | Update display of write mode |
on_keypress (key) | inherited from Application |
create_empty_sequence () | create or empty sequence |
_attach_to_instrument (new_song) | attach to selected instrument |
detect_slices () | detect number of slices, and if using "white keys" |
to_sliced_pitch_range (int_val, invert) | convert the pitch range (normally 0-121) to the sliced sample range (for example, middle C and every white key for the next two octaves) |
change_mode (mode) | when mode has changed |
shift (amount) | shift sequence in either direction if we have a pending offset, update that one as well |
_build_app () | inherited from Application |
reset_adjustments () | reset adjustments will apply the default adjustment for each parameter, and update the display (dedicated/multi-control) |
Tables
default_options | These are the default options for the application |
available_mappings | These are the available mappings for the application
Note: the |
white_keys | list of white keys |
self._controls | all UIComponent references are kept here create tables in advance, the rest ad hoc |
Fields
self.step_focus | the step which was last modified (used for non-global output) |
self.number_of_slices | set to something else than 0 when instrument is sliced (tracked in realtime via the sample_mappings property) |
self.lower_note | remember where the sample mappings start/end (tracked in realtime via the sample_mappings property) |
self.white_keys_only | detect if sample mappings are 'white keys only' (tracked in realtime via the sample_mappings property) |
self.accept_note_input | true while the sequencer accepts incoming notes PC keyboard: when shift modifier is pressed |
self.has_received_input | true, once we input using shift modifier |
self.midi_pressed_keys | MIDI keys: remember pressed keys |
self.midi_max_keys | MIDI keys: max number of simultaneously pressed keys |
self.scheduled_step | use these for scheduled output (assign a special value to make them output first time) |
self._blink | track playback progress in 'blinks' |
self.write_button_state | the lit state of buttons |
self.track_changed | track changed? |
self.touched | when using the 'latch' write method, this will indicate that no control has yet been touched |
self._playing | the song is playing? |
self.realtime_pos | realtime position |
self.autolearn | when auto-learning is enabled |
self.just_entered_autolearn | (bool) temporary flag set when entering autolearn mode |
self.seq | (NOW_Sequence) internal sequence representation |
self.last_line | the pattern-line last detected by idle loop |
self.line_offset | the current line offset |
self.pending_line_offset | the upcoming pattern's line offset |
self.pending_seq_pos | sequence-pos of upcoming pattern |
self.mode | (enum) the current mode |
self.write_method | (enum) write method |
self.global_mode | (bool) global mode |
self.fill_mode | (bool) fill mode |
self.write_mode | (bool) write mode |
self.midi_in | (renoise.Midi.MidiDevice) |
Functions
- __init (VarArg)
-
Constructor method
Parameters:
- VarArg )
See also:
- start_app ()
-
inherited from Application
Returns:
-
bool or nil
See also:
- select_midi_port (port_idx)
-
initialize MIDI input
Parameters:
- port_idx
- midi_callback (message)
-
receive MIDI from device
Parameters:
- message
- schedule_output (seq_step, mask_mode)
-
schedule output, simple way to reduce number of pattern writes:
remember the last step / mode - if either change, output immediately
Parameters:
- seq_step (int), step to output (can be nil)
- mask_mode (enum), restrict to specific mode (can be nil)
- output_sequence (seq_step, mask_mode, stream, force)
-
output sequence to pattern
Parameters:
- seq_step (int), step to output (can be nil)
- mask_mode (enum), restrict to specific mode (can be nil)
- stream (bool), produce output in 'short bursts'
- force (bool), force output (e.g. when mode buttons are held)
- on_idle ()
-
inherited from Application
See also:
- on_new_document ()
-
inherited from Application
See also:
- disable_write_mode ()
- Update display of write mode
- on_keypress (key)
-
inherited from Application
Parameters:
- key (table)
See also:
- create_empty_sequence ()
- create or empty sequence
- _attach_to_instrument (new_song)
-
attach to selected instrument
Parameters:
- new_song
- detect_slices ()
- detect number of slices, and if using "white keys"
- to_sliced_pitch_range (int_val, invert)
-
convert the pitch range (normally 0-121) to the sliced sample range
(for example, middle C and every white key for the next two octaves)
Parameters:
- int_val (number) the value to scale
- invert (bool) when the value is sent to a control
- change_mode (mode)
-
when mode has changed
Parameters:
- mode (int, MODEPITCH,MODEVELOCITY,etc)
- shift (amount)
-
shift sequence in either direction
if we have a pending offset, update that one as well
Parameters:
- amount (int)
- _build_app ()
-
inherited from Application
Returns:
-
bool
See also:
- reset_adjustments ()
- reset adjustments will apply the default adjustment for each parameter, and update the display (dedicated/multi-control)
Tables
- default_options
-
These are the default options for the application
Fields:
- write_method
Select the desired write method
WRITE_METHOD_TOUCH will only output notes while the controller is being used WRITE_METHOD_LATCH will start output once the controller is being used WRITE_METHOD_WRITE will output notes continously, no matter what
- edit_sync Enable output when recording/edit-mode in Renoise is active
- global_mode Enable this to start the application in global mode
- fill_mode Enable this to start the application in fill mode
- offset_quantize Adjust this to divide a sample into a number of equally sized segments when (applied when using the sample-offset controls).
- offset_wrap Enable this to wrap the sample-offset
- midi_keyboard Select among available MIDI devices
- write_method
- available_mappings
-
These are the available mappings for the application
Note: the
setmode[...]
mappings allow you to assign a mode directly to a specific button. If two or more modes are assigned in this way, they will act as radio buttons. As a secondary feature, hold any of these buttons for a moment, and the sequence will be written to the pattern,fill mode
Fields:
- choose_mode
(UISlider) The mode determine which kind of output the 'Steps' dials will generate
1 = Pitch - set the pitch of each step - max/min value will clear 2 = Velocity - set the volume of each step 3 = Offset - set the sample offset of each step 4 = Gate - set the length of each step, max is infinite 5 = Retrig - set the retrig rate of each step
- set_mode_pitch (UIButton) Set mode to Pitch*
- set_mode_velocity (UIButton) Set mode to Velocity*
- set_mode_offset (UIButton) Set mode to Offset*
- set_mode_gate (UIButton) Set mode to Gate*
- set_mode_retrig (UIButton) Set mode to Gate*
- multi_sliders (group of UISliders) Specifies mode-dependant input dials (can control any parameter by switching mode)
- pitch_sliders (group of UISliders) Direct pitch control of each step
- velocity_sliders (group of UISliders) Direct velocity control of each step
- offset_sliders (group of UISliders) Direct offset control of each step
- gate_sliders (group of UISliders) Direct gate control of each step
- retrig_sliders (group of UISliders) Direct retrig control of each step
- num_steps (UISlider, 1-12) Set the number of steps in the sequence (mode-dependant)
- step_spacing (UISlider, 1-16) This value will determine the space between each note in lines (a value of 0 will output all notes simultaneously)
- pitch_adjust (UISlider) global pitch adjust (affects all steps)
- velocity_adjust (UISlider) global velocity adjust (affects all steps)
- offset_adjust (UISlider) global offset adjust (affects all steps)
- gate_adjust (UISlider) global gate adjust (affects all steps)
- retrig_adjust (UISlider) global retrig adjust (affects all steps)
- multi_adjust (UISlider) global adjust (affects all steps in given mode)
- write (UIButton) Toggles between output and no output (if you don't have room for this, check out @edit_sync)
- learn (UIButton) Import pattern editor data beginning from the cursor position
- fill (UIButton) Fill the entire track with the sequence, each time something changes. Use with caution, as this might be heavy on the CPU (with long patterns and many note columns)
- global (UIButton) Enable 'global' to output all parameters (pitch, velocity, etc.) at the same time. When off, only the modified parameter type is output
- shift_up (UIButton) Control the line-number offset (increase offset by a single line)
- shift_down (UIButton) Control the line-number offset (decrease offset by a single line)
- extend (UIButton) The 'extend' button will multiply the sequence's length by two, by cloning all steps and doubling the global retrig rate.
- shrink (UIButton) Pressing 'shrink' will reduce the length of the sequence and global retrig rate by 50%
- position (UIButton) Set the position of the sequence, based on the position of the edit cursor
- choose_mode
- white_keys
-
list of white keys
Fields:
- ... lot of keys
- self._controls
-
all UIComponent references are kept here
create tables in advance, the rest ad hoc
Fields:
- multi_sliders
- pitch_sliders
- velocity_sliders
- offset_sliders
- gate_sliders
- retrig_sliders
- pos_buttons
Fields
- self.step_focus
- the step which was last modified (used for non-global output)
- self.number_of_slices
- set to something else than 0 when instrument is sliced (tracked in realtime via the sample_mappings property)
- self.lower_note
- remember where the sample mappings start/end (tracked in realtime via the sample_mappings property)
- self.white_keys_only
- detect if sample mappings are 'white keys only' (tracked in realtime via the sample_mappings property)
- self.accept_note_input
- true while the sequencer accepts incoming notes PC keyboard: when shift modifier is pressed
- self.has_received_input
- true, once we input using shift modifier
- self.midi_pressed_keys
- MIDI keys: remember pressed keys
- self.midi_max_keys
- MIDI keys: max number of simultaneously pressed keys
- self.scheduled_step
- use these for scheduled output (assign a special value to make them output first time)
- self._blink
- track playback progress in 'blinks'
- self.write_button_state
- the lit state of buttons
- self.track_changed
- track changed? check via idle loop
- self.touched
- when using the 'latch' write method, this will indicate that no control has yet been touched
- self._playing
- the song is playing? check via idle loop
- self.realtime_pos
- realtime position
- self.autolearn
- when auto-learning is enabled
- self.just_entered_autolearn
- (bool) temporary flag set when entering autolearn mode
- self.seq
- (NOW_Sequence) internal sequence representation
- self.last_line
- the pattern-line last detected by idle loop
- self.line_offset
- the current line offset
- self.pending_line_offset
- the upcoming pattern's line offset
- self.pending_seq_pos
- sequence-pos of upcoming pattern
- self.mode
- (enum) the current mode
- self.write_method
- (enum) write method
- self.global_mode
- (bool) global mode
- self.fill_mode
- (bool) fill mode
- self.write_mode
- (bool) write mode
- self.midi_in
- (renoise.Midi.MidiDevice)