47    class SeqPlayer : 
public BasicPlayer,
 
   65            SETUP_ERR_CANNOT_ALLOCATE_TRACK,
 
   86        typedef void SeqUserprocCallback(u16 procId,
 
  100        virtual void Pause(
bool flag);
 
  101        virtual bool IsActive()
 const { 
return mActiveFlag; }
 
  102        virtual bool IsStarted()
 const { 
return mStartedFlag; }
 
  103        virtual bool IsPause()
 const { 
return mPauseFlag; }
 
  106        virtual void InvalidateData(
void const *start, 
void const *end);
 
  107        virtual void InvalidateWaveData(
void const *, 
void const *) {}
 
  113        virtual void ChannelCallback(Channel *channel ATTR_UNUSED) {}
 
  116        virtual void OnUpdateFrameSoundThread() { Update(); }
 
  117        virtual void OnShutdownSoundThread() { Stop(); }
 
  120        SetupResult Setup(SeqTrackAllocator *trackAllocator, ulong allocTracks,
 
  121                          int voiceOutCount, NoteOnCallback *callback);
 
  123        void Skip(OffsetType offsetType, 
int offset);
 
  126        bool IsReleasePriorityFix()
 const { 
return mReleasePriorityFixFlag; }
 
  127        f32 GetPanRange()
 const { 
return mPanRange; }
 
  128        int GetVoiceOutCount()
 const { 
return mVoiceOutCount; }
 
  130        SeqTrack *GetPlayerTrack(
int trackNo);
 
  131        s16 
volatile *GetVariablePtr(
int varNo);
 
  133        s16 GetLocalVariable(
int varNo) 
const;
 
  134        void SetLocalVariable(
int varNo, s16 value);
 
  135        static void SetGlobalVariable(
int varNo, s16 value);
 
  137        void SetTempoRatio(f32 tempo);
 
  138        void SetReleasePriorityFix(
bool fix);
 
  139        void SetChannelPriority(
int priority);
 
  140        void SetSeqUserprocCallback(SeqUserprocCallback *callback, 
void *arg);
 
  141        void SetPlayerTrack(
int trackNo, SeqTrack *track);
 
  143        f32 CalcTickPerMsec()
 const 
  145            return CalcTickPerMinute() / (60 * 1000);
 
  147        f32 CalcTickPerMinute()
 const 
  149            return mParserParam.timebase * mParserParam.tempo * mTempoRatio;
 
  152        ulong GetTickCounter()
 const {
 
  156        void SetSeqData(
void const *seqBase, s32 seqOffset);
 
  158        void CallSeqUserprocCallback(u16 procId, SeqTrack *track);
 
  159        Channel *NoteOn(
int bankNo, NoteOnInfo 
const ¬eOnInfo);
 
  161        void SetTrackMute(ulong trackFlags, SeqMute mute);
 
  162        void SetTrackSilence(ulong trackFlags, 
bool silence, 
int fadeFrames);
 
  163        void SetTrackVolume(ulong trackFlags, f32 volume);
 
  165        static void InitSeqPlayer();
 
  168        void InitParam(
int voiceOutCount, NoteOnCallback *callback);
 
  170        void UpdateChannelParam();
 
  172        void CloseTrack(
int trackNo);
 
  175        int ParseNextTick(
bool doNoteOn); 
 
  176        void UpdateTick(
int msec);
 
  179        template <
typename T>
 
  180        void SetTrackParam(ulong trackFlags, 
void (SeqTrack::*pSetter)(T), T param) {
 
  181            ut::AutoInterruptLock lock;
 
  183            for (
int i = 0; i < TRACK_NUM && trackFlags != 0;
 
  184                trackFlags >>= 1, i++) {
 
  186                if (trackFlags & 1) {
 
  187                    SeqTrack* pTrack = GetPlayerTrack(i);
 
  189                    if (pTrack != NULL) {
 
  190                        (pTrack->*pSetter)(param);
 
  196        template <
typename T, 
typename U>
 
  197        void SetTrackParam(ulong trackFlags, 
void (SeqTrack::*pSetter)(T, U), T param, U param2) {
 
  198            ut::AutoInterruptLock lock;
 
  200            for (
int i = 0; i < TRACK_NUM && trackFlags != 0;
 
  201                trackFlags >>= 1, i++) {
 
  203                if (trackFlags & 1) {
 
  204                    SeqTrack* pTrack = GetPlayerTrack(i);
 
  206                    if (pTrack != NULL) {
 
  207                        (pTrack->*pSetter)(param, param2);
 
  215        static int const MAX_SKIP_TICK_PER_FRAME = 768;
 
  216        static int const DEFAULT_TEMPO = 120;
 
  217        static int const DEFAULT_TIMEBASE = 48;
 
  218        static int const VARIABLE_DEFAULT_VALUE = -1;
 
  219        static int const TRACK_NUM_PER_PLAYER = 16;
 
  220        static int const GLOBAL_VARIABLE_NUM = 16;
 
  221        static int const PLAYER_VARIABLE_NUM = 16;
 
  223        static const int TRACK_NUM = 16;
 
  226        static s16 mGlobalVariable[GLOBAL_VARIABLE_NUM];
 
  236        bool                mReleasePriorityFixFlag;                        
 
  240        ulong                   mSkipTickCounter;                               
 
  241        f32                 mSkipTimeCounter;                               
 
  244        SeqTrackAllocator   *mSeqTrackAllocator;                            
 
  245        SeqUserprocCallback *mSeqUserprocCallback;                          
 
  246        void                *mSeqUserprocCallbackArg;                       
 
  247        SeqTrack            *mTracks[TRACK_NUM_PER_PLAYER];                 
 
  248        s16                 
volatile mLocalVariable[PLAYER_VARIABLE_NUM];