annotate Plugins/Input/console/Vgm_Emu.h @ 108:cde5ca21ddc3 trunk

[svn] Improved latency on the decode loop.
author nenolod
date Wed, 02 Nov 2005 21:45:23 -0800
parents 252843aac42f
children 0b9507985f0d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
90
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
1
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
2 // Sega Master System VGM-format game music file emulator (PSG chip only)
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
3
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
4 // Game_Music_Emu 0.2.4. Copyright (C) 2003-2005 Shay Green. GNU LGPL license.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
5
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
6 #ifndef VGM_EMU_H
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
7 #define VGM_EMU_H
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
8
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
9 #include "Classic_Emu.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
10 #include "Sms_Apu.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
11
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
12 class Vgm_Emu : public Classic_Emu {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
13 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
14 // Set internal gain, where 1.0 results in almost no clamping. Default gain
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
15 // roughly matches volume of other emulators.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
16 Vgm_Emu( double gain = 1.0 );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
17 ~Vgm_Emu();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
18
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
19 struct header_t {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
20 char tag [4];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
21 byte data_size [4];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
22 byte vers [4];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
23 byte psg_rate [4];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
24 byte fm_rate [4];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
25 byte g3d_offset [4];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
26 byte sample_count [4];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
27 byte loop_offset [4];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
28 byte loop_duration [4];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
29 byte frame_rate [4];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
30 char unused [0x18];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
31
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
32 enum { track_count = 1 }; // one track per file
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
33
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
34 // no text fields
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
35 enum { game = 0 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
36 enum { song = 0 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
37 enum { author = 0 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
38 enum { copyright = 0 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
39 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
40 BOOST_STATIC_ASSERT( sizeof (header_t) == 64 );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
41
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
42 // Load VGM, given its header and reader for remaining data
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
43 blargg_err_t load( const header_t&, Emu_Reader& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
44
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
45 // Determine length of track, in seconds (0 if track is endless).
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
46 // Optionally returns pointer and size of data past end of sequence data
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
47 // (i.e. any tagging information).
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
48 int track_length( const byte** end_out = NULL, int* remain_out = NULL ) const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
49
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
50 blargg_err_t start_track( int );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
51 const char** voice_names() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
52
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
53
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
54 // End of public interface
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
55 protected:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
56 void set_voice( int, Blip_Buffer*, Blip_Buffer*, Blip_Buffer* );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
57 void update_eq( blip_eq_t const& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
58 blip_time_t run( int, bool* );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
59 private:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
60 byte* data;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
61 const byte* pos;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
62 const byte* end;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
63 const byte* loop_begin;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
64 long loop_duration;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
65 long loop_remain;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
66 long time_factor;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
67 int delay;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
68 Sms_Apu apu;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
69
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
70 sms_time_t clocks_from_samples( int ) const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
71 void unload();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
72 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
73
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
74 #endif
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
75