Mercurial > codedump
diff win95kggui/dep/ft2play/pmplay.h @ 126:8e4ee43d3b81
remove submodules
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Sun, 01 Oct 2023 03:48:43 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win95kggui/dep/ft2play/pmplay.h Sun Oct 01 03:48:43 2023 -0400 @@ -0,0 +1,166 @@ +#pragma once + +#include <stdint.h> +#include <stdbool.h> + +// AUDIO DRIVERS +#if defined AUDIODRIVER_SDL +#include "audiodrivers/sdl/sdldriver.h" +#elif defined AUDIODRIVER_WINMM +#include "audiodrivers/winmm/winmm.h" +#else +// Read "audiodrivers/how_to_write_drivers.txt" +#endif + +enum // voice flags +{ + IS_Vol = 1, + IS_Period = 2, + IS_NyTon = 4, + IS_Pan = 8, + IS_QuickVol = 16 +}; + +enum // note +{ + NOTE_KEYOFF = 97 +}; + +enum // header flags +{ + LINEAR_FREQUENCIES = 1 +}; + +enum // sample flags +{ + LOOP_OFF = 0, + LOOP_FORWARD = 1, + LOOP_PINGPONG = 2, + SAMPLE_16BIT = 16 +}; + +enum // envelope flags +{ + ENV_ENABLED = 1, + ENV_SUSTAIN = 2, + ENV_LOOP = 4 +}; + +typedef struct songTyp_t +{ + char name[20+1]; + uint8_t antChn, pattDelTime, pattDelTime2, pBreakPos, songTab[256]; + bool pBreakFlag, posJumpFlag; + int16_t songPos, pattNr, pattPos, pattLen; + uint16_t len, repS, speed, tempo, globVol, timer, ver; + + uint16_t antInstrs; // 8bb: added this +} songTyp; + +typedef struct sampleTyp_t +{ + char name[22+1]; + int32_t len, repS, repL; + uint8_t vol; + int8_t fine; + uint8_t typ, pan; + int8_t relTon; + int8_t *pek; +} sampleTyp; + +typedef struct instrTyp_t +{ + char name[22+1]; + uint8_t ta[96]; + int16_t envVP[12][2], envPP[12][2]; + uint8_t envVPAnt, envPPAnt; + uint8_t envVSust, envVRepS, envVRepE; + uint8_t envPSust, envPRepS, envPRepE; + uint8_t envVTyp, envPTyp; + uint8_t vibTyp, vibSweep, vibDepth, vibRate; + uint16_t fadeOut; + uint8_t mute; + int16_t antSamp; + sampleTyp samp[16]; +} instrTyp; + +typedef struct stmTyp_t +{ + volatile uint8_t status; + int8_t relTonNr, fineTune; + uint8_t sampleNr, instrNr, effTyp, eff, smpOffset, tremorSave, tremorPos; + uint8_t globVolSlideSpeed, panningSlideSpeed, mute, waveCtrl, portaDir; + uint8_t glissFunk, vibPos, tremPos, vibSpeed, vibDepth, tremSpeed, tremDepth; + uint8_t pattPos, loopCnt, volSlideSpeed, fVolSlideUpSpeed, fVolSlideDownSpeed; + uint8_t fPortaUpSpeed, fPortaDownSpeed, ePortaUpSpeed, ePortaDownSpeed; + uint8_t portaUpSpeed, portaDownSpeed, retrigSpeed, retrigCnt, retrigVol; + uint8_t volKolVol, tonNr, envPPos, eVibPos, envVPos, realVol, oldVol, outVol; + uint8_t oldPan, outPan, finalPan; + bool envSustainActive; + int16_t envVIPValue, envPIPValue; + uint16_t outPeriod, realPeriod, finalPeriod, finalVol, tonTyp, wantPeriod, portaSpeed; + uint16_t envVCnt, envVAmp, envPCnt, envPAmp, eVibAmp, eVibSweep; + uint16_t fadeOutAmp, fadeOutSpeed; + int32_t smpStartPos; + instrTyp *instrSeg; +} stmTyp; + +#ifdef _MSC_VER +#pragma pack(push) +#pragma pack(1) +#endif +typedef struct tonTyp_t // this one must be packed on some systems +{ + uint8_t ton, instr, vol, effTyp, eff; +} +#ifdef __GNUC__ +__attribute__ ((packed)) +#endif +tonTyp; +#ifdef _MSC_VER +#pragma pack(pop) +#endif + +// globalized +extern volatile bool interpolationFlag, volumeRampingFlag, moduleLoaded, musicPaused, WAVDump_Flag; +extern bool linearFrqTab; +extern volatile const uint16_t *note2Period; +extern uint16_t pattLens[256]; +extern int16_t PMPTmpActiveChannel, boostLevel; +extern int32_t masterVol, PMPLeft; +extern int32_t realReplayRate, quickVolSizeVal, speedVal; +extern uint32_t frequenceDivFactor, frequenceMulFactor; +extern uint32_t CDA_Amp; +extern tonTyp *patt[256]; +extern instrTyp *instr[1+128]; +extern songTyp song; +extern stmTyp stm[32]; + +#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x))) + +bool initMusic(int32_t audioFrequency, int32_t audioBufferSize, bool interpolation, bool volumeRamping); +bool loadMusicFromData(const uint8_t *data, uint32_t dataLength); // .XM/.MOD/.FT +bool loadMusic(const char *filename); // .XM/.MOD/.FT +void freeMusic(void); +bool startMusic(void); +void stopMusic(); +void pauseMusic(void); +void resumeMusic(void); +void setMasterVol(int32_t v); // 0..256 +void setAmp(int32_t level); // 1..32 +void setPos(int32_t pos, int32_t row); // input of -1 = don't change +void stopVoices(void); +void updateReplayRate(void); +void startPlaying(void); +void stopPlaying(void); + +bool WAVDump_Record(const char *filenameOut); + +// 8bb: added these three, handy +void WAVDump_Abort(void); +int32_t getMasterVol(void); +int32_t getAmp(void); +uint8_t getNumActiveVoices(void); +void toggleMusic(void); +void setInterpolation(bool on); +void setVolumeRamping(bool on);