#ifndef _MIDI_SYNTH_FILE_H #define _MIDI_SYNTH_FILE_H #include #include #include typedef void (*synth_file_hook)(int32 arg); class BMidiSynthFile : public BMidiSynth { public: BMidiSynthFile(); ~BMidiSynthFile(); status_t LoadFile(const entry_ref* midi_entry_ref); void UnloadFile(void); virtual status_t Start(void); virtual void Stop(void); void Fade(void); void Pause(void); void Resume(void); /* get ticks in microseconds of length of song */ int32 Duration(void) const; /* set the current playback position of song in microseconds */ int32 Position(int32 ticks) const; /* get the current playback position of a song in microseconds */ int32 Seek(); /* get the patches required to play this song */ status_t GetPatches(int16* pArray768, int16* pReturnedCount) const; /* Set a call back when song is done */ void SetFileHook(synth_file_hook pSongHook, int32 arg); /* poll to see if song is done */ bool IsFinished(void) const; /* set song master tempo. (1.0 uses songs encoded tempo, 2.0 will play */ /* song twice as fast, and 0.5 will play song half as fast */ void ScaleTempoBy(double tempoFactor); /* sets tempo in beats per minute */ void SetTempo(int32 newTempoBPM); /* returns tempo in beats per minute */ int32 Tempo(void) const; /* pass true to loop song, false to not loop */ void EnableLooping(bool loop); /* Mute and unmute tracks (0 to 64) */ void MuteTrack(int16 track, bool do_mute); void GetMuteMap(char* pTracks) const; void SoloTrack(int16 track, bool do_solo); void GetSoloMap(char* pTracks) const; private: virtual void _ReservedMidiSynthFile1(); virtual void _ReservedMidiSynthFile2(); virtual void _ReservedMidiSynthFile3(); friend class BSynth; uint32 _reserved[4]; }; #endif // _MIDI_SYNTH_FILE