@kazuprog/mml-player
v1.0.0
Published
MML(Music Macro Language) player for Web Audio API
Readme
mml-player
MML(Music Macro Language) Player based on mohayonao/mml-emitter demo
Installation
downloads:
API
MMLPlayer
constructor(config: object)config.mml: stringconfig.waitForReady: bool- wait for AudioContext to be ready (user gesture required)
config.reverseOctave: bool- reverse
<and>command
- reverse
config.defaultParams: objectvelocity: numbervelocityMax: numberquantize: numberquantizeMax: numberinstNumber: numberpanpotRange: number
Instance methods
setInst(no, inst): void- set custom instrument
no: int- instrument number (@{index})
inst: PeriodicWaveinst: Array- the values of one cycle of the audio waveform
- e.g.
[1,-1](sine wave)
inst: [Array, Array]- the result of a Fourier transform, where you get frequency domain values from time domain value
- e.g.
[[0,1],[0,0]](sine wave)
play(mml = null): voidstop(): void
Event
onNotetype: "note"time: numberplaybackTime: numbertrackNumber: numbernoteNumber: numberduration: numbervelocity: number(0 - 1)quantize: number(0 - 1)slur: Arraytime: numberduration: numbernoteNumber: numberpanpot: number(-1 - 1)
instNumber: numberpanpot: number(-1 - 1)
Example
To play sound, the user must make a gesture (click, tap, or keystroke) on the page first.
let mml = "cde2";
let player = new MMLPlayer();
player.onNote = e => {
console.log("NOTE: " + JSON.stringify(e));
}
document.querySelector("#playbtn").addEventListener('click', e => {
player.play(mml);
});
// one-liner
new MMLPlayer().play("cde2");MML Syntax
NoteEvent
- ([`"]+)?[cdefgab][-+#]?(\d+)?\.*&?
- note on
- ([`"]+)?
- octave change
- `+
- octave up
- e.g.
ceg `c egc
- "+
- octave down
- e.g.
edc "b c
- [cdefgab]
- musical scales
- e.g.
c d e
- [-+#]?
- semitone change
- -
- lower a semitone
- [+#]
- raise a semitone
- e.g.
c c+ d d# e e- d d- c
- (\d+)?
- note length (default: l)
- e.g.
c4 c8 c8 c2
- \.*
- dotted note
- e.g.
c e8. g16 `c2
- &
- slur
- e.g.
"c&`c2
- \[ (([`"]+)?[cdefgab][-+#]?|[<>])+ \](\d+)?\.*
- chord (default: l)
- e.g.
[ <g>ce ]2 [ <gb>d ]2 [ <g>ce ]1
- r(\d+)?\.*
- rest (default: l)
- e.g.
l16 crcc crcc crccr crcc
NoteLength
- l(\d+)?\.*
- length (default: 4)
- e.g.
l8 cc l4 e l2 g
- ^(\d+)?\.*
- tie (default: l)
- e.g
l16 c^^ e^^ g^
- q(\d+)?
- quantize (default: 75)
- e.g.
l16 q50 crcc crcc crcc crcc
NotePitch
- o(\d+)?
- octave (default: 4)
- e.g.
o4 ceg o5 c
- >(\d+)?
- octave up (default: 1)
- e.g.
ceg > c
- <(\d+)?
- octave down (default: 1)
- e.g.
c < gec
- k(\+|-)?\d+
- key change (relavive value)
- e.g.
cde2k+1cde2
Control
- t(\d+)?
- tempo (default: 120)
- e.g.
t140 cdefgab<c
- v(\d+)?
- velocity (default: 100)
- e.g.
v75 c v50 e v25 g
- @\d+
- change instrument
- 0: sine wave
- 1: square wave
- 2: sawtooth wave
- 3: triangle wave
- 4: 25% pulse wave
- 5: 12.5% pulse wave
- e.g.
@0c @1c @2c @3c @4c @5c
- change instrument
- p(\d+)?
- panpot (default: 128)
- 1(left) - 128(center) - 255(right)
- e.g.
p128cp1cp255c
- panpot (default: 128)
- $
- infinite loop
- e.g.
l2 $ [fa>ce] [gb>d] [egb>d] [ea>c]
- /: ... | ... :/(\d+)?
- loop (default: 2)
- commands after | are skipped in the last loop
- e.g.
l2 /: [fa>ce] [gb>d] [egb>d] | [ea>c] :/4 [eg>c]
See Also
- MML Emitter
- mohayonao/mml-emitter / MML(Music Macro Language) Emitter
- MMLEmitter Demo
- MML Syntax
- mohayonao/mml-iterator / MML(Music Macro Language) Iterator
License
MIT
