BEAST/BSE - Better Audio System and Sound Engine  0.9.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
bsewave.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_WAVE_H__
3 #define __BSE_WAVE_H__
4 
5 #include <bse/bsesource.hh>
6 
7 G_BEGIN_DECLS
8 
9 /* --- BSE type macros --- */
10 #define BSE_TYPE_WAVE (BSE_TYPE_ID (BseWave))
11 #define BSE_WAVE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), BSE_TYPE_WAVE, BseWave))
12 #define BSE_WAVE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), BSE_TYPE_WAVE, BseWaveClass))
13 #define BSE_IS_WAVE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), BSE_TYPE_WAVE))
14 #define BSE_IS_WAVE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), BSE_TYPE_WAVE))
15 #define BSE_WAVE_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), BSE_TYPE_WAVE, BseWaveClass))
16 
17 struct BseWaveEntry {
18  GslWaveChunk *wchunk;
19  gfloat osc_freq;
20  gfloat velocity; /* 0..1 */
21 };
22 struct BseWaveIndex {
23  guint n_entries;
24  BseWaveEntry entries[1]; /* flexible array */
25 };
26 struct BseWave : BseSource {
27  /* requested BseModule indices */
28  guint request_count;
29  GSList *index_list;
30  guint index_dirty : 1;
31  /* locator */
32  guint locator_set : 1;
33  gchar *file_name;
34  gchar *wave_name;
35  /* wave data */
36  gchar **xinfos;
37  /* wave chunks */
38  guint n_wchunks;
39  SfiRing *wave_chunks; /* data=GslWaveChunk* */
40  SfiRing *open_handles; /* data=GslDataHandle* */
41 };
43 {};
44 
45 void bse_wave_clear (BseWave *wave);
46 BseErrorType bse_wave_load_wave_file (BseWave *wave,
47  const gchar *file_name,
48  const gchar *wave_name,
49  BseFreqArray *list_array,
50  BseFreqArray *skip_array,
51  gboolean rename_wave);
52 void bse_wave_add_chunk (BseWave *wave,
53  GslWaveChunk *wchunk);
54 GslWaveChunk* bse_wave_lookup_chunk (BseWave *wave,
55  gfloat mix_freq,
56  gfloat osc_freq,
57  gfloat velocity);
58 void bse_wave_remove_chunk (BseWave *wave,
59  GslWaveChunk *wchunk);
60 void bse_wave_request_index (BseWave *wave);
61 BseWaveIndex* bse_wave_get_index_for_modules (BseWave *wave);
62 void bse_wave_drop_index (BseWave *wave);
63 
64 /* BseWaveIndex is safe to use from BseModules (self-contained constant structure) */
65 GslWaveChunk* bse_wave_index_lookup_best (BseWaveIndex *windex,
66  gfloat osc_freq,
67  gfloat velocity);
68 
69 G_END_DECLS
70 
71 #endif /* __BSE_WAVE_H__ */
Definition: bsewave.hh:22
Definition: bsewave.hh:26
Definition: bsewave.hh:42
Definition: bsewave.hh:17
Definition: bsesource.hh:84
Definition: sfiring.hh:23
Definition: bsesource.hh:92