Skip to content

KazuProg/mml-player

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mml-player

MML(Music Macro Language) Player based on mohayonao/mml-emitter demo

Installation

downloads:

API

MMLPlayer

  • constructor(config: object)
    • config.mml: string
    • config.waitForReady: bool
      • wait for AudioContext to be ready (user gesture required)
    • config.reverseOctave: bool
      • reverse < and > command
    • config.defaultParams: object
      • velocity: number
      • velocityMax: number
      • quantize: number
      • quantizeMax: number
      • instNumber: number
      • panpotRange: number

Instance methods

  • setInst(no, inst): void

    • set custom instrument
    • no: int
      • instrument number (@{index})
    • inst: PeriodicWave
    • inst: 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): void

  • stop(): void

Event

  • onNote
    • type: "note"
    • time: number
    • playbackTime: number
    • trackNumber: number
    • noteNumber: number
    • duration: number
    • velocity: number(0 - 1)
    • quantize: number(0 - 1)
    • slur: Array
      • time: number
      • duration: number
      • noteNumber: number
      • panpot: number(-1 - 1)
    • instNumber: number
    • panpot: 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
  • p(\d+)?
    • panpot (default: 128)
      • 1(left) - 128(center) - 255(right)
    • e.g. p128cp1cp255c
  • $
    • 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

License

MIT

Releases

No releases published

Packages

No packages published