shimi
TypeScript icon, indicating that this package has built-in type declarations

3.1.0 • Public • Published

Shimi

logo

GitHub npm bundle size GitHub package.json version GitHub last commit npm Snyk Vulnerabilities for GitHub Repo CircleCI Coverage Status

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

Package Sidebar

Install

npm i shimi

Weekly Downloads

12

Version

3.1.0

License

MIT

Unpacked Size

391 kB

Total Files

54

Last publish

Collaborators

  • jamescoyle1989