• Stars
    star
    120
  • Rank 295,983 (Top 6 %)
  • Language
    JavaScript
  • Created over 11 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

a javascript MIDI/Audio sequencer for your browser

heartbeat

important update 19/12/2020

Heartbeat will no longer be maintained here it its own repository because heartbeat is now part of WebDAW modules. You can still use heartbeat like before but you have to import it to your project from webdaw-modules, see below.

introduction

Heartbeat is a MIDI/Audio sequencer for your browser. Heartbeat has no GUI. It is intended to be used as an engine behind your application. Heartbeat is set up very flexible so you can make any kind of application on top of it; a game, an online DAW, artistic sites, music science experiments and so on. Read more.

So far heartbeat has been used in 2 MusicFirst projects:

example

Install heartbeat: yarn add webdaw-modules

or: npm i webdaw-modules

import { heartbeat, Heartbeat } from 'webdaw-modules';

const init = async () => {
  await heartbeat.ready();

  const events: Heartbeat.MIDIEvent[] = heartbeat.util.getRandomNotes({
      minNoteNumber: 60,
      maxNoteNumber: 100,
      minVelocity: 30,
      maxVelocity: 80,
      numNotes: 60
  });
      
  const part: Heartbeat.Part = heartbeat.createPart();
  part.addEvents(events);

  const song: Heartbeat.Song = heartbeat.createSong({
    parts: part,
    useMetronome: true
  });

  document.addEventListener('click', () => {   
    if (song.isPlaying) {
      song.pause();
    } else {
      song.play();
    }
  });
}

init();

So heartbeat (all lowercase) is the module and Heartbeat (with capital) is the namespace where all heartbeat typings live.

Obviously you don't have to use typescript and you can use in your plain javascript projects as well.

Another example if you don't want to use async await and prefer to keep using the name sequencer instead of heartbeat:

import { heartbeat as sequencer } from 'heartbeat-sequencer';

sequencer
.ready()
.then(init);

const init = () => {
  const events = sequencer.util.getRandomNotes({
    minNoteNumber: 60,
    maxNoteNumber: 100,
    minVelocity: 30,
    maxVelocity: 80,
    numNotes: 60
  });
      
  const part = sequencer.createPart();
  part.addEvents(events);

  const song = sequencer.createSong({
    parts: part,
    useMetronome: true
  });

  document.addEventListener('click', () => {   
    if (song.isPlaying) {
      song.pause();
    } else {
      song.play();
    }
  });
}

key features

MIDI
  • create MIDI file from scratch
  • import existing MIDI files
  • save MIDI data to a file (SMF 1.0)
  • record MIDI (only in browsers that support the WebMIDI API or have the Jazz plugin installed)
  • play back MIDI via external hardware, virtual MIDI ports or included softsynths or sample player
  • quantize and fixed length functions
  • keep a history of edit actions very easily
  • set the PPQ value of a file or song
  • support for tempo and time signature changes
  • multiple songs can be loaded and played back at the same time
  • MIDI data can be shared or moved across songs, tracks and parts very easily
  • import MusicXML files (in progress)
Audio
  • volume and panning controller per track
  • volume controller per song and one master volume output with compression
  • channel effects per track: reverb, panning, autopan and more to come
  • record audio directly in your browser
  • save audio recordings as wav, mp3 or base64 file
  • transpose audio (experimental)
Instruments
  • support for multiple velocity layers
  • support for control change events: sustain pedal, volume and panning
  • sustained instruments (like organ, stings, pads)
  • keyscaling for release and panning
  • configurable release duration and envelope type
  • support for .sfz format (up to a certain level)
  • instrument samples can be transposed at runtime (experimental)
  • 12 sample based instruments included for the sample player (570MB of samples)
  • 1 simple sinewave synthesizer included as fallback instrument

More documentation can be found here.

More Repositories

1

midibridge-js

A Javascript API for interacting with MIDI devices
JavaScript
71
star
2

MIDIBridge

An implementation in Java and Javascript of the W3C proposal for MIDI support in browsers by Jussi Kalliokoski
Java
69
star
3

webdaw-modules

A set of modules that you can use to make a web-based DAW
JavaScript
23
star
4

MIDIPlugin

A NPAPI browser plugin that allows Javascript to interact with the MIDI devices connected to your computer
JavaScript
22
star
5

qambi

MIDI sequencer for your browser
JavaScript
17
star
6

push-notification-server

Simple express server that can be used as provider of push notifications for both GCM and APNs
JavaScript
17
star
7

JazzMIDIBridge

Wrapper around the Jazz plugin that mimics the W3C MIDI proposal of Jussi Kalliokoski
JavaScript
11
star
8

flashmidi

Sample applications in AS3 that receive and consume midi events from your computers midi system either via a Java Applet or via a Java command line program.
ActionScript
8
star
9

javamidi

Java classes that can send midi events to Flash and Javascript
Java
8
star
10

javascriptmidi

A Javascript API for interacting with MIDI devices (proof of concept)
JavaScript
6
star
11

colladatester

Load Colladas with or without textures into Threejs by dragging or with the file menu
JavaScript
3
star
12

vega-multi-view

A publish-subscribe mechanism for signals: this allows Vega views that live in different HTML elements to communicate with each other and to update each other's datasets.
JavaScript
3
star
13

vega-specs

Create Vega3 specs with javascript and export them to JSON, BSON and YAML
JavaScript
3
star
14

optimize-camera-position

Optimize camera postion to make the scene fill the complete browser viewport
JavaScript
2
star
15

bimserverapi

javascript API for bimserver
JavaScript
2
star
16

heartbeat.ts

rebuilding heartbeat in typescript, add support for MIDI 2.0 and MPE
TypeScript
2
star
17

vega-as-leaflet-layer

Render a Vega specification as layer on a Leaflet map, based on https://github.com/nyurik/leaflet-vega.
JavaScript
2
star
18

WebMIDIAPI_es6

es6 version of WebMIDIAPIShime
JavaScript
2
star
19

fetch-helpers

A set of helper functions for fetch
JavaScript
1
star
20

osmd-webdaw

Connecting OSMD score with MIDI playback
TypeScript
1
star
21

test

test
1
star
22

twitter-react

Twitter feed app with React
JavaScript
1
star
23

drumpad

Simple drummachine app using heartbeat and react/redux
TypeScript
1
star
24

ILMoBT

Webpart of In Loving Memory of Being Touched by Jen Kuttler
TypeScript
1
star
25

osmd-heartbeat

connecting OSMD with heartbeat
TypeScript
1
star