BEAST/BSE - Better Audio System and Sound Engine  0.8.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
bseloader.hh
Go to the documentation of this file.
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__ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines