BEAST - Free Software Audio Synthesizer and Tracker  0.10.0
bseloader.hh
Go to the documentation of this file.
1  // Licensed GNU LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl.html
2 #ifndef __BSE_LOADER_H__
3 #define __BSE_LOADER_H__
4 
5 #include <bse/bseutils.hh>
6 #include <bse/gslwavechunk.hh>
7 
8 G_BEGIN_DECLS
9 
10 /* --- structures --- */
12  guint n_waves;
13  struct Wave {
14  gchar *name;
15  } *waves;
16 
17  gchar **comments;
18 
19  /*< private >*/
20  gchar *file_name;
21  BseLoader *loader;
22  guint ref_count;
23 };
25 {
26  gchar *name;
27  guint n_chunks;
28  BseWaveChunkDsc *chunks;
29  guint n_channels;
30  gchar **xinfos;
31  /*< private >*/
32  BseWaveFileInfo *file_info;
33 };
35 {
36  gfloat osc_freq;
37  gfloat mix_freq;
38  gchar **xinfos;
39  /* loader-specific */
40  union {
41  guint uint;
42  gpointer ptr;
43  gfloat vfloat;
44  } loader_data[8];
45 };
46 
47 
48 /* --- functions --- */
49 BseWaveFileInfo* bse_wave_file_info_load (const gchar *file_name,
50  Bse::Error *error);
51 BseWaveFileInfo* bse_wave_file_info_ref (BseWaveFileInfo *wave_file_info);
52 void bse_wave_file_info_unref (BseWaveFileInfo *wave_file_info);
53 const gchar* bse_wave_file_info_loader (BseWaveFileInfo *fi);
54 BseWaveDsc* bse_wave_dsc_load (BseWaveFileInfo *wave_file_info,
55  guint nth_wave,
56  gboolean accept_empty,
57  Bse::Error *error);
58 void bse_wave_dsc_free (BseWaveDsc *wave_dsc);
59 GslDataHandle* bse_wave_handle_create (BseWaveDsc *wave_dsc,
60  guint nth_chunk,
61  Bse::Error *error);
62 GslWaveChunk* bse_wave_chunk_create (BseWaveDsc *wave_dsc,
63  guint nth_chunk,
64  Bse::Error *error);
65 
66 
67 /* --- loader impl --- */
68 typedef enum /*< skip >*/
69 {
70  BSE_LOADER_NO_FLAGS = 0,
71  BSE_LOADER_SKIP_PRECEEDING_NULLS = 1 << 0
72 } BseLoaderFlags;
73 struct BseLoader {
74  const gchar *name; /* format/loader name, e.g. "BseWave" or "WAVE audio, RIFF (little-endian)" */
75 
76  /* at least one of the
77  * following three must
78  * be non-NULL
79  */
80  const gchar **extensions; /* e.g.: "mp3", "ogg" or "bsewave" */
81  const gchar **mime_types; /* e.g.: "audio/x-mpg3" or "audio/x-wav" */
82  BseLoaderFlags flags;
83  const gchar **magic_specs; /* e.g.: "0 string RIFF\n8 string WAVE\n" or "0 string #BseWave1\n" */
84 
85  gint priority; /* -100=high, +100=low, 0=default */
86 
87  /*< private >*/
88  gpointer data;
89  BseWaveFileInfo* (*load_file_info) (gpointer data,
90  const gchar *file_name,
91  Bse::Error *error);
92  void (*free_file_info) (gpointer data,
93  BseWaveFileInfo *file_info);
94  BseWaveDsc* (*load_wave_dsc) (gpointer data,
95  BseWaveFileInfo *file_info,
96  guint nth_wave,
97  Bse::Error *error);
98  void (*free_wave_dsc) (gpointer data,
99  BseWaveDsc *wave_dsc);
100  GslDataHandle* (*create_chunk_handle) (gpointer data,
101  BseWaveDsc *wave_dsc,
102  guint nth_chunk,
103  Bse::Error *error);
104  BseLoader *next; /* must be NULL */
105 };
106 
107 void bse_loader_register (BseLoader *loader);
108 BseLoader* bse_loader_match (const gchar *file_name);
109 
110 G_END_DECLS
111 
112 #endif /* __BSE_LOADER_H__ */
Definition: bseloader.hh:24
Definition: bseloader.hh:73
Definition: bseloader.hh:34
Definition: bseloader.hh:13
Definition: bseloader.hh:11