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

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