♬ MidiWriterJS
+ MidiWriterJS is a JavaScript library providing an API for generating expressive multi-track MIDI files. MidiWriterJS is a JavaScript library providing an API for generating expressive multi-track MIDI files. Note that the The The The The Here's an example of how everyone's favorite song "Hot Cross Buns" could be written. Note use of the mapping function passed as the second argument of Here's an example of how everyone's favorite song "Hot Cross Buns" could be written. Note use of the mapping function passed as the second argument of MidiWriterJS can export MIDI from VexFlow voices, though this feature is still experimental. Current usage is to use MidiWriterJS can export MIDI from VexFlow voices, though this feature is still experimental. Current usage is to use Here's an example of how everyone's favorite song &quo
var vexWriter = new MidiWriter.VexFlow();
var track = vexWriter.trackFromVoice(voice);
var writer = new MidiWriter.Writer([track]);
-console.log(writer.dataUri());♬ MidiWriterJS
+
-master
branch is in active development so if you're looking for a tried and true stable version please use the latest release.Install
npm install midi-writer-js
Getting Started
var MidiWriter = require('midi-writer-js');
+
Install
+
+npm install midi-writer-js
+
Getting Started
+
+var MidiWriter = require('midi-writer-js');
// Start with a new track
var track = new MidiWriter.Track();
@@ -67,7 +72,11 @@
Install
npm install midi-w
// Generate a data URI
var write = new MidiWriter.Writer(track);
-console.log(write.dataUri());
Documentation
MidiWriter.Track()
+console.log(write.dataUri());
+
Documentation
+
+MidiWriter.Track()
addEvent({event}, mapFunction)
setTempo(tempo)
addText(text)
Install
+npm install midi-w
addLyric(text)
setTimeSignature(numerator, denominator)
MidiWriter.NoteEvent({options})
NoteEvent
supports these options:
+MidiWriter.NoteEvent({options})
NoteEvent
supports these options:
-
-
-
-
-
-
-
-
- Name
- Type
- Description
-
-
- pitch
- string or array
- Each pitch can be a string or valid MIDI note code. Format for string is
- C#4
. Pro tip: You can use the output from tonal functions to build scales, chords, intervals, etc. in this parameter.
-
- duration
- string or array
-
- How long the note should sound.
-
-
-
- If an array of durations is passed then the sum of the durations will be used.
- 1
: whole2
: halfd2
: dotted halfdd2
: double dotted half4
: quarter4t
: quarter tripletd4
: dotted quarterdd4
: double dotted quarter8
: eighth8t
: eighth tripletd8
: dotted eighthdd8
: double dotted eighth16
: sixteenth16t
: sixteenth triplet32
: thirty-second64
: sixty-fourthTn
: where n is an explicit number of ticks (T128 = 1 beat)
-
- wait
- string or array
- How long to wait before sounding note (rest). Takes same values as duration.
-
-
- sequential
- boolean
- If true then array of pitches will be played sequentially as opposed to simulatanously. Default:
- false
-
- velocity
- number
- How loud the note should sound, values 1-100. Default:
- 50
-
- repeat
- number
- How many times this event should be repeated. Default:
- 1
-
- channel
- number
- MIDI channel to use. Default:
- 1
-
- grace
- string or array
- Grace note to be applied to note event. Takes same value format as
- pitch
-
-
+
+ startTick
- number
- Specific tick where this event should be played. If this parameter is supplied then
- wait
is disregarded if also supplied.
+
+
+
+ Name
+ Type
+ Description
+
+
+ pitch
+ string or array
+ Each pitch can be a string or valid MIDI note code. Format for string is
+ C#4
. Pro tip: You can use the output from tonal functions to build scales, chords, intervals, etc. in this parameter.
+
+ duration
+ string or array
+
+ How long the note should sound.
+
+
+
+ If an array of durations is passed then the sum of the durations will be used.
+ 1
: whole2
: halfd2
: dotted halfdd2
: double dotted half4
: quarter4t
: quarter tripletd4
: dotted quarterdd4
: double dotted quarter8
: eighth8t
: eighth tripletd8
: dotted eighthdd8
: double dotted eighth16
: sixteenth16t
: sixteenth triplet32
: thirty-second64
: sixty-fourthTn
: where n is an explicit number of ticks (T128 = 1 beat)
+
+ wait
+ string or array
+ How long to wait before sounding note (rest). Takes same values as duration.
+
+
+ sequential
+ boolean
+ If true then array of pitches will be played sequentially as opposed to simulatanously. Default:
+ false
+
+ velocity
+ number
+ How loud the note should sound, values 1-100. Default:
+ 50
+
+ repeat
+ number
+ How many times this event should be repeated. Default:
+ 1
+
+ channel
+ number
+ MIDI channel to use. Default:
+ 1
+
+ grace
+ string or array
+ Grace note to be applied to note event. Takes same value format as
+ pitch
+
+
startTick
+ number
+ Specific tick where this event should be played. If this parameter is supplied then
+ wait
is disregarded if also supplied.MidiWriter.Writer(tracks)
Writer
class provides a few ways to output the file:
+MidiWriter.Writer(tracks)
Writer
class provides a few ways to output the file:
-buildFile()
Uint8Arraybase64()
stringdataUri()
stringstdout()
file stream (cli)Hot Cross Buns
addEvent()
. This can be used to apply specific properties to all events. With some
+Hot Cross Buns
+addEvent()
. This can be used to apply specific properties to all events. With some
street smarts you could also use it for programmatic crescendos and other property 'animation'.var MidiWriter = require('midi-writer-js');
var track = new MidiWriter.Track();
track.addEvent([
- new MidiWriter.NoteEvent({pitch: ['E4','D4'], duration: '4'}),
- new MidiWriter.NoteEvent({pitch: ['C4'], duration: '2'}),
- new MidiWriter.NoteEvent({pitch: ['E4','D4'], duration: '4'}),
- new MidiWriter.NoteEvent({pitch: ['C4'], duration: '2'}),
- new MidiWriter.NoteEvent({pitch: ['C4', 'C4', 'C4', 'C4', 'D4', 'D4', 'D4', 'D4'], duration: '8'}),
- new MidiWriter.NoteEvent({pitch: ['E4','D4'], duration: '4'}),
- new MidiWriter.NoteEvent({pitch: ['C4'], duration: '2'})
- ], function(event, index) {
+ new MidiWriter.NoteEvent({pitch: ['E4','D4'], duration: '4'}),
+ new MidiWriter.NoteEvent({pitch: ['C4'], duration: '2'}),
+ new MidiWriter.NoteEvent({pitch: ['E4','D4'], duration: '4'}),
+ new MidiWriter.NoteEvent({pitch: ['C4'], duration: '2'}),
+ new MidiWriter.NoteEvent({pitch: ['C4', 'C4', 'C4', 'C4', 'D4', 'D4', 'D4', 'D4'], duration: '8'}),
+ new MidiWriter.NoteEvent({pitch: ['E4','D4'], duration: '4'}),
+ new MidiWriter.NoteEvent({pitch: ['C4'], duration: '2'})
+ ], function(event, index) {
return {sequential: true};
}
);
var write = new MidiWriter.Writer(track);
-console.log(write.dataUri());
VexFlow Integration
MidiWriter.VexFlow.trackFromVoice(voice)
to create a MidiWriterJS Track
object:VexFlow Integration
+MidiWriter.VexFlow.trackFromVoice(voice)
to create a MidiWriterJS Track
object:
// ...VexFlow code defining notes
var voice = create_4_4_voice().addTickables(notes);
@@ -195,7 +208,8 @@
Hot Cross Buns