Commit graph

90 commits

Author SHA1 Message Date
Johan Hillerström
b04e6c00b0 Introduce a global volume variable 2015-11-14 13:04:16 +01:00
Andy Sloane
570aa33a20 added test for vibrato... and fixed vibrato
naturally when i actually tested it, it turned out to be subtly broken

also reorg'd the tests a bit, sorry @hillerstorm.
2015-11-13 22:06:50 -08:00
Andy Sloane
be463856db Add round 1 of tests 2015-11-12 10:57:02 -08:00
Andy Sloane
6a5fe5e024 Remove XM suffix from XMPlayer calls 2015-11-12 08:56:33 -08:00
Andy Sloane
ce5fd027a3 add build status and API docs to README 2015-11-11 22:49:40 -08:00
Andy Sloane
9bf35716f3 add travis testing 2015-11-11 22:32:56 -08:00
Andy Sloane
7ca90f9b98 really basic test runner
npm test now does... something somewhat useful.

now to write a bunch of tests.
2015-11-11 22:28:49 -08:00
Andy Sloane
8c37c8d96b Separate html "shell" javascript; player now standalone
Closes #3.

The code which defines what the buttons do and downloads songs and so
forth are now completely separated from the player, which has the
following API:

 - `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 now 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
2015-11-11 21:19:41 -08:00
Andy Sloane
8e114a16da Split viewer code into trackview.js
Also disabled iOS hack, as it seems to be causing issues, and fixed a
minor drag-n-drop bug (wouldn't load if track was already playing past
length of newly loaded track).

To play without a viewer, you still have to stub it out. Not sure the
best way to handle that case yet.
2015-11-11 18:01:15 -08:00
Andy Sloane
4b6e75332e Merge pull request #9 from hillerstorm/namespacing_and_global_leakage
Namespacing and global leakage
2015-11-11 16:12:14 -08:00
Johan Hillerström
1667ab502b Add window fallback 2015-11-12 01:09:20 +01:00
Johan Hillerström
664686f199 Add newlines 2015-11-12 01:05:59 +01:00
Johan Hillerström
7aa67803ed Use postfix increment operator 2015-11-12 01:04:59 +01:00
Andy Sloane
e34970c05f Merge pull request #8 from luckcolors/master
Added nw.js package.json file for building desktop app.
2015-11-11 15:49:23 -08:00
Johan Hillerström
ea36dceb55 Wrap in IIFE and namespace any shared info 2015-11-12 00:08:32 +01:00
Johan Hillerström
a37555ed58 Reorder to load without any issues 2015-11-12 00:00:43 +01:00
luckcolors
14d88e9a10 Removed toolbar. 2015-11-11 22:49:25 +01:00
luckcolors
41e8713b74 First commit for desktop app Nw.js 2015-11-11 22:28:21 +01:00
Andy Sloane
2cf8840665 Contact with the real world
Many, many fixes found after posting this on my website.

 - drag n drop supported
 - plays on OSX and iOS safari now
 - random other hiccups fixed

there seems to be some remaining issues cleaning up when loading a new
song.
2015-11-10 20:30:41 -08:00
Andy Sloane
5aa5c06ab0 update readme 2015-11-04 10:23:54 -08:00
Andy Sloane
541a9d721c no longer storing xms in git 2015-11-04 10:21:27 -08:00
Andy Sloane
7d6481ad73 file picker! 2015-11-04 10:21:04 -08:00
Andy Sloane
a547732063 render a nice big title and center stuff 2015-11-04 07:19:44 -08:00
Andy Sloane
f092f847f7 instrument list rendering with FT2 font. 2015-11-04 06:22:49 -08:00
Andy Sloane
54809c2b81 bugfix for 9xx offset effect 2015-11-04 05:50:29 -08:00
Andy Sloane
b859f27109 disable looping if looplen = 0...
so much pathological crap in XM files...
2015-11-03 18:16:00 -08:00
Andy Sloane
f95bd1e169 whoops, more refactoring bugs
i should really write some tests.
2015-11-03 17:55:12 -08:00
Andy Sloane
3c0a865824 update the effects code after moving stuff into xm 2015-11-03 09:57:40 -08:00
Andy Sloane
fd52b21e3f only instruments with samplemaps can play
by refactoring the xm loader i inadvertently broke this
2015-11-03 09:50:19 -08:00
Andy Sloane
ea6edaf2e4 add play/pause function 2015-11-03 09:36:00 -08:00
Andy Sloane
5967da7353 only reset pan/vol on instrument, not note 2015-11-03 07:18:30 -08:00
Andy Sloane
07cd6e8111 another corner case, another broken .xm 2015-11-02 22:51:04 -08:00
Andy Sloane
06ad3ed8a5 fix instrument trigger glitch 2015-11-02 22:29:59 -08:00
Andy Sloane
27d0a0b1c3 render volume effect column with the icons 2015-11-02 16:51:02 -08:00
Andy Sloane
c4370f447c implemented multiple samples / instrument 2015-11-02 13:46:23 -08:00
Andy Sloane
22dd555228 zoom scopes out 4x; looks way better 2015-11-02 13:46:22 -08:00
Andy Sloane
d68e8e8225 show all instrument names 2015-11-01 21:26:03 -08:00
Andy Sloane
114240ca9f oscilloscopes.
couldn't really think of a better way to do it, but it looks pretty
awesome. you can really see the filter effect too.
2015-11-01 09:26:03 -08:00
Andy Sloane
3daeeee96b implement retrigger, move effects into separate js 2015-11-01 07:42:52 -08:00
Andy Sloane
6dee1787f3 show the instruments 2015-10-31 11:39:49 -07:00
Andy Sloane
a3b94c51b9 oh man, DUH 2015-10-31 11:17:22 -07:00
Andy Sloane
49005f0ae0 so many weird uses of effects 2015-10-31 10:52:46 -07:00
Andy Sloane
5e141535ab fix some filter weirdness 2015-10-31 09:33:59 -07:00
Andy Sloane
32b09bdf63 various envelope/effect fixes
Dubmood's .xms seem to expose a lot of bugs...
2015-10-31 09:27:38 -07:00
Andy Sloane
837e302796 workaround pattern rendering breakage
synchronized screen updates need to be a bit more robust...
2015-10-31 07:56:36 -07:00
Andy Sloane
9f014f35c8 how did i mess up arpeggio!? 2015-10-30 23:39:50 -07:00
Andy Sloane
acffa056a5 *really* fix instrument triggers
last commit was completely wrong. also i read somewhere that the
instrument alone doesn't reset volume, which is apparently a lie.
2015-10-30 22:54:19 -07:00
Andy Sloane
c12f2b8068 fix triggering without note
you can retrigger a note just by using the instrument column.
2015-10-30 22:35:48 -07:00
Andy Sloane
ee005ef668 implement volume column slides 2015-10-30 22:28:03 -07:00
Andy Sloane
c238aabd66 butter smooth screen updates, longer audio buffer 2015-10-30 21:25:21 -07:00