From 7c24e9a9b02b04dcaf9507acb94091ea70a2c02d Mon Sep 17 00:00:00 2001 From: Xavi Del Campo Date: Fri, 31 Jan 2020 10:32:23 +0100 Subject: Imported pristine psxsdk-20190410 from official repo --- libmodplay/modplay.h | 222 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 libmodplay/modplay.h (limited to 'libmodplay/modplay.h') diff --git a/libmodplay/modplay.h b/libmodplay/modplay.h new file mode 100644 index 0000000..0370bc6 --- /dev/null +++ b/libmodplay/modplay.h @@ -0,0 +1,222 @@ +#ifndef _MODPLAY_H +#define _MODPLAY_H + +#ifndef NO_PSX_LIB + #include +#endif + +/** Format identification IDs. */ + +enum modplay_formats +{ + MOD_FMT_MOD, /** Ultimate SoundTracker / NoiseTracker / ProTracker */ +}; + +typedef struct +{ + char name[32]; + unsigned int length; // Length in bytes + char finetune; + unsigned char volume; + unsigned int repeat_off; + unsigned int repeat_len; + unsigned char bits; + unsigned char data_type; + unsigned char *data; +}ModSample; + +/** Instrument. */ + +typedef struct +{ + char name[64]; + int sample_num; + unsigned char sample_ids[8]; +}ModInstrument; + +/** Music */ + +typedef struct +{ + /** Music title. */ + char title[32]; + /** Number of samples in the music */ + int sample_num; + /** Number of channels used by the music */ + int channel_num; + /** Number of instruments used by the music */ + int instrument_num; + /** Pointer to an array of ModSample structures. */ + ModSample *sample; + /** Pointer to an array of ModInstrument structures. */ + ModInstrument *instrument; + /** Number of song positions. */ + unsigned char song_pos_num; + /** Pattern table. */ + unsigned char pattern_tbl[256]; + /** Number of rows for each pattern. */ + unsigned char pattern_row_num[256]; + /** ID, such as "M!K!","M.K.","FLT4", etc. */ + char id[4]; + /** Number of patterns. */ + int pattern_num; + /** Pointer to pattern data */ + unsigned char *pattern_data; + /** Format of music. */ + int fmt; + + /** [Runtime] Current song position */ + unsigned char song_pos; + /** [Runtime] Position inside the pattern currently being played */ + unsigned char pat_pos; + /** [Runtime] Divisions per second */ + int divisions_sec; + /** [Runtime] Beats per minute */ + unsigned char beats_minute; + /** [Runtime] Ticks per division */ + unsigned char ticks_division; + /** [Runtime] Current tick count */ + unsigned char cur_tick; + /** [Runtime] Old periods for each channel. */ + unsigned short old_periods[8]; + /** [Runtime] Old sample numbers for each channel. */ + unsigned char old_samples[8]; + /** [Runtime] In PlayStation pitch, this is added to the original sample pitch + and can be used to change the pitch of the music for special effects */ + short transpose; +}ModMusic; + +/** Flags for MODLoad */ +enum modload_flags +{ + /** Do not load the samples in memory */ + MODLOAD_NOSAMPLES = 1, +}; + +/** + * Allocate a ModMusic structure and copy data to it from + * data in memory containing a music module file + * + * Almost all data from the music module file is copied into another location + * in memory for the ModMusic structure. + * + * This means your free memory should be roughly the double of + * the size of the MOD you're loading. + * + * You can avoid loading the samples in the module file's native format, + * thus saving useful memory, by passing the MODLOAD_NOSAMPLES + * flag. This is especially the case when you use MOD4PSX_Upload(). + * + * @param d Pointer to a buffer containing a music module file + * @param flags Flag bitmask. + * @return Pointer to newly allocated ModMusic structure. + */ + +ModMusic *MODLoadEx(void *d, unsigned int flags); + +/** + * Just like MODLoadEx() but with the flags parameters set to zero, i.e. + * default behaviour. + * + * @param d Pointer to a buffer containing a music module file + * @return Pointer to newly allocated ModMusic structure. + */ + +ModMusic *MODLoad(void *d); + +/** + * Play a tick of a music. + * + * This has to be called 60 / 50 times per second. + * + * MODPlay decreases the value referenced by t every time + * the music finishes. + * + * Set the variable pointed by t when you want to set the number of times again! + * + * @param m Pointer to ModMusic structure + * @param t Pointer to an int which contains how many times the music module has to be played. + * i.e. if *t == 1, play once, if *t == 2, play twice, ..., if *t == -1, loop endlessly + * + */ + +void MODPlay(ModMusic *m,int *t); + +/** + * Stop a music. + * @param m Pointer to ModMusic structure for the music. + */ +void MODStop(ModMusic *m); + +/** + * Rewind music, that is, make it restart from the beginning. + * @param m Pointer to ModMusic structure for the music. + */ +void MODRewind(ModMusic *m); + +/** + * Upload the samples of the module music to Sound RAM + * @param m Pointer to ModMusic structure for the music. + * @param base_addr Sound RAM address to start from when uploading to Sound RAM + * If -1 it is interpreted to be the same as the start of the section for sound data in Sound RAM + * (SPU_DATA_BASE_ADDR). base_addr must be a multiply of 8. + * @return The sound address after all the uploaded samples + */ + +int MODUploadSamples(ModMusic *m, int base_addr); + +/** + * Sets the SPU voice to use as the first channel when playing music. + * + * The voice for the second channel will then be this (value+1), and so on... + * + * Usually the base voice is 0; a MOD file can have up to eight channels, so take care of that. + * + * @param base_voice Desired base voice (0-23) + */ + +void MODSetBaseVoice(int base_voice); + +/** + * Sets transpose for music + * + * Changing the transpose value for a music shifts the frequency + * its samples are played at, but the music's tempo is unchanged. + * @param m Pointer to ModMusic structure + * @param transpose Transpose value + */ + +void MODSetTranspose(ModMusic *m, short transpose); + +/** + * Upload preconverted ADPCM samples, as generated by the mod4psx tool. + * + * @param d Pointer to buffer containing the ADPCM samples archive + * @param base_addr Base address at which the samples will start to be uploaded. + * @return The sound address after all the uploaded samples + */ + +int MOD4PSX_Upload(void *d, int base_addr); + +/** + * Free memory allocated for music module + * @param m Pointer to ModMusic structure + */ + +void MODUnload(ModMusic *m); + +/** + * Set maximum volume for MODPlay + * @param max_volume Maximum volume desired (0-0x3FFF) + */ + +void MODSetMaxVolume(unsigned short max_volume); + +/** + * Set mono mode + * @param value If 0 set stereo mode, if 1 set mono mode + */ + +void MODSetMono(int value); + +#endif -- cgit v1.2.3