annotate Plugins/Input/console/Spc_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 8fc500c08b61
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 // Super Nintendo (SNES) SPC music file emulator
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) 2004 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 SPC_EMU_H
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
7 #define SPC_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 "Fir_Resampler.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
10 #include "Music_Emu.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
11 #include "Snes_Spc.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
12
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
13 class Spc_Emu : public Music_Emu {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
14 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
15 Spc_Emu();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
16 ~Spc_Emu();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
17
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
18 // The Super Nintendo hardware samples at 32kHz
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
19 enum { native_sample_rate = 32000 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
20
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
21 // Initialize emulator with given sample rate and gain. A sample rate different than
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
22 // the native 32kHz results in internal resampling to the desired rate. A gain of 1.0
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
23 // results in almost no clamping. Default gain roughly matches volume of other emulators.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
24 blargg_err_t init( long sample_rate, double gain = 1.4 );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
25
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
26 struct header_t {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
27 char tag [35];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
28 byte format;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
29 byte version;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
30 byte pc [2];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
31 byte a, x, y, psw, sp;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
32 byte unused [2];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
33 char song [32];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
34 char game [32];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
35 char dumper [16];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
36 char comment [32];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
37 byte date [11];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
38 char len_secs [3];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
39 byte fade_msec [5];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
40 char author [32];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
41 byte mute_mask;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
42 byte emulator;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
43 byte unused2 [45];
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 enum { copyright = 0 }; // no copyright field
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
46 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
47
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
48 // Load SPC, given its header and reader for remaining data
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
49 blargg_err_t load( const header_t&, Emu_Reader& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
50
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
51 void mute_voices( int );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
52 blargg_err_t start_track( int );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
53 blargg_err_t play( long count, sample_t* );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
54 blargg_err_t skip( long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
55 const char** voice_names() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
56
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
57
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
58 // End of public interface
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 Snes_Spc apu;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
61 Fir_Resampler resampler;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
62 double resample_ratio;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
63 bool use_resampler;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
64
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
65 struct spc_file_t {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
66 header_t header;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
67 char data [0x10080];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
68 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
69 BOOST_STATIC_ASSERT( sizeof (spc_file_t) == 0x10180 );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
70
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
71 spc_file_t file;
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 inline void Spc_Emu::mute_voices( int m ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
75 apu.mute_voices( m );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
76 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
77
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
78 #endif
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
79