diff src/console/Gym_Emu.h @ 316:fb513e10174e trunk

[svn] - merge libconsole-blargg into mainline libconsole: + obsoletes plugins-ugly:sapplug
author nenolod
date Thu, 30 Nov 2006 19:54:33 -0800
parents 3da1b8942b8b
children 986f098da058
line wrap: on
line diff
--- a/src/console/Gym_Emu.h	Wed Nov 29 14:42:11 2006 -0800
+++ b/src/console/Gym_Emu.h	Thu Nov 30 19:54:33 2006 -0800
@@ -1,8 +1,7 @@
-
-// Sega Genesis GYM music file emulator
+// Sega Genesis/Mega Drive GYM music file emulator
+// Includes with PCM timing recovery to improve sample quality.
 
-// Game_Music_Emu 0.3.0
-
+// Game_Music_Emu 0.5.1
 #ifndef GYM_EMU_H
 #define GYM_EMU_H
 
@@ -13,7 +12,6 @@
 
 class Gym_Emu : public Music_Emu, private Dual_Resampler {
 public:
-	
 	// GYM file header
 	struct header_t
 	{
@@ -26,43 +24,33 @@
 	    char comment [256];
 	    byte loop_start [4]; // in 1/60 seconds, 0 if not looped
 	    byte packed [4];
-	    
-	    enum { track_count = 1 }; // one track per file
-		enum { author = 0 }; // no author field
 	};
 	BOOST_STATIC_ASSERT( sizeof (header_t) == 428 );
 	
-	// Load GYM data
-	blargg_err_t load( Data_Reader& );
-	
-	// Load GYM file using already-loaded header and remaining data
-	blargg_err_t load( header_t const&, Data_Reader& );
-	blargg_err_t load( void const* data, long size ); // keeps pointer to data
-	
-	// Header for currently loaded GYM (cleared to zero if GYM lacks header)
+	// Header for currently loaded file
 	header_t const& header() const { return header_; }
 	
-	// Length of track in 1/60 seconds
-	enum { gym_rate = 60 }; // GYM time units (frames) per second
-	long track_length() const;
+	static gme_type_t static_type() { return gme_gym_type; }
+	
+public:
+	// deprecated
+	Music_Emu::load;
+	blargg_err_t load( header_t const& h, Data_Reader& in ) // use Remaining_Reader
+			{ return load_remaining_( &h, sizeof h, in ); }
+	enum { gym_rate = 60 }; 
+	long track_length() const; // use track_info()
 
 public:
-	typedef Music_Emu::sample_t sample_t;
 	Gym_Emu();
 	~Gym_Emu();
-	blargg_err_t set_sample_rate( long sample_rate );
-	void mute_voices( int );
-	void start_track( int );
-	void play( long count, sample_t* );
-	const char** voice_names() const;
-	void skip( long count );
-public:
-	// deprecated
-	blargg_err_t init( long r, double gain = 1.5, double oversample = 5 / 3.0 )
-	{
-		return set_sample_rate( r );
-	}
 protected:
+	blargg_err_t load_mem_( byte const*, long );
+	blargg_err_t track_info_( track_info_t*, int track ) const;
+	blargg_err_t set_sample_rate_( long sample_rate );
+	blargg_err_t start_track_( int );
+	blargg_err_t play_( long count, sample_t* );
+	void mute_voices_( int );
+	void set_tempo_( double );
 	int play_frame( blip_time_t blip_time, int sample_count, sample_t* buf );
 private:
 	// sequence data begin, loop begin, current position, end
@@ -70,11 +58,10 @@
 	const byte* loop_begin;
 	const byte* pos;
 	const byte* data_end;
-	long loop_remain; // frames remaining until loop beginning has been located
-	blargg_vector<byte> mem;
+	blargg_long loop_remain; // frames remaining until loop beginning has been located
 	header_t header_;
-	blargg_err_t load_( const void* file, long data_offset, long file_size );
-	void unload();
+	double fm_sample_rate;
+	blargg_long clocks_per_frame;
 	void parse_frame();
 	
 	// dac (pcm)
@@ -93,4 +80,3 @@
 };
 
 #endif
-