LMMS
Loading...
Searching...
No Matches
Gme_File.h
Go to the documentation of this file.
1// Common interface to game music file loading and information
2
3// Game_Music_Emu https://bitbucket.org/mpyne/game-music-emu/
4#ifndef GME_FILE_H
5#define GME_FILE_H
6
7#include "gme.h"
8#include "blargg_common.h"
9#include "Data_Reader.h"
10#include "M3u_Playlist.h"
11
12// Error returned if file is wrong type
13//extern const char gme_wrong_file_type []; // declared in gme.h
14
16{
17 const char* system; /* name of system this music file type is generally for */
18 int track_count; /* non-zero for formats with a fixed number of tracks */
19 Music_Emu* (*new_emu)(); /* Create new emulator for this type (useful in C++ only) */
20 Music_Emu* (*new_info)(); /* Create new info reader for this type */
21
22 /* internal */
23 const char* extension_;
24 int flags_;
25};
26
28{
30
31 /* times in milliseconds; -1 if unknown */
32 long length;
35
36 /* empty string if not available */
37 char system [256];
38 char game [256];
39 char song [256];
40 char author [256];
41 char copyright [256];
42 char comment [256];
43 char dumper [256];
44};
45enum { gme_max_field = 255 };
46
47struct Gme_File {
48public:
49// File loading
50
51 // Each loads game music data from a file and returns an error if
52 // file is wrong type or is seriously corrupt. They also set warning
53 // string for minor problems.
54
55 // Load from file on disk
56 blargg_err_t load_file( const char* path );
57
58 // Load from custom data source (see Data_Reader.h)
59 blargg_err_t load( Data_Reader& );
60
61 // Load from file already read into memory. Keeps pointer to data, so you
62 // must not free it until you're done with the file.
63 blargg_err_t load_mem( void const* data, long size );
64
65 // Load an m3u playlist. Must be done after loading main music file.
66 blargg_err_t load_m3u( const char* path );
67 blargg_err_t load_m3u( Data_Reader& in );
68
69 // Clears any loaded m3u playlist and any internal playlist that the music
70 // format supports (NSFE for example).
71 void clear_playlist();
72
73// Informational
74
75 // Type of emulator. For example if this returns gme_nsfe_type, this object
76 // is an NSFE emulator, and you can cast to an Nsfe_Emu* if necessary.
77 gme_type_t type() const;
78
79 // Most recent warning string, or NULL if none. Clears current warning after
80 // returning.
81 const char* warning();
82
83 // Number of tracks or 0 if no file has been loaded
84 int track_count() const;
85
86 // Get information for a track (length, name, author, etc.)
87 // See gme.h for definition of struct track_info_t.
88 blargg_err_t track_info( track_info_t* out, int track ) const;
89
90// User data/cleanup
91
92 // Set/get pointer to data you want to associate with this emulator.
93 // You can use this for whatever you want.
94 void set_user_data( void* p ) { user_data_ = p; }
95 void* user_data() const { return user_data_; }
96
97 // Register cleanup function to be called when deleting emulator, or NULL to
98 // clear it. Passes user_data to cleanup function.
100
101public:
102 // deprecated
103 int error_count() const; // use warning()
104public:
105 Gme_File();
106 virtual ~Gme_File();
107 BLARGG_DISABLE_NOTHROW
108 typedef uint8_t byte;
109protected:
110 // Services
112 void set_warning( const char* s ) { warning_ = s; }
113 void set_type( gme_type_t t ) { type_ = t; }
114 blargg_err_t load_remaining_( void const* header, long header_size, Data_Reader& remaining );
115
116 // Overridable
117 virtual void unload(); // called before loading file and if loading fails
118 virtual blargg_err_t load_( Data_Reader& ); // default loads then calls load_mem_()
119 virtual blargg_err_t load_mem_( byte const* data, long size ); // use data in memory
120 virtual blargg_err_t track_info_( track_info_t* out, int track ) const = 0;
121 virtual void pre_load();
122 virtual void post_load_();
123 virtual void clear_playlist_() { }
124
125public:
126 blargg_err_t remap_track_( int* track_io ) const; // need by Music_Emu
127private:
128 // noncopyable
131
135 const char* warning_;
140 blargg_vector<byte> file_data; // only if loaded into memory using default load
141
142 blargg_err_t load_m3u_( blargg_err_t );
143 blargg_err_t post_load( blargg_err_t err );
144public:
145 // track_info field copying
146 enum { max_field_ = 255 };
147 static void copy_field_( char* out, const char* in );
148 static void copy_field_( char* out, const char* in, int len );
149};
150
151Music_Emu* gme_new_( Music_Emu*, long sample_rate );
152
153#define GME_COPY_FIELD( in, out, name ) \
154 { Gme_File::copy_field_( out->name, in.name, sizeof in.name ); }
155
156#ifndef GME_FILE_READER
157 #ifdef HAVE_ZLIB_H
158 #define GME_FILE_READER Gzip_File_Reader
159 #else
160 #define GME_FILE_READER Std_File_Reader
161 #endif
162#elif defined (GME_FILE_READER_INCLUDE)
163 #include GME_FILE_READER_INCLUDE
164#endif
165
166inline gme_type_t Gme_File::type() const { return type_; }
167inline int Gme_File::error_count() const { return warning_ != 0; }
168inline int Gme_File::track_count() const { return track_count_; }
169
170inline const char* Gme_File::warning()
171{
172 const char* s = warning_;
173 warning_ = 0;
174 return s;
175}
176
177#endif
Music_Emu * gme_new_(Music_Emu *, long sample_rate)
@ gme_max_field
Definition Gme_File.h:45
Definition Data_Reader.h:10
Definition M3u_Playlist.h:10
struct huft * t
Definition inflate.c:943
unsigned s
Definition inflate.c:1555
const int header_size
Definition Wave_Writer.cpp:24
void(* gme_user_cleanup_t)(void *user_data)
Definition gme.h:259
const struct gme_type_t_ * gme_type_t
Definition gme.h:161
JSAMPIMAGE data
Definition jpeglib.h:945
float in
Definition lilv_test.c:1460
float out
Definition lilv_test.c:1461
unsigned char uint8_t
Definition mid.cpp:98
blargg_err_t load(Data_Reader &)
Definition Gme_File.cpp:93
blargg_err_t load_mem(void const *data, long size)
Definition Gme_File.cpp:87
virtual blargg_err_t load_mem_(byte const *data, long size)
Definition Gme_File.cpp:53
const char * warning()
Definition Gme_File.h:170
virtual ~Gme_File()
Definition Gme_File.cpp:47
void set_user_data(void *p)
Definition Gme_File.h:94
Gme_File()
Definition Gme_File.cpp:38
int track_count_
Definition Gme_File.h:133
int raw_track_count_
Definition Gme_File.h:134
int error_count() const
Definition Gme_File.h:167
void set_track_count(int n)
Definition Gme_File.h:111
gme_type_t type_
Definition Gme_File.h:132
blargg_err_t track_info(track_info_t *out, int track) const
Definition Gme_File.cpp:179
virtual blargg_err_t load_(Data_Reader &)
Definition Gme_File.cpp:60
blargg_err_t load_file(const char *path)
Definition Gme_File.cpp:99
void * user_data_
Definition Gme_File.h:136
int track_count() const
Definition Gme_File.h:168
M3u_Playlist playlist
Definition Gme_File.h:138
@ max_field_
Definition Gme_File.h:146
gme_user_cleanup_t user_cleanup_
Definition Gme_File.h:137
static void copy_field_(char *out, const char *in)
Definition Gme_File.cpp:149
Gme_File(const Gme_File &)
blargg_err_t load_remaining_(void const *header, long header_size, Data_Reader &remaining)
Definition Gme_File.cpp:107
blargg_err_t load_m3u(const char *path)
Definition M3u_Playlist.cpp:51
void set_warning(const char *s)
Definition Gme_File.h:112
char playlist_warning[64]
Definition Gme_File.h:139
Gme_File & operator=(const Gme_File &)
void * user_data() const
Definition Gme_File.h:95
virtual void pre_load()
Definition Gme_File.cpp:68
void set_type(gme_type_t t)
Definition Gme_File.h:113
blargg_err_t load_m3u_(blargg_err_t)
Definition M3u_Playlist.cpp:23
virtual void clear_playlist_()
Definition Gme_File.h:123
blargg_vector< byte > file_data
Definition Gme_File.h:140
const char * warning_
Definition Gme_File.h:135
blargg_err_t post_load(blargg_err_t err)
Definition Gme_File.cpp:73
blargg_err_t remap_track_(int *track_io) const
Definition Gme_File.cpp:154
virtual blargg_err_t track_info_(track_info_t *out, int track) const =0
virtual void post_load_()
Definition Gme_File.cpp:70
void clear_playlist()
Definition Gme_File.cpp:23
gme_type_t type() const
Definition Gme_File.h:166
void set_user_cleanup(gme_user_cleanup_t func)
Definition Gme_File.h:99
virtual void unload()
Definition Gme_File.cpp:30
BLARGG_DISABLE_NOTHROW typedef uint8_t byte
Definition Gme_File.h:108
Definition Music_Emu.h:10
Definition Gme_File.h:16
int track_count
Definition Gme_File.h:18
const char * extension_
Definition Gme_File.h:23
int flags_
Definition Gme_File.h:24
const char * system
Definition Gme_File.h:17
Definition Gme_File.h:28
long loop_length
Definition Gme_File.h:34
char song[256]
Definition Gme_File.h:39
long intro_length
Definition Gme_File.h:33
char copyright[256]
Definition Gme_File.h:41
char game[256]
Definition Gme_File.h:38
char author[256]
Definition Gme_File.h:40
long track_count
Definition Gme_File.h:29
char comment[256]
Definition Gme_File.h:42
long length
Definition Gme_File.h:32
char system[256]
Definition Gme_File.h:37
char dumper[256]
Definition Gme_File.h:43
int n
Definition crypt.c:458
uch * p
Definition crypt.c:594
ulg size
Definition extract.c:2350