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 :)
Changes:

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)
interpolation algorithm.
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.

Some details:

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
extra patterns)
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
sample)
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
ordinary .mods...)
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>

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)
To use it to play music in your program: take a look at anakata/modplay/Player.java

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 *)