BEAST/BSE - Better Audio System and Sound Engine  0.9.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
gsldatahandle.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 __GSL_DATA_HANDLE_H__
3 #define __GSL_DATA_HANDLE_H__
4 
5 #include <bse/bseutils.hh>
6 
7 G_BEGIN_DECLS
8 
9 
10 /* --- macros --- */
11 #define GSL_DATA_HANDLE_OPENED(handle) (((GslDataHandle*) (handle))->open_count > 0)
12 #define GSL_DATA_HANDLE_READ_LINEAR(handle) (((GslDataHandle*) (handle))->vtable->coarse_seek != NULL)
13 
14 
15 /* --- typedefs & structures --- */
16 typedef struct {
17  guint n_channels;
18  int64 n_values;
19  gchar **xinfos;
20  guint bit_depth : 8;
21  guint needs_cache : 1;
22  gfloat mix_freq;
25 {
26  /* constant members */
27  GslDataHandleFuncs *vtable;
28  gchar *name;
29  /* common members */
30  Bse::Spinlock spinlock;
31  guint ref_count;
32  guint open_count;
33  /* opened data handle setup (open_count > 0) */
34  GslDataHandleSetup setup;
35 };
36 typedef void (*GslDataHandleRecurse) (GslDataHandle *data_handle,
37  gpointer data);
39 {
40  BseErrorType (*open) (GslDataHandle *data_handle,
41  GslDataHandleSetup *setup);
42  int64 (*read) (GslDataHandle *data_handle,
43  int64 voffset, /* in values */
44  int64 n_values,
45  gfloat *values);
46  void (*close) (GslDataHandle *data_handle);
47  GslDataHandle* (*get_source) (GslDataHandle *data_handle);
48  int64 (*get_state_length) (GslDataHandle *data_handle);
49  void (*destroy) (GslDataHandle *data_handle);
50 };
51 
52 
53 
54 /* --- standard functions --- */
55 GslDataHandle* gsl_data_handle_ref (GslDataHandle *dhandle);
56 void gsl_data_handle_unref (GslDataHandle *dhandle);
57 BseErrorType gsl_data_handle_open (GslDataHandle *dhandle);
58 void gsl_data_handle_close (GslDataHandle *dhandle);
59 int64 gsl_data_handle_length (GslDataHandle *data_handle);
60 #define gsl_data_handle_n_values( dh) \
61  gsl_data_handle_length (dh)
62 guint gsl_data_handle_n_channels (GslDataHandle *data_handle);
63 guint gsl_data_handle_bit_depth (GslDataHandle *data_handle);
64 gfloat gsl_data_handle_mix_freq (GslDataHandle *data_handle);
65 gfloat gsl_data_handle_osc_freq (GslDataHandle *data_handle);
66 gfloat gsl_data_handle_volume (GslDataHandle *data_handle);
67 gfloat gsl_data_handle_fine_tune (GslDataHandle *data_handle);
68 const gchar* gsl_data_handle_name (GslDataHandle *data_handle);
69 int64 gsl_data_handle_read (GslDataHandle *data_handle,
70  int64 value_offset,
71  int64 n_values,
72  gfloat *values);
73 int64 gsl_data_handle_get_state_length (GslDataHandle *dhandle);
74 GslDataHandle* gsl_data_handle_get_source (GslDataHandle *dhandle);
75 GslDataHandle* gsl_data_handle_new_scale (GslDataHandle *src_handle,
76  double factor);
77 GslDataHandle* gsl_data_handle_new_cut (GslDataHandle *src_handle,
78  int64 cut_offset,
79  int64 n_cut_values);
80 GslDataHandle* gsl_data_handle_new_crop (GslDataHandle *src_handle,
81  int64 n_head_cut,
82  int64 n_tail_cut);
83 GslDataHandle* gsl_data_handle_new_reverse (GslDataHandle *src_handle);
84 GslDataHandle* gsl_data_handle_new_insert (GslDataHandle *src_handle,
85  guint pasted_bit_depth,
86  int64 insertion_offset,
87  int64 n_paste_values,
88  const gfloat *paste_values,
89  void (*free) (gpointer values));
90 GslDataHandle* gsl_data_handle_new_mem (guint n_channels,
91  guint bit_depth,
92  gfloat mix_freq,
93  gfloat osc_freq,
94  int64 n_values,
95  const gfloat *values,
96  void (*free) (gpointer values));
97 GslDataHandle* gsl_data_handle_new_dcached (GslDataCache *dcache);
98 /* cheap and inefficient, testpurpose only */
99 GslDataHandle* gsl_data_handle_new_looped (GslDataHandle *src_handle,
100  int64 loop_first,
101  int64 loop_last);
102 
103 /* --- factor 2 resampling datahandles --- */
104 GslDataHandle* bse_data_handle_new_upsample2 (GslDataHandle *src_handle, // implemented in bsedatahandle-resample.cc
105  int precision_bits);
106 GslDataHandle* bse_data_handle_new_downsample2 (GslDataHandle *src_handle,
107  int precision_bits); // implemented in bsedatahandle-resample.cc
108 
109 GslDataHandle* bse_data_handle_new_fir_highpass (GslDataHandle *src_handle, // implemented in bsedatahandle-fir.cc
110  gdouble cutoff_freq,
111  guint order);
112 GslDataHandle* bse_data_handle_new_fir_lowpass (GslDataHandle *src_handle, // implemented in bsedatahandle-fir.cc
113  gdouble cutoff_freq,
114  guint order);
115 gdouble bse_data_handle_fir_response_db (GslDataHandle *fir_handle, // implemented in bsedatahandle-fir.cc
116  gdouble freq);
117 
118 /* --- xinfo handling --- */
119 GslDataHandle* gsl_data_handle_new_add_xinfos (GslDataHandle *src_handle,
120  gchar **xinfos);
121 GslDataHandle* gsl_data_handle_new_remove_xinfos (GslDataHandle *src_handle,
122  gchar **xinfos);
123 GslDataHandle* gsl_data_handle_new_clear_xinfos (GslDataHandle *src_handle);
124 
125 
126 /* --- wave specific functions --- */
127 typedef enum /*< skip >*/
128 {
129  GSL_WAVE_FORMAT_NONE,
130  GSL_WAVE_FORMAT_UNSIGNED_8,
131  GSL_WAVE_FORMAT_SIGNED_8,
132  GSL_WAVE_FORMAT_ALAW,
133  GSL_WAVE_FORMAT_ULAW,
134  GSL_WAVE_FORMAT_UNSIGNED_12,
135  GSL_WAVE_FORMAT_SIGNED_12,
136  GSL_WAVE_FORMAT_UNSIGNED_16,
137  GSL_WAVE_FORMAT_SIGNED_16,
138  GSL_WAVE_FORMAT_SIGNED_24,
139  GSL_WAVE_FORMAT_SIGNED_24_PAD4,
140  GSL_WAVE_FORMAT_SIGNED_32,
141  GSL_WAVE_FORMAT_FLOAT,
142  GSL_WAVE_FORMAT_LAST
143 } GslWaveFormatType;
144 #define GSL_WAVE_FORMAT_IS_LAW(f) ((f) == GSL_WAVE_FORMAT_ALAW || (f) == GSL_WAVE_FORMAT_ULAW)
145 
146 const gchar* gsl_wave_format_to_string (GslWaveFormatType format);
147 GslWaveFormatType gsl_wave_format_from_string (const gchar *string);
148 GslDataHandle* gsl_wave_handle_new (const gchar *file_name,
149  guint n_channels,
150  GslWaveFormatType format,
151  guint byte_order,
152  gfloat mix_freq,
153  gfloat osc_freq,
154  int64 byte_offset,
155  int64 n_values,
156  gchar **xinfos);
157 GslDataHandle* gsl_wave_handle_new_zoffset (const gchar *file_name,
158  guint n_channels,
159  GslWaveFormatType format,
160  guint byte_order,
161  gfloat mix_freq,
162  gfloat osc_freq,
163  int64 byte_offset,
164  int64 byte_size,
165  gchar **xinfos);
166 guint gsl_wave_format_bit_depth (GslWaveFormatType format);
167 guint gsl_wave_format_byte_width (GslWaveFormatType format);
168 
169 
170 /* --- data handle optimization jobs --- */
171 gboolean gsl_data_handle_needs_cache (GslDataHandle *data_handle);
172 
173 
174 /* --- auxillary functions --- */
175 gboolean gsl_data_handle_common_init (GslDataHandle *dhandle,
176  const gchar *file_name);
177 void gsl_data_handle_common_free (GslDataHandle *dhandle);
178 
179 
180 G_END_DECLS
181 
182 #endif /* __GSL_DATA_HANDLE_H__ */
GslDataHandle * bse_data_handle_new_fir_lowpass(GslDataHandle *src_handle, gdouble cutoff_freq, guint order)
Definition: bsedatahandle-fir.cc:393
int64 gsl_data_handle_get_state_length(GslDataHandle *dhandle)
Definition: gsldatahandle.cc:183
Definition: gsldatahandle.hh:24
GslDataHandle * gsl_data_handle_new_cut(GslDataHandle *src_handle, int64 cut_offset, int64 n_cut_values)
Definition: gsldatahandle.cc:974
Definition: gsldatahandle.hh:38
GslDataHandle * gsl_data_handle_new_crop(GslDataHandle *src_handle, int64 n_head_cut, int64 n_tail_cut)
Definition: gsldatahandle.cc:992
Definition: gsldatahandle.hh:16
GslDataHandle * bse_data_handle_new_fir_highpass(GslDataHandle *src_handle, gdouble cutoff_freq, guint order)
Definition: bsedatahandle-fir.cc:371
int64_t int64