No description
  • JavaScript 96.6%
  • HTML 3.4%
Find a file
2016-05-31 22:15:46 -07:00
test Add tests for E4x, E41 and E42 2015-11-21 20:19:30 +01:00
.gitignore really basic test runner 2015-11-11 22:28:49 -08:00
.travis.yml add travis testing 2015-11-11 22:32:56 -08:00
ft2font.png Ripped font gfx out of FastTracker 2 :) 2015-10-30 17:58:24 -07:00
index.html Remove E4x from missing effects 2015-11-21 20:21:39 +01:00
LICENSE added per-channel low-pass filter 2015-10-23 17:34:52 -07:00
package.json Add contributors to package.json 2015-11-21 20:22:00 +01:00
README.md Remove XM suffix from XMPlayer calls 2015-11-12 08:56:33 -08:00
shell.js Remove XM suffix from XMPlayer calls 2015-11-12 08:56:33 -08:00
trackview.js update screen if pattern changes without row changing 2015-11-20 12:09:57 -08:00
xm.js addendum to previous commit; duh 2016-05-31 22:15:46 -07:00
xmeffects.js Double vibrato depth to act like FT2 2015-11-21 15:50:58 +01:00

xm.js

Build Status

FastTracker 2 .XM player, written for fun.

Demo

There is an XM player and a visualizer which are separate components. The player API looks like this:

  • XMPlayer.init -> starts up audio context; it's available as XMPlayer.audioctx
  • XMPlayer.load(ArrayBuffer) -> returns true if loaded, otherwise barfs randomly
  • XMPlayer.play() -> starts playing
  • XMPlayer.pause() -> obvious
  • XMPlayer.stop() -> 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.