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

# XFuXMPlayer.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 header file
    00006  *
    00007  * $Id: XFuXMPlayer.h,v 1.20 2003/10/06 11:26:47 toni Exp $
    00008  * $Date: 2003/10/06 11:26:47 $
    00009  * $Revision: 1.20 $
    00010  */
    00011
    00012 #ifndef XFUXMPLAYER_H_INCLUDED
    00013 #define XFUXMPLAYER_H_INCLUDED
    00014
    00015 #include <xfcore/XFcAudioStream.h>
    00016 #include <xfutil/XFuXMPlayer_internal.h>
    00017 #include <xfutil/XFuXMPlayerEventHandler.h>
    00018
    00019
    00020 template<class T> class XFcLinkedList;
    00021
    00022
    00023 class XFuXMPlayerEventHandlerSlot
    00024 {
    00025 public:
    00026     XFuXMPlayerEvent mEvent;
    00027     XFuXMPlayerEventHandler *mHandler;
    00028
    00029     INT operator != (const XFuXMPlayerEventHandlerSlot &aRef) const
    00030     {
    00031         return !(mHandler == aRef.mHandler);
    00032     }
    00033
    00034     INT operator == (const XFuXMPlayerEventHandlerSlot &aRef) const
    00035     {
    00036         return (mHandler == aRef.mHandler);
    00037     }
    00038 };
    00039
    00040
    00041 //! Plays XM music files.
    00042 class XFuXMPlayer : public XFcAudioStream
    00043 {
    00044 protected:
    00045     FLOAT32 mSamplingRate;              //!< Sampling rate.
    00046     UINT32 mFlags;                      //!< Format flags.
    00047     INT32 mTgtXor;                      //!< Signed/unsigned xor value.
    00048
    00049     XFuXMFormatHeader mXMHeader;        //!< XM file header.
    00050     XFuXMSong mSong;                    //!< Module.
    00051
    00052     XFuXMFormatPatternHeader *mXMPatternHeaders;    //!< XM pattern headers.
    00053     XFuXMPattern *mPatternData;                     //!< Pattern data.
    00054
    00055     XFuXMInstrument *mInstruments;      //!< Instruments.
    00056
    00057     XFuXMChannel *mChannels;            //!< Channels.
    00058
    00059     INT16 mSineWaveTable[XMFORMAT_SIZEOF_WAVEFORM];
    00060     INT16 mSquareWaveTable[XMFORMAT_SIZEOF_WAVEFORM];
    00061     INT16 mRampUpTable[XMFORMAT_SIZEOF_WAVEFORM];
    00062     INT16 mRampDownTable[XMFORMAT_SIZEOF_WAVEFORM];
    00063
    00064     UINT32 mPpoint;                     //!< Pattern data index.
    00065     INT16 mCurrentOrder;                //!< Order index.
    00066     INT16 mPatternNb;                   //!< Pattern index.
    00067     INT16 mCurrentRow;                  //!< Row index.
    00068     INT32 mSamplesPerTick;              //!< Amount of samples in one tick.
    00069     INT32 mSamplePointer;               //!< Counter.
    00070     FLOAT32 mTickRate;                  //!< Tick speed in Hz.
    00071     INT32 mRamp;
    00072
    00073     UINT8 mPatternDelayCounter;         //!< Pattern delay counter.
    00074     UINT8 mPatternDelayCounterTemp;     //!< Temporary pattern delay counter.
    00075     UINT8 mPatternDelaySkip;            //!< Flag for skipping pattern delay commands.
    00076
    00077     UINT8 mIsRead;                      //!< Flag indicating whether pattern data should be read.
    00078     UINT8 mJumpFlag;                    //!< Flag for pattern jump and pattern break commands.
    00079
    00080     UINT8 mCurrentTick;                 //!< Tick index (0..tempo-1).
    00081     UINT32 mTotalTicks;                 //!< Test tick counter.
    00082
    00083     REAL mVolumeRampDivOpt;             //!< For volume ramping.
    00084
    00085     //! List of event handlers interested in events of this player.
    00086     XFcLinkedList<XFuXMPlayerEventHandlerSlot> *mEventHandlers;
    00087
    00088
    00089     INT loadXM(const CHAR *aFilename, XFcFile *aTextout);
    00090
    00091
    00092     XFuXMFormatAtom getAtom();
    00093
    00094     void dumpSongParameters(XFcFile *aTextout);
    00095
    00096
    00097     UINT32 getPeriod(INT8 aNote, INT8 aFinetune);
    00098
    00099     UINT32 getSpeed(UINT32 aPeriod, FLOAT32 aSamplingRate);
    00100
    00101     void initChannel(XFuXMChannel &aCh);
    00102
    00103     void initSound(XFuXMChannel &aCh);
    00104
    00105
    00106     //! Notify handlers of events.
    00107     void notifyHandlers(XFuXMChannel &aCh);
    00108
    00109     void debugPrint(XFcFile *aTextout, char *aFmt, ...);
    00110
    00111
    00112     XFuXMPlayer(FLOAT32 aSamplingRate, UINT32 aFlags);
    00113
    00114 public:
    00115     //! Initializes the playhead to the beginning of a certain pattern.
    00116     void initSong(INT16 aStartOrder);
    00117
    00118     //! Returns the player's internal tick.
    00119     INT32 getTick();
    00120
    00121     //! Returns the current order being played.
    00122     INT16 getCurrentOrder();
    00123
    00124
    00125     //! Adds a new event handler to this player.
    00126     void addHandler(XFuXMPlayerEvent aEvent, XFuXMPlayerEventHandler *aHandler);
    00127
    00128     //! Removes a specific event handler from this player.
    00129     INT removeHandler(XFuXMPlayerEventHandler *aHandler);
    00130
    00131     //! Removes all event handlers from this player.
    00132     void removeHandlers();
    00133
    00134
    00135     virtual void stop();
    00136
    00137     virtual UINT32 stream(void *aBuffer, INT32 aTargetSamples, INT32 aOffset,
    00138                           INT32 aSamples);
    00139
    00140     //! Creates an XM-Player.
    00141     /*!
    00142      * Creates an XM-Player with the given module name, sampling rate and audio format.
    00143      */
    00144     static XFuXMPlayer * create(const CHAR *aFilename, FLOAT32 aSamplingRate,
    00145                                 UINT32 aFlags);
    00146
    00147     virtual ~XFuXMPlayer();
    00148 };
    00149
    00150
    00151 #endif // !XFUXMPLAYER_H_INCLUDED
    00152

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