Libxmp version 4.0

Libxmp is a library that renders module file to PCM data. It supports
many module formats including Protracker (MOD), Scream Tracker 3 (S3M),
Fast Tracker II (XM), and Impulse Tracker (IT).


Usage example:

This example loads a module, plays it at 44.1kHz and writes it to a raw
sound file:

    #include <stdio.h>
    #include <stdlib.h>
    #include <xmp.h>
    
    int main(int argc, char **argv)
    {
        xmp_context c;
        struct xmp_frame_info fi;
        FILE *f;
    
        /* The output raw file */
        f = fopen("out.raw", "wb");
        if (f == NULL) {
            fprintf(stderr, "can't open output file\n");
            exit(EXIT_FAILURE);
        }
    
        /* Create the player context */
        c = xmp_create_context();
    
        /* Load our module */
        if (xmp_load_module(c, argv[1]) != 0) {
            fprintf(stderr, "can't load module\n");
            exit(EXIT_FAILURE);
        }
    
        /* Play the module */
        xmp_start_player(c, 44100, 0);
        while (xmp_play_frame(c) == 0) {
            xmp_get_frame_info(c, &fi);
    
            if (fi.loop_count > 0)    /* exit before looping */
                break;
    
            fwrite(fi.buffer, fi.buffer_size, 1, f);  /* write audio data */
        }
        xmp_end_player(c);
        xmp_release_module(c);        /* unload module */
        xmp_free_context(c);          /* destroy the player context */
    
        fclose(f);
    
        exit(EXIT_SUCCESS);
    }

-----

A player context can load and play a single module at a time. Multiple
contexts can be defined if needed.

Use xmp_test_module() to check if the file is a valid module and retrieve 
the module name and type. Use xmp_load_module() to fully load the module
to memory. These two calls return 0 on success or <0 in case of error. Error
codes are:

  -XMP_ERROR_INTERNAL   /* Internal error */
  -XMP_ERROR_FORMAT     /* Unsupported module format */
  -XMP_ERROR_LOAD       /* Error loading file */
  -XMP_ERROR_DEPACK     /* Error depacking file */
  -XMP_ERROR_SYSTEM     /* System error */

If a system error occurs, the specific error is set in errno.

Parameters to xmp_start_player() are the sampling rate (up to 48kHz)
and a bitmapped integer holding one or more of the following mixer flags:

  XMP_MIX_8BIT          /* Mix to 8-bit instead of 16 */
  XMP_MIX_UNSIGNED      /* Mix to unsigned samples */
  XMP_MIX_MONO          /* Mix to mono instead of stereo */
  XMP_MIX_NEAREST       /* Mix using nearest neighbor interpolation */
  XMP_MIX_NOFILTER      /* Disable lowpass filter */

After xmp_start_player() is called, each call to xmp_play_frame() will
render an audio frame.  Call xmp_get_frame_info() to retrieve the buffer
address and size. xmp_play_frame() returns 0 on success or -1 if replay
should stop.

Use xmp_end_player(), xmp_release_module() and xmp_free_context() to
release memory and end replay.

