LMMS
Loading...
Searching...
No Matches
Gym_Emu.h
Go to the documentation of this file.
1// Sega Genesis/Mega Drive GYM music file emulator
2// Includes with PCM timing recovery to improve sample quality.
3
4// Game_Music_Emu https://bitbucket.org/mpyne/game-music-emu/
5#ifndef GYM_EMU_H
6#define GYM_EMU_H
7
8#include "Dual_Resampler.h"
9#include "Ym2612_Emu.h"
10#include "Music_Emu.h"
11#include "Sms_Apu.h"
12
13class Gym_Emu : public Music_Emu, private Dual_Resampler {
14public:
15 // GYM file header
16 enum { header_size = 428 };
17 struct header_t
18 {
19 char tag [4];
20 char song [32];
21 char game [32];
22 char copyright [32];
23 char emulator [32];
24 char dumper [32];
25 char comment [256];
26 byte loop_start [4]; // in 1/60 seconds, 0 if not looped
27 byte packed [4];
28 };
29
30 // Header for currently loaded file
31 header_t const& header() const { return header_; }
32
33 static gme_type_t static_type() { return gme_gym_type; }
34
35public:
36 // deprecated
37 using Music_Emu::load;
38 blargg_err_t load( header_t const& h, Data_Reader& in ) // use Remaining_Reader
39 { return load_remaining_( &h, sizeof h, in ); }
40 enum { gym_rate = 60 };
41 long track_length() const; // use track_info()
42
43public:
44 Gym_Emu();
45 ~Gym_Emu();
46protected:
47 blargg_err_t load_mem_( byte const*, long );
48 blargg_err_t track_info_( track_info_t*, int track ) const;
49 blargg_err_t set_sample_rate_( long sample_rate );
50 blargg_err_t start_track_( int );
51 blargg_err_t play_( long count, sample_t* );
52 void mute_voices_( int );
53 void set_tempo_( double );
54 int play_frame( blip_time_t blip_time, int sample_count, sample_t* buf );
55private:
56 // sequence data begin, loop begin, current position, end
57 const byte* data;
58 const byte* loop_begin;
59 const byte* pos;
60 const byte* data_end;
61 blargg_long loop_remain; // frames remaining until loop beginning has been located
64 blargg_long clocks_per_frame;
65 void parse_frame();
66
67 // dac (pcm)
72 void run_dac( int );
73
74 // sound
79 byte dac_buf [1024];
80};
81
82#endif
blip_long blip_time_t
Definition Blip_Buffer.h:17
LADSPA_Data sample_t
Definition basics.h:100
Definition Blip_Buffer.h:23
Definition Blip_Buffer.h:191
Definition Data_Reader.h:10
Dual_Resampler()
Definition Dual_Resampler.cpp:23
header_t header_
Definition Gym_Emu.h:62
double fm_sample_rate
Definition Gym_Emu.h:63
@ gym_rate
Definition Gym_Emu.h:40
blargg_err_t set_sample_rate_(long sample_rate)
Definition Gym_Emu.cpp:169
bool dac_enabled
Definition Gym_Emu.h:70
void set_tempo_(double)
Definition Gym_Emu.cpp:188
const byte * data_end
Definition Gym_Emu.h:60
void parse_frame()
Definition Gym_Emu.cpp:300
long track_length() const
Definition Gym_Emu.cpp:111
static gme_type_t static_type()
Definition Gym_Emu.h:33
bool dac_muted
Definition Gym_Emu.h:71
Blip_Synth< blip_med_quality, 1 > dac_synth
Definition Gym_Emu.h:77
blargg_err_t track_info_(track_info_t *, int track) const
Definition Gym_Emu.cpp:81
blargg_err_t play_(long count, sample_t *)
Definition Gym_Emu.cpp:376
@ header_size
Definition Gym_Emu.h:16
header_t const & header() const
Definition Gym_Emu.h:31
byte dac_buf[1024]
Definition Gym_Emu.h:79
int prev_dac_count
Definition Gym_Emu.h:69
Blip_Buffer blip_buf
Definition Gym_Emu.h:75
blargg_err_t load(header_t const &h, Data_Reader &in)
Definition Gym_Emu.h:38
void mute_voices_(int)
Definition Gym_Emu.cpp:203
int play_frame(blip_time_t blip_time, int sample_count, sample_t *buf)
Definition Gym_Emu.cpp:363
const byte * loop_begin
Definition Gym_Emu.h:58
const byte * pos
Definition Gym_Emu.h:59
void run_dac(int)
Definition Gym_Emu.cpp:250
int dac_amp
Definition Gym_Emu.h:68
~Gym_Emu()
Definition Gym_Emu.cpp:41
Sms_Apu apu
Definition Gym_Emu.h:78
blargg_long loop_remain
Definition Gym_Emu.h:61
blargg_err_t start_track_(int)
Definition Gym_Emu.cpp:232
Gym_Emu()
Definition Gym_Emu.cpp:28
blargg_err_t load_mem_(byte const *, long)
Definition Gym_Emu.cpp:211
Ym2612_Emu fm
Definition Gym_Emu.h:76
const byte * data
Definition Gym_Emu.h:57
blargg_long clocks_per_frame
Definition Gym_Emu.h:64
Definition Sms_Apu.h:9
Definition Ym2612_Emu.h:9
const struct gme_type_t_ * gme_type_t
Definition gme.h:161
const gme_type_t gme_gym_type
Definition gme.h:167
float in
Definition lilv_test.c:1460
blargg_err_t load(Data_Reader &)
Definition Gme_File.cpp:93
blargg_err_t load_remaining_(void const *header, long header_size, Data_Reader &remaining)
Definition Gme_File.cpp:107
Definition Gym_Emu.h:18
char song[32]
Definition Gym_Emu.h:20
byte loop_start[4]
Definition Gym_Emu.h:26
char comment[256]
Definition Gym_Emu.h:25
char tag[4]
Definition Gym_Emu.h:19
char emulator[32]
Definition Gym_Emu.h:23
char copyright[32]
Definition Gym_Emu.h:22
byte packed[4]
Definition Gym_Emu.h:27
char dumper[32]
Definition Gym_Emu.h:24
char game[32]
Definition Gym_Emu.h:21
Music_Emu()
Definition Music_Emu.cpp:51
long sample_rate() const
Definition Music_Emu.h:217
blargg_vector< sample_t > buf
Definition Music_Emu.h:189
Definition Gme_File.h:28
uch h[RAND_HEAD_LEN]
Definition crypt.c:459
_WDL_CSTRING_PREFIX void INT_PTR count
Definition wdlcstring.h:263