New Tool (2.7, 2.8): Step Sequencer

Hello,

I am currently working on a step sequencer plugin. I did not find any vst that fullfills my wishes, so thanks to the great lua-extension I started to code my own. My intention is to use the step-sequencer for live acts to build new tracks from scratch. At the end I would like to control the step sequencer with midi-hardware (e.g. with the Launchpad or Monome).

It has unlimited tracks and 8, 16 or 32 steps and a moving light so that you can see which step is currently playing. You can insert a note of an instrument into the appropriate track by clicking on a step; clicking on a step twice will remove the note again. The position of the note depends on the resolution (called editstep) you chose; currently there are the editsteps 1,2,4. Editstep 4 means, that every step in the sequencer reflects every fourth note of the pattern. E.g. having set editstep 4 and clicking step 8 in the sequencer will insert a note into the pattern at position 32. When having set editstep 2 and clicking step 8, it will insert a note at position 16; having editstep 1, it will insert at position 8. To cover all 64 positions of a pattern regardless which resolution you have chosen, it is possible to page through the pattern with the “Page” parameter. For example, if you have a pattern length of 64 and set the stepsize of the step sequencer to 16, there are 4 pages. Page 1 reflects the rows 1-15 of the pattern, page 2 the rows 16-31, page 3 32-47 and page 4 48-64. So you have direct access to the complete pattern and can adjust the notes quickly with the help of a nice overview.

Features:

  • 8, 16 or 32 steps
  • unlimited free selectable Tracks
  • for each track one sample, sample bank, VST or MIDI instrument
  • adjustable note value including note OFF or “–”
  • chord mode: insert up to 3 notes (columns 1-3) simultaneously in a track
  • velocity, delay
  • note length = insert note OFF n steps after note (n = range from 0 to editstep-1)
  • button to delete all steps of a track directly
  • different resoultion modes (editsteps e=1,2 and 4). Each step in the sequencer represents the (step#-1 * e)th position of the pattern (e.g. editstep 4: step1=pos1, step2=pos4, step3=pos8,…, step16=pos60)
  • all parameters changeable during play
  • midi control: All steps of each track and the parameter Editstep and Page can be controlled via midi hardware. Just open MidiMapping in Renoise to assign.
    It should be extra fun to control the sequencer with your Hardware e.g. Monome, Ohm64 or similar.
  • multisample (samplebank) support
  • instant instrument change: when selecting another instrument for a track, the notes in the pattern of the appropriate track are changed to the new instrument

Changelog:
v.1.81

  • control matrix: change parameter like cutoff, velocity, delay, note value for every single step. Up to 8 control parameter per track. All parameters are midi controllable.

v.1.63

  • keyboard mode: create melodies and chords in a much more easier way.
  • keyboard mode midi mapping: all keys and buttons are midi mapable. So it is possible to assign the octave to a midi keyboard and set the notes with the midi keyboard
Click to view contents

v.1.52

  • fixed icon bug
  • the correct Base-note of a multisample instrument and its name should be shown
  • improved the pattern loading: the values (note, name, etc.) of the first occurence of an instrument/sample of a track in the pattern is always loaded into the step sequencer, regardless if its position is visible in the resolution (Editstep)
  • removed keyboard focus lock bug
    When changing an instrument/sample, all notes of the selected track are changed to the new instrument/sample immediately.
    v.1.51
  • highlighted every 4th step in the progress bar
  • changed base note handling
  • some internal changes
    v.1.5
  • adjustable step length: 8,16 or 32 steps can be set in the added preferences dialog. There you can set the number of steps and the settings will be saved automatically.
  • rewritten lauflicht: updating of the lights has much better performance now
    v.1.3/v.1.4
  • added Launchpad features (not public)

v.1.2

  • added Multisample support. Multisample Instruments will be shown in Instrument selection box like BankName:SampleName. If selected
    a sample from a bank, the basenote of the sample will be loaded in the Note1-selectbox by default.
  • patternloading into sequencer: correct multisample loading: if basenote of multisample matches note in appropriate track, the correct
    multisample will be shown in the drop-down box.
  • made the Instrument Box wider
  • when changing an instrument in the drop-down box, all notes of the appropriate track in the pattern will be changed to the new selected instrument.
    So you can instant change instruments without replacing the sample!
    v.1.11
  • fixed bug in midi mapping of steps
  • now also all controller which send absolute values (like knobs, sliders) can be used to switch on/off a step. A value <64 means off, >=64 on
  • fixed wrong delay maximum value from 7f to ff
    v.1.1
  • added Midi Control:
  • To map the steps of the Sequencer to a midi controller, click on Midi Map or Options->Midi Mapping
    and assign a your midi-controller to each step of each track. Please use controllers with the support of sending values of type “switch (on|off)” only, e.g. a toggleable button.
  • added MidiMapping to editstep and page. Please use controllers with support of absolute values only, e.g. knobs, sliders etc.
    The tool will automatically calculate the correct ranges of the appropriate values for the midi-controller.
    v1.0
  • rewritten gui drawing
  • it is possible to insert/delete a track on the fly. The gui will be updated (except insert a track). when inserting a track, following Renoise lua Scripting API-bug appears: [Fixed 2.8 Beta] Renoise.song().pattern_Iterator Does Not Update Corre
    workaround: reload pattern via switching editstep or close/restart gui
  • added delete button at the end of each track. This function deletes all notes of the pattern regarding the current editstep and selected page.
  • submitted to renoise app directory. :)
    v0.6:
  • reload step sequencer lights on patternchange
  • paging: in editstep 1 and 2, implement pages to display the notes of the complete pattern. e.g. on editstep 1 page 1 shows pattern lines 1-15, page 2: lines 16-31 and so on.
  • fixed New Tool (2.7, 2.8): Step Sequencer
  • fixed New Tool (2.7, 2.8): Step Sequencer
  • fixed New Tool (2.7, 2.8): Step Sequencer (v0.61)
  • rewritten lights update in handle_app_idle_notification in main.lua (v0.63)
  • fixed New Tool (2.7, 2.8): Step Sequencer (v0.63)
  • fixed New Tool (2.7, 2.8): Step Sequencer patternsize change can be done on the fly. (v0.63)
  • fixed New Tool (2.7, 2.8): Step Sequencer (v0.64)
  • there is no limit on the number of tracks anymore. All audio tracks of the current song will be displayed. If a track is added/deleted during editing, the tool has to be reloaded to update the new amount of tracks, as there is no observer on these actions. (v0.64)
    v0.5:
  • removed local functions
  • instrument reloading/renaming/adding/deleting/doing-any-changes should update the instrument selection in every track and should not result in an error message
  • Pattern-loading: loads the notes of the currently selected pattern into the step lights on gui startup. When changing the editstep, the lights of the step sequencer will be reloaded to the selected resolution on the fly.
    E.g. editstep 2 means: display of every second note; editstep 4 means: display of every fourth note
    Parameters like instrument number, note value, velocity, delay will be taken from the first occurence in the appropriate track, and the first three note columns are regarded only.
    v.041a:
  • fixed crash when closing and restarting the gui
  • when restarting the gui all previous made changes should be recalled (no real pattern-parsing/loading yet)

Planned features:

  • v0.5 load given pattern into step stequencer (initial when startup
  • v0.6 and by patternchange
  • v0.6 improved resolution: when having editstep<4, implement a page method to cover the complete pattern (64 steps)
  • v1.0 customize number of tracks
  • v1.1 control the sequencer via midi-hardware
  • v1.2 multisample (samplebank) support
  • v1.2 instant instrument change
  • v1.5 adjustable step length (8, 16, 32)
  • v1.52 special integrated Novation Launchpad version
  • postponed control the sequencer via TouchOSC
  • v1.63 keyboard mode
  • controller matrix

If you have ideas please feel free to tell them. :)

Download:
2.8: New beta version (1.89):

  • for 2.8 only
  • new controller matrix
  • controller matrix headline with note values
  • big performance improvement on pattern change/pattern reload
    2952 de.cie-online.StepSequencer.xrnx

64 bit users:
2953 de.cie-online.StepSequencer.xrnx

2.7: New beta version (1.63):
2636 de.cie-online.StepSequencer.xrnx

Linux 64bit User(1.52):
If you have a Linux 64bit system please use this version. The version on the tools page won’t work for 64 bit.
2488 de.cie-online.StepSequencer.xrnx

Launchpad version (1.53):
There is a special Novation Launchpad version that makes the Launchpad to a Hardware Step Sequencer.
Went gold, get it here.

There is also an own forum thread

old version (1.21) (for Renoise 2.6):
I will not update or add new features to the tool for Renoise 2.6 or below in future. Please update to 2.7+ or use the old 2.6 version (1.21).
The old version is also available on the tools page

Donate:
If you like this plugin and use it often you are welcome to donate (please navigate to the plugins-page). Thank you. :)

Project pages:
http://www.cie-online.de
http://www.stepsequencer.net

A screenshot of the current state is attached.
2814 controlmatrixdemo.png

stop cockteasing already Cie and drop that shit! I want to play around with it! :slight_smile:

Thanks for the replies :)

I think you mean the same what I have called “editstep”?

Here you are; please have a look in the first post.

Wicked, having the input automatically draw in the notes in the pattern editor brought a smile to my face! :slight_smile:

Now for a first request:

The ability to clear a row, or clear all inputs.

Bugs:

Setting the pattern length to 1, set the edit step in your tool to 1, draw in more then one box results in:

"'C:\Users\plugexpert\AppData\Roaming\Renoise\V2.6.0\Scripts\Tools\de.cie.StepSequencer.xrnx\main.lua' failed in one of its notifiers.  
The notifier will be disabled to prevent further errors.  
  
Please contact the author (Cie [cie@cie-online.de]) for assistance...  
  
.\gui.lua:83: attempt to index field '?' (a nil value)  
stack traceback:  
 .\gui.lua:83: in function 'set_note'  
 .\gui.lua:119: in function <.><br>```

<br>
<br>
Opening a new tool instance after the closing the bug notice gave me:<br>
<br>

```<br>'C:\Users\plugexpert\AppData\Roaming\Renoise\V2.6.0\Scripts\Tools\de.cie.StepSequencer.xrnx\' failed to execute in one of its menu entry functions.<br>
<br>
Please contact the author (Cie [cie@cie-online.de]) for assistance...<br>
<br>
std::logic_error: 'ViewBuilder: a view with the id 'track_number1' was already registered to this viewbuilder instance.'<br>
stack traceback:<br>
  [C]: in function 'popup'<br>
  .\gui.lua:274: in function 'create_gui'<br>
  main.lua:68: in function <67><br>```

<br>
<br>
Quitting and Rebooting Renoise seemed to open up the script again correctly, but loading the tool while having the instrument list still empty and manually loading each instrument slot from the disk-op gave the following notice when trying to load a sample [b]outside[/b] the original range of the song. In other words, the tool crashed when Renoise automatically inserts a new empty instrument slot:<br>
<br>

```<br>'C:\Users\plugexpert\AppData\Roaming\Renoise\V2.6.0\Scripts\Tools\de.cie.StepSequencer.xrnx\main.lua' failed in one of its notifiers.<br>
The notifier will be disabled to prevent further errors.<br>
<br>
Please contact the author (Cie [cie@cie-online.de]) for assistance...<br>
<br>
.\gui.lua:234: attempt to index field '?' (a nil value)<br>
stack traceback:<br>
  .\gui.lua:234: in function <.><br>```

<br>
<br>
Will test some more.</.></67></.>

Having great fun setting the patternlength to 16 and the editstep to 1 in your tool!

Some more requests :)

  1. a preview button that triggers/plays the sample/instrument without inputting any note, for when you don’t remember what sample it is / can’t read the complete name in the instr listing.

  2. the ability to highlight certain blocks (sorta like Renoises pattern/seq highlight), making it easier to determine the placement of hits.

  3. ability to call & restore presets :)

Bug:

Replacing a sample (in this case with a vsti) while having the script playing:

'C:\Users\plugexpert\AppData\Roaming\Renoise\V2.6.0\Scripts\Tools\de.cie.StepSequencer.xrnx\main.lua' failed in one of its notifiers.  
The notifier will be disabled to prevent further errors.  
  
Please contact the author (Cie [cie@cie-online.de]) for assistance...  
  
.\gui.lua:234: attempt to index field '?' (a nil value)  
stack traceback:  
 .\gui.lua:234: in function <.><br>```

<br>
<br>
Even though the bug screens, the script seems to work again after closing down the error notice. Would one nevertheless need to have the script tool reloaded in the tools window as these could be bugs resulting from the first 'crash'?</.>

Oh this is really great! I’m eager to see some more development on this thingie! It’d become really powerful!

Cool idea
Hope you get this working better
It runs pretty badly here

There are issues removing notes and if you mousewheel backwards through a pattern it can send it a bit mad too
Also issues between the edit step sizes
Look forward to trying it again though ;)

B

Cie: Great stuff!

Some random Lua and Lua for Renoise tips:

  • You’re already listening to instrument & track name changes. To get notified of the track and instruent list changes (attach to new stuff, detach from old stuff) you can use the renoise.song().instruments_observable and renoise.song().tracks_observable
    Avoid using local functions for notifiers. Local functions are created anonymously “on the fly”, so you can not use its signature to remove them again.

  • Looping through stuff often is easier with pairs in Lua:
    – instead of:
    for i=1,#renoise.song().instruments do
    renoise.song().instruments[i].name_observable:add_notifier(function() end)
    end
    – use
    for index,instrument in pairs(renoise.song().instruments) do
    instrument.name_observable:add_notifier(function() end)
    end

  • using table.create makes tables a bit more OO (and IMHO easier to read/write):
    – instead of
    instrument_names = {}
    table.insert(instrument_names, “something”)
    – you can use
    instrument_names = table.create()
    instrument_names:insert(“something”)

Let us know if you need any help with all the details. This thing is a beast, will use a large part of the API!

Cie already warned you that it’s an alpha version. This is work in progress, so you can help to find issues and make it better.

It seems I can’t start the GUI.

very nice! would like it to be vertical in layout though.

will try and give a bit of feedback when i get home! (=

this one looks nice,will surely have to take this for a test-drive :dribble:

Awesome work. Such concise code! I’m itching to write some code which would sync this with my launchpad.

Great interface as well. You’ve almost/kind of fulfilled the piano-roll concept in the simplest way possible. I’m imagining another menu with the ability to add a set of a notes to a list, and that list becomes a “chord”, which can be assigned to each row much like a single note.

Which is what i did ???
But thanks for stating the obvious

B

timing/groove settings would be very usefull on this one !

damn this one is a cool tool(see what i did there :dribble: )

awesome job,this one works fantastic :yeah:

Very nice Cie!

I get the same viewbuilder error as Jonas and vincentvc when trying to reopen the GUI.
I’m having a similar problem and it seems you have to explicitly remove and null out some views when you close a dialog or else it will stay in memory? Would be nice if Renoise took care of this.

And come on Bungle… no need to be a hardass. Your post can easily be misread and seem like you expected something more. For an early alpha release this is really good stuff.

Wow, thank you very much for testing, feedback, ideas, coding tips, feature requests and your experiences :)
This is really motivating!
I will reply in detail soon…

For the meanwhile this should be fixed now:

thanks epc, this made me think in the right direction hopefully.
Furthermore if you close the gui and start the gui again, all previously done changes should be recalled (tracks, steps, etc. - no real pattern-parsing and loading yet!)
Please check first post for latest version.

Some bugs I’m getting with the latest update(v041a);

setting a pattern length of 1 in Renoise pattern editor and edit step of 4 in your script, same bug as I listed before but now with other numbers.

.'C:\Users\plugexpert\AppData\Roaming\Renoise\V2.6.0\Scripts\Tools\de.cie.StepSequencer.xrnx\main.lua' failed in one of its notifiers.  
The notifier will be disabled to prevent further errors.  
  
Please contact the author (Cie [cie@cie-online.de]) for assistance...  
  
\gui.lua:85: attempt to index field '?' (a nil value)  
stack traceback:  
 .\gui.lua:85: in function 'set_note'  
 .\gui.lua:121: in function <.><br>```

<br>
<br>
When deleting the previously drawn in dots in your script tool:<br>
<br>

```<br>'C:\Users\plugexpert\AppData\Roaming\Renoise\V2.6.0\Scripts\Tools\de.cie.StepSequencer.xrnx\main.lua' failed in one of its notifiers.<br>
The notifier will be disabled to prevent further errors.<br>
<br>
Please contact the author (Cie [cie@cie-online.de]) for assistance...<br>
<br>
.\gui.lua:108: attempt to index field '?' (a nil value)<br>
stack traceback:<br>
  .\gui.lua:108: in function 'delete_noteOffs'<br>
  .\gui.lua:151: in function <.><br>```

</.></.>

On win 7 machine when trying to open the GUI get this: (strangely not on XP)

V0.041a
Attachment 1180 not found.