about | news | download | instructions | features | bugs | todo
ANA-MP is a player for music files (modules) in the .MOD, .XM and .S3M formats.
It is programmed in java and will therefore run (or at least crawl) on any platform that has an implementation of Java and the javax.sound.* api (In most cases that means jdk1.3.0 or newer from Sun)
ANA-MP is released under the LGPL license.
06/04/2005: Version 0.9.7.4 released
Just a quick note to anyone stumbling across this page: Several updates has been released since version 0.9.7, the latest being 0.9.7.4. Get it from the SourceForge project page, which can be reached by clicking the SourceForge logo at the top of this page or one of the download links further down. This page is just so due for a redesign...
23/08/2004: Version 0.9.7 released
This release brings S3M support to the Java world! :)
It's a bit experimental yet, as support for quite a few effects and some format variations are missing. I expect to make it more complete during the next week or so...
You may also notice that the version numbering scheme has changed. It just seemed very unlikely that 0.99 would be the last release before 1.0. The new scheme will make room for as many releases as I might want before I call it finished and put the "1.0" stamp on it.
01/05/2003: Version 0.96 released
Woohoo! New version :)
Made interpolated mixing work. Mixing is now handled by plugins and mixers
with higer order interpolation should be easy to implement. The command line
option "noint" can be used if you want to use a faster (crappier)
Reworked the output plugin interface. The player now always work at 44100Hz,
16 bits, stereo. It's up to the output plugin to resample if a lower quality
is needed. This simplifies the player code but means that there is no
performance gain in decreasing the sound quality.
Wav output plugin added. Supports only 44100Hz, 16 bits stereo. Use the
"wav" command line option.
Version number increased :-)
Bugfix: KeyOff resulted in sample being cut.
Reorganized the distribution:
-All files distributed in one archive.
-Added build.xml for building using ant.
-Added this file :-)
Lots of smaller code cleanups.
09/04/2003: Version 0.95 released
This project isn't dead yet! :)
3 things done in a hurry for this release:
- Made the start of a framework for low level mixer plugins.
- Fixed stupid use of memory in the mixer
- Javadoc written for almost everything
30/07/2002: Version 0.94 released
I'm now quite satisfied with the support for effects. All effects except set filter, invert loop and autovibrato
are now implemented. If I can find out how autovibrato works I'll try to fix that, but I probably will not bother
with set filter and invert loop.
This version also have a very basic support for playlists. You can now play a file with a list of modules
separated by newlines. There is even a option for playing in random order. :)
You might notice that this version is a lot smaller than the previous. That's because much of the player code is
rewritten. Fewer class files -> Less overhead.
22/07/2002: Version 0.93 released
XM-support is coming along nicely :) Most .XMs now play without any
obvious errors. A few things are still missing though: All the .XM
spesific effects and autovibrato. The effects will probably be there
in the next release, but I haven't found any descriprion of how the
autovibrato thing works. I guess I have to experiment a bit...
There hav also been a number of bugfixes.
added: support for ping pong loops
added: detection of Noisetracker modules ("N.T.")
added: relative note and finetune is used
fixed: loading of 16 bits samples (.xm)
fixed: the .xm-loader loader loaded all notes one note to high
fixed: a serious bug in all the slide note effects
fixed: the .xm loader f***ed up the extended (Exx) effects
fixed: (.Xm loader) set sampleLength, loopStart and loopLength right
when loading 16 samples
fixed: loop pattern effect
fixed: (.Xm loader) load the right number of patterns (when not all
patterns is used)
fixed: nullPointerException when "slide to note and volume slide" is
played and "volume slide" never have been played in the same track
fixed: more bugs in "slide to note and volume slide" and "vibrato and
volume slide" (when passing arguments on to slide to note and vibrato)
fixed: yet another bug in "slide to note" when sliding down (a "<"/">"
confusion... ;) )
fixed: a lot of small bugs in the mixing code, generating exeptions
fixed: (.XM loader) make extra empty patterns quiet (not playing
instrument 0 with note 0 in all divisions, all channels...)
fixed: make it safe to play an instrument without any samples (to stop
any sound in that track)
fixed: (.XM loader) make patterns with packed size == 0 quiet (like
fixed: patterns with varying length...
fixed: the .MOD loader didn't load fineTune values right
fixed: handling of volume (don't assume default = 1, get value from
fixed: handling og panning (let loader decide which panning value
should be used)
added: (empty) classes for xm and s3m effects
fixed: the rounding error when calculating ticks in whole millisecs was
to large. Fast modules sounded crap...
added: A ModuleUnits interface have been created so that the player
dont have to know hov to do note-period-rate calculations for each
type of module. There will be one implementation of this interface
for each type of module
added: instruments will fade out if a KEY-OFF note is played
fixed: I finally gave up on making the slide effects work for both mod
an xm, making separate effects for each format. Im confused: Slides
for xm are said to be as protracker in the xm-spec commented by
SaharaSurfers, while the with comments from Byteraver say that the
distance between two octaves is 255 portamento units. What
actually works is the protracker way, only multiplied by 4. (and that
seems to be what mikmod does, except that mikmod also does that when playing
added: volume envelopes!!! :)
fixed: a bug in the forward looping code that made it play the first part of
the sample, skip a part and then start on the loop. This happened if
the loop start wasn't reached in the first tick of playing this sample.
added: panning envelopes!!! :)
15/07/2002: Version 0.92 released
I have continued the rewrite of the player. This is the first version where the modules is actually played with this new code. The internal format used now is based on the .XM format, with some modifications and extensions. The player don't support all of .XM's features yet, actually it only support those features that .XM have in common with .MOD, so playing an .XM is doomed to make the player crash... .XM (and hopfully .S3M) support is not a long way off though :) I'm not so certain about .IT. I haven't looked much at the format and I'm not sure how well it maps to the players internal format.
Things that have been fixed/added:
- Stereo. This can be controlled with the balance, separation, and mono command line options
- Panning and rough panning (effects 8xx and E8x)
- Sample delay (effect EDx)
- Detection of which tracker was used to make the module (based on the id)
- Faster mixing
07/07/2002: Version 0.91 released
This version fixes a lot of bugs in the effects, and it will also play more variations of the .MOD format.
I have also started to rewrite the player to make it possible to support more formats. You can test the xm-loader by typing:
java -cp ana-mp-0.91.jar anakata.modplay.loader.XMLoaderTest <an-xm-module>
bugfix: sample-loop was broken, played "play entire sample, then loop" instead of
"play sample until loop-end, then loop"
bugfix: verbose command line arg fixed
test: slide up/down, works like winamp, madtracker broken?
bugfix: slide to note now works
removed: glissando control. I misunderstood how it worked...
bugfix: jumping to start of 0'th pattern now work
test: FLT4 works, 6CHN works
fix: old 15 instr mod works :)
added: look for id's 2CHN, OCTA (octalyzer), CD81 (atari falcon) and
TDZx (taketracker) (none tested...)
added: buffer cache... +less garbage
-the mixer assumes that all new buffers contains only zeros,
so all cached buffers must be cleared
test: arpeggio works!!! (finaly)
03/07/2002: Version 0.9 released
This version will probably open your .MOD and some noises will often come out of your speakers. Sometimes the noices will sound like music and sometimes they will not...
All versions are available from HERE
To use it as a player, type: java -jar ana-mp-<version>.jar [options] name-of-mod-file (no options or filename will give you a list of options)
Version 0.9.7: (23/08/2004)
Version 0.96: (01/05/2003)
Version 0.95: (09/04/2003)
Version 0.94: (30/07/2002)
Version 0.93: (22/07/2002)
Version 0.92: (15/07/2002)
Version 0.91: (07/07/2002)
Version 0.9: (03/07/2002)
To use it to play music in your program: take a look at anakata/modplay/Player.java
- Play .XM files
- Play most kinds of .MOD files: The original 15 instrument format and .MOD-files with any of these ID's are played: M.K., M!K!*, 2CHN, 4CHN*, FLT4, 6CHN, 8CHN, FLT8*, OCTA*, CD81*, TDZx* and 01CH to 99CH. (Untested marked with *)
- From 8bits, 11025Hz, un-interpolated, mono to 16bits, 44100Hz, interpolated, stereo playback
- Most effects are supported
- Command line interface
- View song and instrument information
- Mute individual channels
- Convert modules to .WAV files
- Missing effects:
- Set filter. (effect E0x)
- Invert loop (effect EFx)
- FLT8 modules will not play right, because they have a different (unsupported) organization of the pattern data
- Some .XMs don't sound right. (Try toontown.xm from the demo
Toontown by Kolor) Haven't looked into it yet...
- Autovibrato (in .XMs) doesn't work yet.
- The S3M support needs more work: Implment more effects, add support for some format variations and special modes (16bit, stereo samples, amiga style slides, etc.)
- Support more formats: .STM, .IT
- Make a GUI
- Find out how XM autovibrato works
- Support more variants of the .MOD format:
- .WOW modules
- Mods with id 16CN or 32CN?
- Look for uncommon kind of .MODs so these can be tested
- Testing and bugfixing all the implemented effects
This page has been visited times since 2002/07/04