shithub: candycrisis

ref: 8871dfafcd58c3952762d5f0de3a6222e638fba2
dir: /src/support/ibxm.h/

View raw version

/* ibxm/ac mod/xm/s3m replay (c)mumart@gmail.com */

extern const char *IBXM_VERSION;

struct data {
    char *buffer;
    int length;
};

struct sample {
    char name[32];
    int loop_start, loop_length;
    short volume, panning, rel_note, fine_tune, *data;
};

struct envelope {
    char enabled, sustain, looped, num_points;
    short sustain_tick, loop_start_tick, loop_end_tick;
    short points_tick[16], points_ampl[16];
};

struct instrument {
    int num_samples, vol_fadeout;
    char name[32], key_to_sample[97];
    char vib_type, vib_sweep, vib_depth, vib_rate;
    struct envelope vol_env, pan_env;
    struct sample *samples;
};

struct pattern {
    int num_channels, num_rows;
    char *data;
};

struct module {
    char name[32];
    int num_channels, num_instruments;
    int num_patterns, sequence_len, restart_pos;
    int default_gvol, default_speed, default_tempo, c2_rate, gain;
    int linear_periods, fast_vol_slides;
    unsigned char *default_panning, *sequence;
    struct pattern *patterns;
    struct instrument *instruments;
};

/* Allocate and initialize a module from the specified data, returns NULL on error.
   Message must point to a 64-character buffer to receive error messages. */
struct module *module_load(struct data *data, char *message);
/* Deallocate the specified module. */
void dispose_module(struct module *module);
/* Allocate and initialize a replay with the specified module and sampling rate. */
struct replay *new_replay(struct module *module, int sample_rate, int interpolation);
/* Deallocate the specified replay. */
void dispose_replay(struct replay *replay);
/* Returns the song duration in samples at the current sampling rate. */
int replay_calculate_duration(struct replay *replay, int speed_multiplier_percent);
/* Seek to approximately the specified sample position.
   The actual sample position reached is returned. */
//int replay_seek(struct replay *replay, int sample_pos);
/* Set the pattern in the sequence to play. The tempo is reset to the default. */
void replay_set_sequence_pos(struct replay *replay, int pos);
/* Generates audio and returns the number of stereo samples written into mix_buf.
   Individual channels may be excluded using the mute bitmask. */
int replay_get_audio(struct replay *replay, int *mix_buf, int mute, int speed_multiplier_percent);
/* Returns the currently playing pattern in the sequence.*/
int replay_get_sequence_pos(struct replay *replay);
/* Returns the currently playing row in the pattern. */
int replay_get_row(struct replay *replay);
/* Returns the length of the output buffer required by replay_get_audio(). */
int calculate_mix_buf_len(int sample_rate, int speed_multiplier_percent);