diff --git a/README.md b/README.md index d5bf329..a43c6ad 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,40 @@ # xm.js +[![Build Status](https://travis-ci.org/a1k0n/jsxm.svg?branch=master)](https://travis-ci.org/a1k0n/jsxm) + FastTracker 2 .XM player, written for fun. [Demo](http://www.a1k0n.net/code/jsxm/) -By default it plays "my dirty old kamel" by Alexander Bulér aka -[Zalza](http://zalza.bandcamp.com/). I love this tune, and wrote this code just -to play it. It can also load some other tunes hosted on my website with a file -picker, and it should play just about any .XM file now if checked out and run -locally. +There is an XM player and a visualizer which are separate components. The +player API looks like this: -It is fairly feature-complete, but is missing a bunch of effects. + - `XMPlayer.initAudio` -> starts up audio context; it's available as + `XMPlayer.audioctx` + - `XMPlayer.loadXM(ArrayBuffer)` -> returns `true` if loaded, otherwise + barfs randomly + - `XMPlayer.playXM()` -> starts playing + - `XMPlayer.pauseXM()` -> obvious + - `XMPlayer.stopXM()` -> obvious; call this before loading a new one + +Loading trackview.js is optional; without it, the player won't do any +visualizations. Or, you can override the following to get callbacks: + + - `XMView.pushEvent(e)` -> push an audio event onto the queue. Called + once per tick (about 50Hz, controlled by song). `e` contains fields: + - `t` - audio timestamp + - `vu` - Float32Array of RMS power (volume) for each channel + - `scopes` - [Float32Array] of oscilloscope data, one array per + channel; `XMView.scope_width` contains # of samples to produce here + - `songpos` - position in the song (# patterns played) + - `pat` - pattern number currently playing + - `row` - row within pattern + - `XMView.pause()` - pause visualization + - `XMView.stop()` - stop/reset visualization + +The code which defines what the buttons do and downloads songs and so +forth is in `shell.js`. + +The player is fairly feature-complete, but is missing a bunch of effects. MIT license.