00001 /*! \file 00002 * X-Forge Util <br> 00003 * Copyright 2000-2003 Fathammer Ltd 00004 * 00005 * \brief XM player internal structures header file 00006 * 00007 * $Id: XFuXMPlayer_internal.h,v 1.12 2003/06/04 13:14:07 toni Exp $ 00008 * $Date: 2003/06/04 13:14:07 $ 00009 * $Revision: 1.12 $ 00010 */ 00011 00012 #ifndef XFUXMPLAYER_INTERNAL_H_INCLUDED 00013 #define XFUXMPLAYER_INTERNAL_H_INCLUDED 00014 00015 00016 00017 const UINT16 XMFORMAT_SIZEOF_ENVELOPE = 325; 00018 const UINT16 XMFORMAT_SIZEOF_WAVEFORM = 64; 00019 const UINT16 XMFORMAT_SIZEOF_KEYBOARD = 96; 00020 00021 const UINT16 XMFORMAT_SAMPLE_16BIT = 16; 00022 00023 //! Fixed point accuracy. 00024 const INT32 FP_BITS = 12; 00025 const INT32 FP_VALUE = (1 << FP_BITS); 00026 00027 const INT32 VOLUME_FP_BITS = 16; 00028 00029 const INT32 VOLUME_RAMP_WIDTH = 32; 00030 00031 enum XMPLAYER_LOOP_TYPE 00032 { 00033 LOOP_FORWARD = 1, 00034 LOOP_PINGPONG = 2 00035 }; 00036 00037 enum XMPLAYER_ENVELOPE_TYPE 00038 { 00039 ENV_ON = 1, 00040 ENV_SUSTAIN = 2, 00041 ENV_LOOP = 4 00042 }; 00043 00044 enum XMPLAYER_WAVEFORM 00045 { 00046 WAVEFORM_SINEWAVE = 0, 00047 WAVEFORM_RAMPDOWN = 1, 00048 WAVEFORM_SQUAREWAVE = 2, 00049 WAVEFORM_NO_RETRIG = 4 00050 }; 00051 00052 enum XMPLAYER_XM_VIBRATO_WAVEFORM 00053 { 00054 XM_VIBRATO_WAVEFORM_SINEWAVE = 0, 00055 XM_VIBRATO_WAVEFORM_SQUAREWAVE = 1, 00056 XM_VIBRATO_WAVEFORM_RAMPDOWN = 2, 00057 XM_VIBRATO_WAVEFORM_RAMPUP = 3 00058 }; 00059 00060 00061 class XFuXMFormatAtom 00062 { 00063 public: 00064 UINT8 mNote; 00065 UINT8 mInstrumentNb; 00066 UINT8 mVolume; 00067 UINT8 mEffectType; 00068 UINT8 mEffectValue; 00069 }; 00070 00071 00072 class XFuXMFormatHeader 00073 { 00074 public: 00075 UINT8 mIdString[17]; //!< ID text: 'Extended module: '. 00076 UINT8 mModuleName[20]; //!< Module name, padded with zeroes. 00077 UINT8 mH1A; //!< $1A. 00078 UINT8 mTrackerName[20]; //!< Tracker name. 00079 UINT16 mVersion; //!< Version number, hi-UINT8 major, lo-UINT8 minor. 00080 00081 UINT32 mHeaderSize; //!< Header size. 00082 00083 UINT16 mSongLength; //!< Song length in pattern order table. 00084 UINT16 mRestartPosition; //!< Song restart position. 00085 UINT16 mNbChannels; //!< Number of channels. 00086 UINT16 mNbPatterns; //!< Number of patterns. 00087 UINT16 mNbInstruments; //!< Number of instruments. 00088 00089 /*! Bit 0: 00090 * \li 0 = Amiga frequency table 00091 * \li 1 = Linear frequency table 00092 */ 00093 UINT16 mFlags; 00094 00095 UINT16 mTempo; //!< Default tempo (0..31). 00096 UINT16 mBpm; //!< Default bpm (0..255). 00097 00098 UINT8 mOrderTable[256]; //!< Pattern order table. 00099 }; 00100 00101 00102 class XFuXMFormatPatternHeader 00103 { 00104 public: 00105 UINT32 mHeaderLength; //!< Pattern header length. 00106 UINT8 mPackingType; //!< Packing type, always 0. 00107 UINT16 mNbRows; //!< Number of rows in pattern (0..256). 00108 UINT16 mSize; //!< Packed patterndata size. 00109 }; 00110 00111 00112 class XFuXMFormatInstrumentHeader 00113 { 00114 public: 00115 UINT32 mSize; //!< Instrument size. 00116 UINT8 mInstrumentName[22]; //!< Instrument name. 00117 UINT8 mType; //!< Instrument type, always 0. 00118 UINT16 mNbSamples; //!< Number of samples in instrument. 00119 }; 00120 00121 00122 class XFuXMFormatInstrument 00123 { 00124 public: 00125 UINT32 mSampleHeaderSize; //!< Sample header size. 00126 00127 UINT8 mKeyboard[96]; //!< Sample number for all notes. 00128 00129 UINT16 mVolumeEnvelope[24]; //!< Points for volume envelope. 00130 UINT16 mPanningEnvelope[24]; //!< Points for panning envelope. 00131 UINT8 mNbVolEnvPoints; //!< Number of volume envelope points. 00132 UINT8 mNbPanEnvPoints; //!< Number of panning envelope points. 00133 UINT8 mVolEnvSustain; //!< Volume envelope sustain point. 00134 UINT8 mVolEnvLoopStart; //!< Volume envelope loop start point. 00135 UINT8 mVolEnvLoopEnd; //!< Volume envelope loop end point. 00136 UINT8 mPanEnvSustain; //!< Panning envelope sustain point. 00137 UINT8 mPanEnvLoopStart; //!< Panning envelope loop start point. 00138 UINT8 mPanEnvLoopEnd; //!< Panning envelope loop end point. 00139 //! Volume envelope type. 00140 /*! \li Bit 0: On 00141 * \li Bit 1: Sustain 00142 * \li Bit 2: Loop 00143 */ 00144 UINT8 mVolEnvType; 00145 //! Panning envelope type. 00146 /*! \li Bit 0: On 00147 * \li Bit 1: Sustain 00148 * \li Bit 2: Loop 00149 */ 00150 UINT8 mPanEnvType; 00151 00152 UINT8 mVibratoType; //!< Vibrato type. 00153 UINT8 mVibratoSweep; //!< Vibrato sweep. 00154 UINT8 mVibratoDepth; //!< Vibrato depth. 00155 UINT8 mVibratoRate; //!< Vibrato rate. 00156 00157 UINT16 mVolumeFadeout; //!< Volume fadeout speed. 00158 00159 UINT16 mReserved; //!< Reserved. 00160 }; 00161 00162 00163 class XFuXMFormatSample 00164 { 00165 public: 00166 UINT32 mSampleLength; //!< Sample length. 00167 UINT32 mLoopStart; //!< Sample loop start. 00168 UINT32 mLoopLength; //!< Sample loop length. 00169 UINT8 mVolume; //!< Volume. 00170 INT8 mFinetune; //!< Finetune (signed byte -128..+127). 00171 //! Sample type. 00172 /*! Bit 0-1: 00173 * \li 0 = No loop 00174 * \li 1 = Forward loop 00175 * \li 2 = Ping-pong loop 00176 * \par Bit 4: 16-bit sample data 00177 */ 00178 UINT8 mType; 00179 00180 UINT8 mPan; //!< Panning (0..255). 00181 INT8 mRelativeNote; //!< Relative note number (signed byte). 00182 00183 UINT8 mReserved; //!< Reserved. 00184 00185 UINT8 mSampleName[22]; //!< Sample name. 00186 }; 00187 00188 00189 class XFuXMSong 00190 { 00191 public: 00192 CHAR8 *mTypeString; //!< Module type. 00193 UINT8 *mOrderTable; //!< Pattern order table, MAX_ORDERS. 00194 UINT16 mSongLength; //!< Song length in pattern order table. 00195 UINT16 mRestartPosition; //!< Song restart position. 00196 00197 UINT16 mNbPatterns; //!< Number of patterns. 00198 UINT16 mNbChannels; //!< Number of channels. 00199 UINT16 mNbInstruments; //!< Number of instruments. 00200 00201 UINT16 mTempo; //!< Tempo (0..31), tick count. 00202 UINT16 mBpm; //!< Bpm (0..255), tick speed. 00203 00204 INT8 mGlobalVolume; //!< Global volume. 00205 }; 00206 00207 00208 class XFuXMSample 00209 { 00210 public: 00211 UINT8 mVolume; //!< Volume (0..63). 00212 UINT8 mPan; //!< Panning (-128..+127). 00213 INT8 mFinetune; //!< Finetune (signed byte -128..+127). 00214 INT8 mRelativeNote; //!< Relative note number (signed byte). 00215 00216 void *mOffset; //!< Sample address in memory. 00217 UINT32 mSize; //!< Sample size. 00218 00219 UINT8 mLoopForward; //!< Forward loop. 00220 UINT8 mLoopPingpong; //!< Pingpong loop. 00221 UINT32 mLoopStart; //!< Sample loop start. 00222 UINT32 mLoopEnd; //!< Sample loop end. 00223 00224 UINT8 m16Bit; //!< 16-bit sample flag. 00225 }; 00226 00227 00228 class XFuXMInstrument 00229 { 00230 public: 00231 UINT16 mNbSamples; //!< Number of samples in instrument. 00232 XFuXMSample *mSamples; //!< MAX_SAMPLES. 00233 00234 UINT8 mKeyboard[XMFORMAT_SIZEOF_KEYBOARD]; //!< Sample number for all notes. 00235 00236 REAL mVolumeEnvelope[XMFORMAT_SIZEOF_ENVELOPE]; 00237 UINT16 mVolEnvEnd; //!< Volume envelope end point. 00238 UINT8 mVolEnvType; //!< Volume envelope flag. 00239 UINT16 mVolEnvLoopStart; //!< Volume envelope loop start. 00240 UINT16 mVolEnvLoopEnd; //!< Volume envelope loop end. 00241 UINT16 mVolEnvSustain; //!< Volume envelope sustain point. 00242 00243 REAL mVolumeFadeout; //!< Volume fadeout speed. 00244 00245 UINT8 mPanningEnvelope[XMFORMAT_SIZEOF_ENVELOPE]; 00246 UINT16 mPanEnvEnd; //!< Panning envelope end point. 00247 UINT8 mPanEnvType; //!< Panning envelope flag. 00248 UINT16 mPanEnvLoopStart; //!< Panning envelope loop start. 00249 UINT16 mPanEnvLoopEnd; //!< Panning envelope loop end. 00250 UINT16 mPanEnvSustain; //!< Panning envelope sustain point. 00251 00252 UINT8 mIsVibrato; //!< Vibrato flag. 00253 UINT8 mVibratoType; //!< Vibrato type. 00254 UINT8 mVibratoSweep; //!< Vibrato sweep. 00255 UINT8 mVibratoDepth; //!< Vibrato depth. 00256 UINT8 mVibratoRate; //!< Vibrate rate. 00257 }; 00258 00259 00260 class XFuXMPattern 00261 { 00262 public: 00263 UINT8 *mData; //!< Pattern data. 00264 UINT32 *mRows; //!< Pointer to row in pattern, MAX_PATTERN_ROWS. 00265 }; 00266 00267 00268 class XFuXMChannel 00269 { 00270 public: 00271 XFuXMFormatAtom mTa; 00272 00273 INT mIsValid; //! Data validity flag. 00274 INT mInitSample; //! Sample initialization flag. 00275 00276 INT32 mPointer; //! Pointer to current position in sample data. 00277 00278 XFuXMInstrument mCurrentInstrument; //!< Current instrument. 00279 XFuXMSample mCurrentSample; //!< Current sample. 00280 00281 void * mOffset; //!< Sample address in memory. 00282 INT32 mLength; //!< Sample size. 00283 INT16 mInstrumentNb; //!< Instrument number. 00284 UINT32 mSpeed; //!< Speed. 00285 //! Sample loop type. 00286 /*! \li 0 = Off 00287 * \li 1 = Forward 00288 * \li 2 = Pingpong 00289 */ 00290 UINT8 mLoop; 00291 INT32 mLoopStart; //!< Sample loop start. 00292 INT32 mLoopEnd; //!< Sample loop end. 00293 00294 UINT8 mIsSample; //!< Sample availability flag. 00295 00296 INT8 mNote; //!< Current note. 00297 INT8 mFinetune; //!< Current finetune. 00298 00299 INT8 mDirection; //!< Sample direction: +1 = Forwards, -1 = Backwards. 00300 00301 UINT8 mVolEnvType; //!< Volume envelope type. 00302 UINT16 mVolEnvPointer; //!< Volume envelope pointer. 00303 UINT8 mVolEnvSpeed; //!< Volume envelope speed. 00304 UINT16 mVolEnvLoopStart; //!< Volume envelope loop start. 00305 UINT16 mVolEnvLoopEnd; //!< Volume envelope loop end. 00306 UINT16 mVolEnvSustain; //!< Volume envelope sustain point. 00307 REAL mVolEnvValue; //!< Volume envelope value. 00308 REAL mVolumeFadeout; //!< Volume envelope fadeout. 00309 REAL mVolumeFadeoutValue; //!< Volume envelope fadeout value. 00310 00311 INT8 mVolume; //!< Volume. 00312 INT8 mBaseVolume; //!< Base volume. 00313 REAL mFinalVolume; //!< Final volume, used for ramping. 00314 REAL mFinalOldVolume; //!< Final old volume, used for ramping. 00315 REAL mFinalVolumeSpeed; //!< Final volume ramp speed. 00316 00317 UINT8 mPanEnvType; //!< Panning envelope type. 00318 UINT16 mPanEnvPointer; //!< Panning envelope pointer. 00319 UINT8 mPanEnvSpeed; //!< Panning envelope speed. 00320 UINT16 mPanEnvLoopStart; //!< Panning envelope loop start. 00321 UINT16 mPanEnvLoopEnd; //!< Panning envelope loop end. 00322 UINT16 mPanEnvSustain; //!< Panning envelope sustain point. 00323 UINT8 mPanEnvValue; //!< Panning envelope value. 00324 UINT8 mPan; //!< Pan. 00325 INT16 mFinalPan; //!< Final pan. 00326 00327 UINT8 mSustainReleased; //!< Sustain release flag. 00328 00329 UINT8 mVolumeColumn; //!< Volume column effect. 00330 00331 UINT8 mEffectType; //!< Effect type. 00332 UINT8 mEffectValue; //!< Effect value. 00333 00334 UINT8 mPortamentoUpV; //!< Portamento up value. 00335 UINT8 mPortamentoDownV; //!< Portamento down value. 00336 UINT8 mTonePortamentoV; //!< Tone portamento value. 00337 UINT8 mVolumeSlideV; //!< Volume slide value. 00338 UINT8 mFinePortamentoUpV; //!< Fine portamento up value. 00339 UINT8 mFinePortamentoDownV; //!< Fine portamento down value. 00340 UINT8 mFineVolumeSlideUpV; //!< Fine volume slide up value. 00341 UINT8 mFineVolumeSlideDownV; //!< Fine volume slide down value. 00342 UINT8 mGlobalVolumeSlideV; //!< Global volume slide value. 00343 UINT8 mMultiRetrigVolumeV; //!< Multi retrig note volume change. 00344 UINT8 mMultiRetrigRateV; //!< Multi retríg note rate. 00345 UINT8 mTremorV; //!< Tremor value. 00346 UINT8 mExtraFinePortamentoUpV; //!< Extra fine portamento up value. 00347 UINT8 mExtraFinePortamentoDownV; //!< Extra fine portamento down value. 00348 UINT8 mPanningSlideV; //!< Panning slide value. 00349 00350 UINT32 mMultiRetrigTicker; //!< Multi retrig ticker. 00351 UINT32 mTremorTicker; //!< Tremor ticker. 00352 00353 UINT32 mPeriod; //!< Period. 00354 UINT32 mOldPeriod; //!< Old line period. 00355 UINT32 mDestPeriod; //!< Current line period. 00356 UINT32 mBasePeriod; //!< Base period. 00357 00358 UINT8 mIsVibrato; //!< Vibrato flag. 00359 UINT8 mVibratoRate; //!< Vibrato rate. 00360 UINT8 mVibratoDepth; //!< Vibrato depth. 00361 UINT8 mVibratoPointer; //!< Vibrato pointer. 00362 UINT8 mVibratoWaveform; //!< Vibrato waveform. 00363 00364 UINT8 mTremoloRate; //!< Tremolo rate. 00365 UINT8 mTremoloDepth; //!< Tremolo depth. 00366 UINT8 mTremoloPointer; //!< Tremolo pointer. 00367 UINT8 mTremoloWaveform; //!< Tremolo waveform. 00368 }; 00369 00370 00371 #endif // !XFUXMPLAYER_INTERNAL_H_INCLUDED
![]() | ||||
![]() |
Confidential Copyright © 2002-2003 Fathammer | with doxygen by Dimitri van Heesch |