summaryrefslogtreecommitdiff
path: root/libmodplay/modplay.h
diff options
context:
space:
mode:
authorXavi Del Campo <xavi.dcr@tutanota.com>2020-01-31 10:32:23 +0100
committerXavi Del Campo <xavi.dcr@tutanota.com>2020-01-31 10:32:23 +0100
commit7c24e9a9b02b04dcaf9507acb94091ea70a2c02d (patch)
treec28d0748652ad4b4222309e46e6cfc82c0906220 /libmodplay/modplay.h
parenta2b7b6bb1cc2f4a3258b7b2dbc92399d151f864d (diff)
downloadpsxsdk-7c24e9a9b02b04dcaf9507acb94091ea70a2c02d.tar.gz
Imported pristine psxsdk-20190410 from official repo
Diffstat (limited to 'libmodplay/modplay.h')
-rw-r--r--libmodplay/modplay.h222
1 files changed, 222 insertions, 0 deletions
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 <psx.h>
+#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