shimi
v3.1.0
Published
A JS framework for building complex MIDI applications
Downloads
111
Maintainers
Readme
Shimi
Overview
Shimi is a lightweight javascript MIDI library.
It came out of a desire to easily build new and experimental MIDI instruments out of user input devices, though it can be used for much more than just that.
The library provides an easy, modular way to build up music systems, providing classes for metronomes, scales, chords, clips, arpeggios, and more.
It includes its own wrapper around the WebAudio API, for generating sounds from MIDI messages in the browser. It can just as easily send and receive MIDI messages to/from external devices and software.
Example
Here is a simple example, using shimi to play the start of 'Twinkle Twinkle Little Star' every time the user presses the spacebar:
<script src="https://unpkg.com/shimi"></script>
<script>
function run() {
const midiOut = new shimi.WebAudioMidiOut(new AudioContext()).withDefaultChannels();
const keyboard = new shimi.Keyboard(new shimi.EventSubscriber(document));
keyboard.activate();
const metronome = new shimi.Metronome(120);
const clock = new shimi.Clock();
clock.children.push(keyboard, metronome, midiOut);
clock.start();
//Twinkle Twinkle Little Star
const clip = new shimi.Clip(8)
.addNote([0,1], 1, 'C4', 80)
.addNote([2,3], 1, 'G4', 80)
.addNote([4,5], 1, 'A4', 80)
.addNote(6, 2, 'G4', 80);
//Start a new playthrough of the clip each time the spacebar is pressed
keyboard.space.pressed.add(() => {
const clipPlayer = new shimi.ClipPlayer(clip, metronome, midiOut);
clipPlayer.beatCount = clip.duration;
clock.addChild(clipPlayer);
});
}
run();
</script>
Install
$ npm install shimi
or
<script src="https://unpkg.com/shimi"></script>
Documentation
See the full technical documentation here: https://jamescoyle1989.github.io/shimi/modules.html