Mercurial > audlegacy
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 |