PicoAudio.js
PicoAudio.jsについて
Web上でMIDI(Standard MIDI File=SMF)を再生するためのJavaScriptライブラリです。
SMF形式のバイナリのパースや、Web Audio API を用いた楽曲の再生ができます。
Web Audio API から提供される数種の音源を組み合わせて、8bitサウンドで演奏を行います。
また、別途音源の準備をする必要がなく、Webと音楽を組み合わせた開発がすぐに始められます!
A JavaScript library for playing MIDI (Standard MIDI File = SMF) on Web.
You can parse SMF Files and play music using Web Audio API.
Play with 8-bit sound by combining several types of sound sources provided by Web Audio API.
There is no need to prepare a sound source, and development that combines the Web and Music can be started immediately!
主な機能
- MIDIファイル(SMF)のパース
- パースしたデータの再生
- 再生時のnoteOn/noteOffイベント受け取り など
利用されているプロダクト
サンプル
導入方法
Browser
<script src="https://unpkg.com/picoaudio/dist/browser/PicoAudio.js"></script>
または、
<script src="https://unpkg.com/picoaudio/dist/browser/PicoAudio.min.js"></script>
※ グローバル変数に PicoAudio
が定義されます
Module
$ npm install picoaudio
はじめ方
初期化
const picoAudio = new PicoAudio();
picoAudio.init();
再生
const file =
const smfData = new Uint8Array(file);
const parsedData = picoAudio.parseSMF(smfData);
picoAudio.setData(parsedData);
picoAudio.play();
※ PicoAudio.play
メソッドは、ユーザのジェスチャーイベントから呼び出す必要がある場合があります (参考)
停止
picoAudio.pause();
API
Main Functions
PicoAudio.init
new PicoAudio({
debug: boolean,
audioContext: AudioContext,
picoAudio: PicoAudio,
}): PicoAudio
※ 細かいパラメータも設定可能 (参考)
PicoAudio.parseSMF
PicoAudio.parseSMF(smfFile: Uint8Array): ParsedSMF
PicoAudio.setData
PicoAudio.setData(parsedSMF: ParsedSMF): void
PicoAudio.play
PicoAudio.play(isLoop: boolean): void
PicoAudio.pause
PicoAudio.pause(): void
PicoAudio.initStatus
PicoAudio.initStatus(): void
PicoAudio.setStartTime
PicoAudio.setStartTime(offseTime: number) :void
ステータスのSetter/Getter
PicoAudio.getMasterVolume(): number
PicoAudio.setMasterVolume(volume: number): void
PicoAudio.isReverb(): boolean
PicoAudio.setReverb(enable: boolean): void
PicoAudio.getReverbVolume(): number
PicoAudio.setReverbVolume(volume: number): void
PicoAudio.isChorus(): boolean
PicoAudio.setChorus(enable: boolean): void
PicoAudio.getChorusVolume(): number
PicoAudio.setChorusVolume(volume: number): void
PicoAudio.initChannels(): void
PicoAudio.getChannels(): Array
PicoAudio.setChannels(channels: Array): void
PicoAudio.isLoop(): boolean
PicoAudio.setLoop(enable: boolean): void
PicoAudio.isWebMIDI(): boolean
PicoAudio.setWebMIDI(enable: boolean): void
PicoAudio.isCC111(): boolean
PicoAudio.setCC111(enable: boolean): void
Event周辺
PicoAudio.addEventListener
PicoAudio.addEventListener(
type: <'play' | 'pause' | 'noteOn' | 'noteOff' | 'songEnd'>,
listener: Function
): void
PicoAudio.addEventListener (noteOn)
PicoAudio.addEventListener(
type: 'noteOn',
listener: (event: NoteEvent) => void
): void
type NoteEvent = {
channel: number,
instrument: number,
start: number,
stop: number,
startTime: number,
stopTime: number,
velocity: number,
pitch: number,
pan: CCEvent[],
pitchBend: CCEvent[],
expression: CCEvent[],
modulation: CCEvent[],
chorus: CCEvent[],
reberb: CCEvent[],
}
type CCEvent = {
timing: number,
time: number,
value: number
}
PicoAudio.addEventListener (noteOff)
PicoAudio.addEventListener(
type: 'noteOff',
listener: (event: NoteEvent) => void
): void
removeEventListener
PicoAudio.removeEventListener(
type: <'play' | 'pause' | 'noteOn' | 'noteOff' | 'songEnd'>,
listener: Function
): void
removeAllEventListener
PicoAudio.removeAllEventListener(
type: <'play' | 'pause' | 'noteOn' | 'noteOff' | 'songEnd'>
): void
SMFパース周辺
parsed SMF
変換関数
PicoAudio.getTime
PicoAudio.getTime(tick: number): number
PicoAudio.getTiming
PicoAudio.getTiming(time: number): number
License
Code released under the MIT License