(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.MMLEmitter=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o]/g,function(str){return str==="<"?">":"<"})}},{}],5:[function(require,module,exports){"use strict";module.exports=function(str){if(typeof str!=="string"){throw new TypeError("expected a string")}return str.replace(/\r\n|\r/g,"\n")};module.exports.strip=function(str){if(typeof str!=="string"){throw new TypeError("expected a string")}return str.split("\r").join("")}},{}],6:[function(require,module,exports){function EventEmitter(){this._events=this._events||{};this._maxListeners=this._maxListeners||undefined}module.exports=EventEmitter;EventEmitter.EventEmitter=EventEmitter;EventEmitter.prototype._events=undefined;EventEmitter.prototype._maxListeners=undefined;EventEmitter.defaultMaxListeners=10;EventEmitter.prototype.setMaxListeners=function(n){if(!isNumber(n)||n<0||isNaN(n))throw TypeError("n must be a positive number");this._maxListeners=n;return this};EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(!this._events)this._events={};if(type==="error"){if(!this._events.error||isObject(this._events.error)&&!this._events.error.length){er=arguments[1];if(er instanceof Error){throw er}throw TypeError('Uncaught, unspecified "error" event.')}}handler=this._events[type];if(isUndefined(handler))return false;if(isFunction(handler)){switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:args=Array.prototype.slice.call(arguments,1);handler.apply(this,args)}}else if(isObject(handler)){args=Array.prototype.slice.call(arguments,1);listeners=handler.slice();len=listeners.length;for(i=0;i0&&this._events[type].length>m){this._events[type].warned=true;console.error("(node) warning: possible EventEmitter memory "+"leak detected. %d listeners added. "+"Use emitter.setMaxListeners() to increase limit.",this._events[type].length);if(typeof console.trace==="function"){console.trace()}}}return this};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){if(!isFunction(listener))throw TypeError("listener must be a function");var fired=false;function g(){this.removeListener(type,g);if(!fired){fired=true;listener.apply(this,arguments)}}g.listener=listener;this.on(type,g);return this};EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events||!this._events[type])return this;list=this._events[type];length=list.length;position=-1;if(list===listener||isFunction(list.listener)&&list.listener===listener){delete this._events[type];if(this._events.removeListener)this.emit("removeListener",type,listener)}else if(isObject(list)){for(i=length;i-- >0;){if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}}if(position<0)return this;if(list.length===1){list.length=0;delete this._events[type]}else{list.splice(position,1)}if(this._events.removeListener)this.emit("removeListener",type,listener)}return this};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener){if(arguments.length===0)this._events={};else if(this._events[type])delete this._events[type];return this}if(arguments.length===0){for(key in this._events){if(key==="removeListener")continue;this.removeAllListeners(key)}this.removeAllListeners("removeListener");this._events={};return this}listeners=this._events[type];if(isFunction(listeners)){this.removeListener(type,listeners)}else if(listeners){while(listeners.length)this.removeListener(type,listeners[listeners.length-1])}delete this._events[type];return this};EventEmitter.prototype.listeners=function(type){var ret;if(!this._events||!this._events[type])ret=[];else if(isFunction(this._events[type]))ret=[this._events[type]];else ret=this._events[type].slice();return ret};EventEmitter.prototype.listenerCount=function(type){if(this._events){var evlistener=this._events[type];if(isFunction(evlistener))return 1;else if(evlistener)return evlistener.length}return 0};EventEmitter.listenerCount=function(emitter,type){return emitter.listenerCount(type)};function isFunction(arg){return typeof arg==="function"}function isNumber(arg){return typeof arg==="number"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isUndefined(arg){return arg===void 0}},{}],7:[function(require,module,exports){"use strict";var isObject=require("is-extendable");module.exports=function extend(o){if(!isObject(o)){o={}}var len=arguments.length;for(var i=1;i":return this.readOctaveShift(+1);case"<":return this.readOctaveShift(-1);case"l":return this.readNoteLength();case"q":return this.readNoteQuantize();case"v":return this.readNoteVelocity();case"t":return this.readTempo();case"$":return this.readInfiniteLoop();case"/":return this.readLoop();default:}this.scanner.throwUnexpectedToken()}},{key:"readNote",value:function readNote(){return{type:_Syntax2["default"].Note,noteNumbers:[this._readNoteNumber(0)],noteLength:this._readLength()}}},{key:"readChord",value:function readChord(){var _this2=this;this.scanner.expect("[");var noteList=[];var offset=0;this._readUntil("]",function(){switch(_this2.scanner.peek()){case"c":case"d":case"e":case"f":case"g":case"a":case"b":noteList.push(_this2._readNoteNumber(offset));break;case">":_this2.scanner.next();offset+=12;break;case"<":_this2.scanner.next();offset-=12;break;default:_this2.scanner.throwUnexpectedToken()}});this.scanner.expect("]");return{type:_Syntax2["default"].Note,noteNumbers:noteList,noteLength:this._readLength()}}},{key:"readRest",value:function readRest(){this.scanner.expect("r");return{type:_Syntax2["default"].Rest,noteLength:this._readLength()}}},{key:"readOctave",value:function readOctave(){this.scanner.expect("o");return{type:_Syntax2["default"].Octave,value:this._readArgument(/\d+/)}}},{key:"readOctaveShift",value:function readOctaveShift(direction){this.scanner.expect(/<|>/);return{type:_Syntax2["default"].OctaveShift,direction:direction|0,value:this._readArgument(/\d+/)}}},{key:"readNoteLength",value:function readNoteLength(){this.scanner.expect("l");return{type:_Syntax2["default"].NoteLength,noteLength:this._readLength()}}},{key:"readNoteQuantize",value:function readNoteQuantize(){this.scanner.expect("q");return{type:_Syntax2["default"].NoteQuantize,value:this._readArgument(/\d+/)}}},{key:"readNoteVelocity",value:function readNoteVelocity(){this.scanner.expect("v");return{type:_Syntax2["default"].NoteVelocity,value:this._readArgument(/\d+/)}}},{key:"readTempo",value:function readTempo(){this.scanner.expect("t");return{type:_Syntax2["default"].Tempo,value:this._readArgument(/\d+(\.\d+)?/)}}},{key:"readInfiniteLoop",value:function readInfiniteLoop(){this.scanner.expect("$");return{type:_Syntax2["default"].InfiniteLoop}}},{key:"readLoop",value:function readLoop(){var _this3=this;this.scanner.expect("/");this.scanner.expect(":");var result=[];var loopBegin={type:_Syntax2["default"].LoopBegin};var loopEnd={type:_Syntax2["default"].LoopEnd};result=result.concat(loopBegin);this._readUntil(/[|:]/,function(){result=result.concat(_this3.advance())});result=result.concat(this._readLoopExit());this.scanner.expect(":");this.scanner.expect("/");loopBegin.value=this._readArgument(/\d+/)||null;result=result.concat(loopEnd);return result}},{key:"_readUntil",value:function _readUntil(matcher,callback){while(this.scanner.hasNext()){this.scanner.forward();if(!this.scanner.hasNext()||this.scanner.match(matcher)){break}callback()}}},{key:"_readArgument",value:function _readArgument(matcher){var num=this.scanner.scan(matcher);return num!==null?+num:null}},{key:"_readNoteNumber",value:function _readNoteNumber(offset){var noteIndex=NOTE_INDEXES[this.scanner.next()];return noteIndex+this._readAccidental()+offset}},{key:"_readAccidental",value:function _readAccidental(){if(this.scanner.match("+")){return+1*this.scanner.scan(/\++/).length}if(this.scanner.match("-")){return-1*this.scanner.scan(/\-+/).length}return 0}},{key:"_readDot",value:function _readDot(){var len=(this.scanner.scan(/\.+/)||"").length;var result=new Array(len);for(var i=0;i