Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

XFuXMPlayer_internal.h

Go to the documentation of this file.
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

   
X-Forge Documentation
Confidential
Copyright © 2002-2003 Fathammer
   
Documentation generated
with doxygen
by Dimitri van Heesch