BEAST/BSE - Better Audio System and Sound Engine
0.8.2
|
00001 // Licensed GNU LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl.html 00002 #ifndef __BSE_LOADER_H__ 00003 #define __BSE_LOADER_H__ 00004 00005 #include <bse/bseutils.hh> 00006 #include <bse/gslwavechunk.hh> 00007 00008 G_BEGIN_DECLS 00009 00010 /* --- structures --- */ 00011 struct BseWaveFileInfo { 00012 guint n_waves; 00013 struct Wave { 00014 gchar *name; 00015 } *waves; 00016 00017 gchar **comments; 00018 00019 /*< private >*/ 00020 gchar *file_name; 00021 BseLoader *loader; 00022 guint ref_count; 00023 }; 00024 struct _BseWaveDsc 00025 { 00026 gchar *name; 00027 guint n_chunks; 00028 BseWaveChunkDsc *chunks; 00029 guint n_channels; 00030 gchar **xinfos; 00031 /*< private >*/ 00032 BseWaveFileInfo *file_info; 00033 }; 00034 struct _BseWaveChunkDsc 00035 { 00036 gfloat osc_freq; 00037 gfloat mix_freq; 00038 gchar **xinfos; 00039 /* loader-specific */ 00040 union { 00041 guint uint; 00042 gpointer ptr; 00043 gfloat vfloat; 00044 } loader_data[8]; 00045 }; 00046 00047 00048 /* --- functions --- */ 00049 BseWaveFileInfo* bse_wave_file_info_load (const gchar *file_name, 00050 BseErrorType *error); 00051 BseWaveFileInfo* bse_wave_file_info_ref (BseWaveFileInfo *wave_file_info); 00052 void bse_wave_file_info_unref (BseWaveFileInfo *wave_file_info); 00053 const gchar* bse_wave_file_info_loader (BseWaveFileInfo *fi); 00054 BseWaveDsc* bse_wave_dsc_load (BseWaveFileInfo *wave_file_info, 00055 guint nth_wave, 00056 gboolean accept_empty, 00057 BseErrorType *error); 00058 void bse_wave_dsc_free (BseWaveDsc *wave_dsc); 00059 GslDataHandle* bse_wave_handle_create (BseWaveDsc *wave_dsc, 00060 guint nth_chunk, 00061 BseErrorType *error); 00062 GslWaveChunk* bse_wave_chunk_create (BseWaveDsc *wave_dsc, 00063 guint nth_chunk, 00064 BseErrorType *error); 00065 00066 00067 /* --- loader impl --- */ 00068 typedef enum /*< skip >*/ 00069 { 00070 BSE_LOADER_NO_FLAGS = 0, 00071 BSE_LOADER_SKIP_PRECEEDING_NULLS = 1 << 0 00072 } BseLoaderFlags; 00073 struct BseLoader { 00074 const gchar *name; /* format/loader name, e.g. "BseWave" or "WAVE audio, RIFF (little-endian)" */ 00075 00076 /* at least one of the 00077 * following three must 00078 * be non-NULL 00079 */ 00080 const gchar **extensions; /* e.g.: "mp3", "ogg" or "bsewave" */ 00081 const gchar **mime_types; /* e.g.: "audio/x-mpg3" or "audio/x-wav" */ 00082 BseLoaderFlags flags; 00083 const gchar **magic_specs; /* e.g.: "0 string RIFF\n8 string WAVE\n" or "0 string #BseWave1\n" */ 00084 00085 gint priority; /* -100=high, +100=low, 0=default */ 00086 00087 /*< private >*/ 00088 gpointer data; 00089 BseWaveFileInfo* (*load_file_info) (gpointer data, 00090 const gchar *file_name, 00091 BseErrorType *error); 00092 void (*free_file_info) (gpointer data, 00093 BseWaveFileInfo *file_info); 00094 BseWaveDsc* (*load_wave_dsc) (gpointer data, 00095 BseWaveFileInfo *file_info, 00096 guint nth_wave, 00097 BseErrorType *error); 00098 void (*free_wave_dsc) (gpointer data, 00099 BseWaveDsc *wave_dsc); 00100 GslDataHandle* (*create_chunk_handle) (gpointer data, 00101 BseWaveDsc *wave_dsc, 00102 guint nth_chunk, 00103 BseErrorType *error); 00104 BseLoader *next; /* must be NULL */ 00105 }; 00106 00107 void bse_loader_register (BseLoader *loader); 00108 BseLoader* bse_loader_match (const gchar *file_name); 00109 00110 G_END_DECLS 00111 00112 #endif /* __BSE_LOADER_H__ */