PicoAudio.js
PicoAudio.jsについて
Web上でMIDI(Standard MIDI File=SMF)を再生するためのJavaScriptライブラリです。
SMF形式のバイナリのパースや、Web Audio API を用いた楽曲の再生ができます。
Web Audio API から提供される数種の音源を組み合わせて、8bitサウンドで演奏を行います。
また、別途音源の準備をする必要がなく、WebとSMFを組み合わせた開発がすぐに始められます!
主な機能
- MIDIファイル(SMF)のパース
- パースしたデータの再生
- 再生時のnoteOn/noteOffイベント発火 など
利用されているプロダクト
- Picotune by @cagpie
- Tonyu System 2 by @hoge1e3
導入方法
準備中
はじめ方
初期化
const picoAudio = ;picoAudio;
再生
// Standard MIDI Fileの準備const file = /* FileReaderやFetchなどで取得 */const smfData = file; // SMF形式のバイナリのパースを行うconst parsedData = picoAudio; // パースしたデータをセットpicoAudio; // 再生picoAudio;
※ PicoAudio.play
メソッドは、ユーザのジェスチャーイベントから呼び出す必要がある場合があります (参考)
停止
// 一時停止picoAudio;
API
Main Functions
PicoAudio.init
// PicoAudioインスタンスの生成new PicoAudio: PicoAudio
※ 細かいパラメータも設定可能 (参考)
PicoAudio.parseSMF
// SMFファイルをパースし、PicoAudioで再生できる形式にする// ピアノロールの描画を行いたい場合などに、ParsedSMFが利用できるPicoAudio.parseSMFsmfFile: Uint8Array: ParsedSMF
PicoAudio.setData
// パースされたデータをセットするPicoAudio.setDataparsedSMF: ParsedSMF: void
PicoAudio.play
// セットされているデータで再生するPicoAudio.playisLoop: boolean: void
PicoAudio.pause
// 楽曲の一時停止PicoAudio.pause: void
PicoAudio.initStatus
// 再生状態の初期化PicoAudio.initStatus: void
PicoAudio.setStartTime
// 再生開始位置の設定PicoAudio.setStartTimeoffseTime: number :void
ステータスのSetter/Getter
// 全体音量の設定PicoAudio.getMasterVolume: numberPicoAudio.setMasterVolumevolume: number: void // リバーブの設定PicoAudio.isReverb: booleanPicoAudio.setReverbenable: boolean: voidPicoAudio.getReverbVolume: numberPicoAudio.setReverbVolumevolume: number: void // コーラスの設定PicoAudio.isChorus: booleanPicoAudio.setChorusenable: boolean: voidPicoAudio.getChorusVolume: numberPicoAudio.setChorusVolumevolume: number: void // チャンネルの音色情報や音量の設定PicoAudio.initChannels: voidPicoAudio.getChannels: ArrayPicoAudio.setChannelschannels: Array: void // ループの設定PicoAudio.isLoop: booleanPicoAudio.setLoopenable: boolean: void // Web MIDI APIの設定PicoAudio.isWebMIDI: booleanPicoAudio.setWebMIDIenable: boolean: void // Control Change 111 のループの設定PicoAudio.isCC111: booleanPicoAudio.setCC111enable: boolean: void
Event周辺
PicoAudio.addEventListener
// イベントリスナを登録PicoAudio.addEventListener( type: <'play' | 'pause' | 'noteOn' | 'noteOff' | 'songEnd'>, listener: Function): void
PicoAudio.addEventListener (noteOn)
// 音の開始イベントのリスナ登録ができる// 発音される音のタイミングや高さ、強さなどが取得できるPicoAudio.addEventListener type: 'noteOn', listener:void: void
PicoAudio.addEventListener (noteOff)
// 音の終了イベントのリスナ登録ができるPicoAudio.addEventListener type: 'noteOff', listener:void: void
removeEventListener
// 指定のイベントリスナを解除PicoAudio.removeEventListener type: 'play' | 'pause' | 'noteOn' | 'noteOff' | 'songEnd', listener: Function: void
removeAllEventListener
// 指定typeのイベントリスナをすべて解除PicoAudio.removeAllEventListener type: 'play' | 'pause' | 'noteOn' | 'noteOff' | 'songEnd': void
SMFパース周辺
parsed SMF
// 準備中
変換関数
PicoAudio.getTime
// tick から 時間に変換 (テンポも考慮される)PicoAudio.getTimetick: number: number
PicoAudio.getTiming
// 時間からtickに変換PicoAudio.getTimingtime: number: number
License
Code released under the MIT License