comparison Plugins/Input/console/Gym_Emu.h @ 493:c04dff121e1d trunk

[svn] hostile merge, phase 2: reimport based on new plugin code
author nenolod
date Tue, 24 Jan 2006 20:19:01 -0800
parents
children
comparison
equal deleted inserted replaced
492:ccb68bad47b2 493:c04dff121e1d
1
2 // Sega Genesis GYM music file emulator
3
4 // Game_Music_Emu 0.3.0
5
6 #ifndef GYM_EMU_H
7 #define GYM_EMU_H
8
9 #include "Dual_Resampler.h"
10 #include "Ym2612_Emu.h"
11 #include "Music_Emu.h"
12 #include "Sms_Apu.h"
13
14 class Gym_Emu : public Music_Emu, private Dual_Resampler {
15 public:
16
17 // GYM file header
18 struct header_t
19 {
20 char tag [4];
21 char song [32];
22 char game [32];
23 char copyright [32];
24 char emulator [32];
25 char dumper [32];
26 char comment [256];
27 byte loop_start [4]; // in 1/60 seconds, 0 if not looped
28 byte packed [4];
29
30 enum { track_count = 1 }; // one track per file
31 enum { author = 0 }; // no author field
32 };
33 BOOST_STATIC_ASSERT( sizeof (header_t) == 428 );
34
35 // Load GYM data
36 blargg_err_t load( Data_Reader& );
37
38 // Load GYM file using already-loaded header and remaining data
39 blargg_err_t load( header_t const&, Data_Reader& );
40 blargg_err_t load( void const* data, long size ); // keeps pointer to data
41
42 // Header for currently loaded GYM (cleared to zero if GYM lacks header)
43 header_t const& header() const { return header_; }
44
45 // Length of track in 1/60 seconds
46 enum { gym_rate = 60 }; // GYM time units (frames) per second
47 long track_length() const;
48
49 public:
50 typedef Music_Emu::sample_t sample_t;
51 Gym_Emu();
52 ~Gym_Emu();
53 blargg_err_t set_sample_rate( long sample_rate );
54 void mute_voices( int );
55 void start_track( int );
56 void play( long count, sample_t* );
57 const char** voice_names() const;
58 void skip( long count );
59 public:
60 // deprecated
61 blargg_err_t init( long r, double gain = 1.5, double oversample = 5 / 3.0 )
62 {
63 return set_sample_rate( r );
64 }
65 protected:
66 int play_frame( blip_time_t blip_time, int sample_count, sample_t* buf );
67 private:
68 // sequence data begin, loop begin, current position, end
69 const byte* data;
70 const byte* loop_begin;
71 const byte* pos;
72 const byte* data_end;
73 long loop_remain; // frames remaining until loop beginning has been located
74 blargg_vector<byte> mem;
75 header_t header_;
76 blargg_err_t load_( const void* file, long data_offset, long file_size );
77 void unload();
78 void parse_frame();
79
80 // dac (pcm)
81 int dac_amp;
82 int prev_dac_count;
83 bool dac_enabled;
84 bool dac_muted;
85 void run_dac( int );
86
87 // sound
88 Blip_Buffer blip_buf;
89 Ym2612_Emu fm;
90 Blip_Synth<blip_med_quality,1> dac_synth;
91 Sms_Apu apu;
92 byte dac_buf [1024];
93 };
94
95 #endif
96