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.
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.
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 @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-
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);
}
}