Stepp 2.0 - A Music Sequencing Plugin

Stepp 2.0 - A Music Sequencing Plugin
Asset Store: __Unity Asset Store - The Best Assets for Game Making
Online Documentation: __[u]http://www.pelican7.com/stepp-documentation__[/u]

Stepp is a music sequencing plugin that provides you with a foundation for building your own audio step sequencers. Stepp is the audio sequencing technology behind the recent mobile game, Lily.

Full Description
Stepp offers sample accurate playback of your audio clips through a programmable sequence and a system for managing your audio files called sound banks. The result is a plugin that allows you to build any step sequencer interface you wish, and use Stepp to handle the underlying audio sequencing.

Stepp is the audio sequencing technology behind the mobile game, Lily, and this is perhaps the clearest example of the level of freedom you have with Stepp.

Stepp comes with two demo scenes showcasing music sequencers built with Stepp, including audio samples, which can be seen in the video. Additionally, all source code is included so youā€™re free to inspect how any feature is implemented. View the online documentation here.

Features

  • Sample accurate playback of audio clips.

  • Step sequence management.

  • Sound bank management, including background loading of audio clips.

  • Configurable sequencer settings, including BPM and sequence length.

  • Supports Unity 5 audio mixing, effects, and snapshots.

  • Support for multiple synchronised step sequencers, shown in the Multi-Sequencer demo.

  • Two demo musical sequencers, including audio files.

  • Clear online documentation.

  • All source code included.

Existing Customers
Anyone who bought Stepp 1.0 has a free upgrade to version 2.0. Thanks for all the support, kind messages, and helpful feedback!

1 Like

This update looks great!
I added this to my wishlist recently and the reason I didnā€™t buy immediately was because the last update was a very long time ago (I didnā€™t want to risk it not working). Although itā€™s nice to see it being updated, I noticed that the price also changed quite drastically.

EDIT: Any chance of a comeback promo sale? :wink:

Thanks!

Aww, sorry buddy! The asset has indeed changed quite a bit in this version. The sales are at Unityā€™s discretion Iā€™m afraid so Iā€™d say keep an eye out for whether Stepp gets chosen for one!

Thanks for the interest :slight_smile:

Hello- great looking asset- Is it possible for save the sequences that are created by a user at runtime?

For example- the user created a musical sequence at runtime using Stepp- can that sequence be saved and played back later by Stepp?

Thank you.

Interesting asset, does the multi-sequencer also works with different BPM and Length?

Thanks @imaginationrabbit ! Itā€™s not built-in Iā€™m afraid. To do that youā€™d have to save the sequence yourself and then call AddNoteAtStep on Start.

Thanks! The multi-sequencer example has four sequencers that share a metronome, so you can change the metronomeā€™s BPM and they will all follow. Each sequencer has a different ā€œBeats Per Stepā€ parameter, which controls how many beats equate to one ā€˜stepā€™ in the sequencer - this is how the sequencers advance at different tempo denominations (quarter-note, eighth-note etc.). And yes, each sequencer has its own sequence and thus length, so they can all be different lengths.

Thank you for the reply- Is creating a save/load system for the sequencer something you think an intermediate C# coder can do without too much trouble? Is there some code reference you could point me to that shows the data structure of a sequence if its not too much trouble- or if you think its easily doable Iā€™ll just purchase and check it out- thanks-

No worries.

Hmm, possibly! This link shows how to add notes to the sequencer - https://www.pelican7.com/stepp-documentation#sequencing - which as you can see requires a noteId (enum) and a step (integer) like so:

stepSequencer.AddNoteAtStep(NoteId.C3, 0);
stepSequencer.AddNoteAtStep(NoteId.Eb3, 1);
stepSequencer.AddNoteAtStep(NoteId.F3, 2);

Therefore, you need to persist a collection of enum/integer pairs, which can then be applied to the sequencer when you want to load the sequence. In Lily, I write them out manually (along with some other sequencer settings) to a JSON file. For example, you could do something like (just sketching, not tested!):

// A struct for NoteId/integer pairs.
[System.Serializable]
public struct Note
{
    public NoteId noteId;
    public int step;
}

// A saved sequence - a collection of Notes.
[System.Serializable]
public class SavedSequence
{
    public Note[] notes;

    public SavedSequence(Note[] notes)
    {
        this.notes = notes;
    }
}

...

// Create a sequence.
var savedSequence = new SavedSequence(new Note[]
{
    new Note() { noteId = NoteId.C3, step = 0 },
    new Note() { noteId = NoteId.D3, step = 1 },
    new Note() { noteId = NoteId.E3, step = 2 }
});

// Use JsonUtility to convert it to a JSON string for writing to a file.
string sequenceJSON = JsonUtility.ToJson(yourSavedSequence);

...

// To apply the sequence, call AddNoteForStep with each saved note.
public void LoadSequence(SavedSequence savedSequence)
{
    foreach (var note in savedSequence.notes)
    {     
        var noteId = note.noteId;
        var step = note.step;

        stepSequencer.AddNoteAtStep(noteId, step);
    }
}

Hello Pelican, can you help me with someting?

How can I keep sequencers in sync after I play and stop them at different times? Them all have the same metronome.

I didnā€™t want to have them running without notes to ā€œsilenceā€ them.

Thank you!

Hi,

Love the plugin. I was wondering if there was a way to un-toggle the selected grid?

Thanks!