LMMS
Loading...
Searching...
No Matches
Spc_Emu.h
Go to the documentation of this file.
1// Super Nintendo SPC music file emulator
2
3// Game_Music_Emu https://bitbucket.org/mpyne/game-music-emu/
4#ifndef SPC_EMU_H
5#define SPC_EMU_H
6
7#include "Fir_Resampler.h"
8#include "Music_Emu.h"
9#include "Snes_Spc.h"
10#include "Spc_Filter.h"
11
12class Spc_Emu : public Music_Emu {
13public:
14 // The Super Nintendo hardware samples at 32kHz. Other sample rates are
15 // handled by resampling the 32kHz output; emulation accuracy is not affected.
16 enum { native_sample_rate = 32000 };
17
18 // SPC file header
19 enum { header_size = 0x100 };
20 struct header_t
21 {
22 char tag [35];
23 byte format;
24 byte version;
25 byte pc [2];
26 byte a, x, y, psw, sp;
27 byte unused [2];
28 char song [32];
29 char game [32];
30 char dumper [16];
31 char comment [32];
32 byte date [11];
33 byte len_secs [3];
34 byte fade_msec [4];
35 char author [32]; // sometimes first char should be skipped (see official SPC spec)
38 byte unused2 [46];
39 };
40
41 // Header for currently loaded file
42 header_t const& header() const { return *(header_t const*) file_data; }
43
44 // Prevents channels and global volumes from being phase-negated
45 void disable_surround( bool disable = true );
46
47 static gme_type_t static_type() { return gme_spc_type; }
48
49public:
50 // deprecated
51 using Music_Emu::load;
52 blargg_err_t load( header_t const& h, Data_Reader& in ) // use Remaining_Reader
53 { return load_remaining_( &h, sizeof h, in ); }
54 byte const* trailer() const; // use track_info()
55 long trailer_size() const;
56
57public:
58 Spc_Emu();
59 ~Spc_Emu();
60protected:
61 blargg_err_t load_mem_( byte const*, long );
62 blargg_err_t track_info_( track_info_t*, int track ) const;
63 blargg_err_t set_sample_rate_( long );
64 blargg_err_t start_track_( int );
65 blargg_err_t play_( long, sample_t* );
66 blargg_err_t skip_( long );
67 void mute_voices_( int );
68 void set_tempo_( double );
69 void enable_accuracy_( bool );
70private:
71 byte const* file_data;
76
77 blargg_err_t play_and_filter( long count, sample_t out [] );
78};
79
80inline void Spc_Emu::disable_surround( bool b ) { apu.disable_surround( b ); }
81
82#endif
LADSPA_Data sample_t
Definition basics.h:100
Definition Data_Reader.h:10
Definition Fir_Resampler.h:80
blargg_err_t track_info_(track_info_t *, int track) const
Definition Spc_Emu.cpp:198
Spc_Emu()
Definition Spc_Emu.cpp:24
blargg_err_t play_and_filter(long count, sample_t out[])
Definition Spc_Emu.cpp:305
blargg_err_t load(header_t const &h, Data_Reader &in)
Definition Spc_Emu.h:52
static gme_type_t static_type()
Definition Spc_Emu.h:47
void set_tempo_(double)
Definition Spc_Emu.cpp:289
Fir_Resampler< 24 > resampler
Definition Spc_Emu.h:73
blargg_err_t start_track_(int)
Definition Spc_Emu.cpp:294
SPC_Filter filter
Definition Spc_Emu.h:74
blargg_err_t play_(long, sample_t *)
Definition Spc_Emu.cpp:334
Snes_Spc apu
Definition Spc_Emu.h:75
void mute_voices_(int)
Definition Spc_Emu.cpp:270
@ native_sample_rate
Definition Spc_Emu.h:16
void enable_accuracy_(bool)
Definition Spc_Emu.cpp:264
header_t const & header() const
Definition Spc_Emu.h:42
~Spc_Emu()
Definition Spc_Emu.cpp:36
byte const * trailer() const
Definition Spc_Emu.cpp:42
blargg_err_t skip_(long)
Definition Spc_Emu.cpp:312
blargg_err_t load_mem_(byte const *, long)
Definition Spc_Emu.cpp:276
@ header_size
Definition Spc_Emu.h:19
long trailer_size() const
Definition Spc_Emu.cpp:44
byte const * file_data
Definition Spc_Emu.h:71
long file_size
Definition Spc_Emu.h:72
void disable_surround(bool disable=true)
Definition Spc_Emu.h:80
blargg_err_t set_sample_rate_(long)
Definition Spc_Emu.cpp:252
const struct gme_type_t_ * gme_type_t
Definition gme.h:161
const gme_type_t gme_spc_type
Definition gme.h:173
float in
Definition lilv_test.c:1460
float out
Definition lilv_test.c:1461
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
Music_Emu()
Definition Music_Emu.cpp:51
short sample_t
Definition Music_Emu.h:27
Definition Spc_Filter.h:9
Definition Snes_Spc.h:12
Definition Spc_Emu.h:21
byte unused[2]
Definition Spc_Emu.h:27
byte unused2[46]
Definition Spc_Emu.h:38
byte mute_mask
Definition Spc_Emu.h:36
byte fade_msec[4]
Definition Spc_Emu.h:34
byte a
Definition Spc_Emu.h:26
byte pc[2]
Definition Spc_Emu.h:25
byte y
Definition Spc_Emu.h:26
byte len_secs[3]
Definition Spc_Emu.h:33
char author[32]
Definition Spc_Emu.h:35
byte x
Definition Spc_Emu.h:26
char song[32]
Definition Spc_Emu.h:28
char game[32]
Definition Spc_Emu.h:29
byte emulator
Definition Spc_Emu.h:37
byte date[11]
Definition Spc_Emu.h:32
byte version
Definition Spc_Emu.h:24
char dumper[16]
Definition Spc_Emu.h:30
byte format
Definition Spc_Emu.h:23
byte psw
Definition Spc_Emu.h:26
char comment[32]
Definition Spc_Emu.h:31
byte sp
Definition Spc_Emu.h:26
char tag[35]
Definition Spc_Emu.h:22
Definition Gme_File.h:28
uch h[RAND_HEAD_LEN]
Definition crypt.c:459
b
Definition crypt.c:628
_WDL_CSTRING_PREFIX void INT_PTR count
Definition wdlcstring.h:263