beeps 0.3.6 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/beeps/beeps.cpp +7 -0
  3. data/.doc/ext/beeps/high_pass.cpp +63 -0
  4. data/.doc/ext/beeps/low_pass.cpp +63 -0
  5. data/.doc/ext/beeps/native.cpp +8 -0
  6. data/.doc/ext/beeps/oscillator.cpp +87 -10
  7. data/.doc/ext/beeps/processor.cpp +14 -1
  8. data/.doc/ext/beeps/reverb.cpp +99 -0
  9. data/.doc/ext/beeps/signals.cpp +128 -0
  10. data/ChangeLog.md +24 -0
  11. data/Rakefile +1 -1
  12. data/VERSION +1 -1
  13. data/beeps.gemspec +2 -2
  14. data/ext/beeps/beeps.cpp +8 -0
  15. data/ext/beeps/high_pass.cpp +66 -0
  16. data/ext/beeps/low_pass.cpp +66 -0
  17. data/ext/beeps/native.cpp +8 -0
  18. data/ext/beeps/oscillator.cpp +95 -12
  19. data/ext/beeps/processor.cpp +15 -1
  20. data/ext/beeps/reverb.cpp +106 -0
  21. data/ext/beeps/signals.cpp +136 -0
  22. data/include/beeps/beeps.h +2 -2
  23. data/include/beeps/defs.h +3 -0
  24. data/include/beeps/filter.h +118 -17
  25. data/include/beeps/generator.h +50 -17
  26. data/include/beeps/processor.h +23 -6
  27. data/include/beeps/ruby/filter.h +33 -0
  28. data/include/beeps/ruby/signals.h +40 -0
  29. data/include/beeps/signals.h +1 -1
  30. data/lib/beeps/processor.rb +46 -1
  31. data/lib/beeps/signals.rb +19 -0
  32. data/lib/beeps.rb +1 -0
  33. data/src/analyser.cpp +34 -37
  34. data/src/beeps.cpp +7 -6
  35. data/src/envelope.cpp +60 -46
  36. data/src/file_in.cpp +6 -6
  37. data/src/gain.cpp +5 -5
  38. data/src/high_pass.cpp +57 -0
  39. data/src/low_pass.cpp +57 -0
  40. data/src/mic_in.cpp +16 -14
  41. data/src/mixer.cpp +38 -20
  42. data/src/oscillator.cpp +260 -168
  43. data/src/pitch_shift.cpp +6 -6
  44. data/src/processor.cpp +118 -11
  45. data/src/processor.h +8 -0
  46. data/src/reverb.cpp +124 -0
  47. data/src/sequencer.cpp +18 -14
  48. data/src/signals.cpp +264 -106
  49. data/src/signals.h +28 -89
  50. data/src/sound.cpp +28 -20
  51. data/src/time_stretch.cpp +6 -6
  52. data/src/win32/signals.cpp +8 -7
  53. data/src/x_pass.h +51 -0
  54. data/test/helper.rb +14 -0
  55. data/test/test_analyser.rb +26 -0
  56. data/test/test_envelope.rb +55 -0
  57. data/test/test_file_in.rb +22 -1
  58. data/test/test_gain.rb +28 -0
  59. data/test/test_high_pass.rb +41 -0
  60. data/test/test_low_pass.rb +41 -0
  61. data/test/test_mixer.rb +63 -0
  62. data/test/test_oscillator.rb +58 -0
  63. data/test/test_pitch_shift.rb +32 -0
  64. data/test/test_processor.rb +7 -0
  65. data/test/test_signals.rb +60 -0
  66. data/test/test_time_stretch.rb +36 -0
  67. metadata +48 -10
data/src/signals.cpp CHANGED
@@ -6,7 +6,6 @@
6
6
  #include <algorithm>
7
7
  #include <AudioFile.h>
8
8
  #include <CDSPResampler.h>
9
- #include "beeps/beeps.h"
10
9
  #include "beeps/exception.h"
11
10
 
12
11
 
@@ -14,6 +13,87 @@ namespace Beeps
14
13
  {
15
14
 
16
15
 
16
+ class Frames : public stk::StkFrames
17
+ {
18
+
19
+ typedef stk::StkFrames Super;
20
+
21
+ public:
22
+
23
+ Frames (
24
+ unsigned int nframes = 0,
25
+ unsigned int nchannels = 1,
26
+ double sample_rate = 0)
27
+ : Super(nframes, nchannels)
28
+ {
29
+ if (sample_rate == 0)
30
+ sample_rate = Beeps::sample_rate();
31
+
32
+ if (nframes <= 0)
33
+ argument_error(__FILE__, __LINE__);
34
+ if (nchannels <= 0)
35
+ argument_error(__FILE__, __LINE__);
36
+ if (sample_rate <= 0)
37
+ argument_error(__FILE__, __LINE__);
38
+
39
+ setDataRate(sample_rate);
40
+ }
41
+
42
+ Frames (const Frames& obj)
43
+ : Super(obj)
44
+ {
45
+ setDataRate(obj.dataRate());
46
+ }
47
+
48
+ void slice (uint start_, uint end_)
49
+ {
50
+ assert(!saved_data_);
51
+
52
+ size_t start = start_;
53
+ size_t end = end_;
54
+ if (start > nFrames_ || end > nFrames_)
55
+ argument_error(__FILE__, __LINE__);
56
+
57
+ saved_data_ = data_;
58
+ saved_nFrames_ = nFrames_;
59
+ saved_size_ = size_;
60
+ saved_bufferSize_ = bufferSize_;
61
+
62
+ data_ += start * nChannels_;
63
+ nFrames_ = end - start;
64
+ size_ = nFrames_ * nChannels_;
65
+ bufferSize_ = size_;
66
+ }
67
+
68
+ void unslice ()
69
+ {
70
+ assert(saved_data_);
71
+
72
+ data_ = saved_data_;
73
+ nFrames_ = saved_nFrames_;
74
+ size_ = saved_size_;
75
+ bufferSize_ = saved_bufferSize_;
76
+
77
+ saved_data_ = NULL;
78
+ saved_nFrames_ = 0;
79
+ saved_size_ = 0;
80
+ saved_bufferSize_ = 0;
81
+ }
82
+
83
+ const Sample* data () const
84
+ {
85
+ return data_;
86
+ }
87
+
88
+ private:
89
+
90
+ Sample* saved_data_ = NULL;
91
+
92
+ size_t saved_nFrames_ = 0, saved_size_ = 0, saved_bufferSize_ = 0;
93
+
94
+ };// Frames
95
+
96
+
17
97
  struct Signals::Data
18
98
  {
19
99
 
@@ -27,16 +107,9 @@ namespace Beeps
27
107
  Signals
28
108
  Signals_create (uint capacity, uint nchannels, double sample_rate)
29
109
  {
30
- if (capacity <= 0)
31
- argument_error(__FILE__, __LINE__);
32
- if (nchannels <= 0)
33
- argument_error(__FILE__, __LINE__);
34
-
35
- if (sample_rate <= 0) sample_rate = Beeps::sample_rate();
36
-
37
110
  Signals s;
38
- s.self->frames.reset(new Frames(capacity, nchannels));
39
- s.self->frames->setDataRate(sample_rate);
111
+ s.self->frames.reset(
112
+ new Frames(capacity * nchannels, nchannels, sample_rate));
40
113
  return s;
41
114
  }
42
115
 
@@ -47,25 +120,17 @@ namespace Beeps
47
120
  {
48
121
  if (!channels)
49
122
  argument_error(__FILE__, __LINE__);
50
- if (nsamples <= 0)
51
- argument_error(__FILE__, __LINE__);
52
- if (nchannels <= 0)
53
- argument_error(__FILE__, __LINE__);
54
-
55
- if (sample_rate <= 0) sample_rate = Beeps::sample_rate();
56
123
 
57
- Frames* frames = new Frames(nsamples, nchannels);
58
- frames->setDataRate(sample_rate);
124
+ Signals s = Signals_create(nsamples, nchannels, sample_rate);
125
+ s.self->nsamples = nsamples;
59
126
 
60
127
  for (uint channel = 0; channel < nchannels; ++channel)
61
128
  {
62
- for (uint sample = 0; sample < nsamples; ++sample)
63
- (*frames)(sample, channel) = channels[channel][sample];
129
+ Sample* p = Signals_at(&s, 0, channel);
130
+ for (uint i = 0; i < nsamples; ++i, p += nchannels)
131
+ *p = channels[channel][i];
64
132
  }
65
133
 
66
- Signals s;
67
- s.self->frames.reset(frames);
68
- s.self->nsamples = nsamples;
69
134
  return s;
70
135
  }
71
136
 
@@ -92,58 +157,112 @@ namespace Beeps
92
157
  signals->self->frames->resize(capacity, signals->nchannels());
93
158
  }
94
159
 
160
+ uint
161
+ Signals_tick (Signals* signals, std::function<void(stk::StkFrames*)> fun)
162
+ {
163
+ if (!signals)
164
+ argument_error(__FILE__, __LINE__);
165
+ if (!*signals)
166
+ argument_error(__FILE__, __LINE__);
167
+
168
+ fun(signals->self->frames.get());
169
+ Signals_set_nsamples(signals, signals->capacity());
170
+ return signals->nsamples();
171
+ }
172
+
173
+ uint
174
+ Signals_tick (
175
+ Signals* output, const Signals& input,
176
+ std::function<void(stk::StkFrames*, const stk::StkFrames&)> fun)
177
+ {
178
+ if (!output)
179
+ argument_error(__FILE__, __LINE__);
180
+ if (!*output)
181
+ argument_error(__FILE__, __LINE__);
182
+ if (!input)
183
+ argument_error(__FILE__, __LINE__);
184
+
185
+ Signals_clear(output, input.nsamples());
186
+ Signals_set_nsamples(output, output->capacity());
187
+
188
+ fun(output->self->frames.get(), *input.self->frames);
189
+ return output->nsamples();
190
+ }
191
+
192
+ uint
193
+ Signals_tick (
194
+ Signals* signals, uint start, uint end,
195
+ std::function<void(stk::StkFrames*)> fun)
196
+ {
197
+ if (!signals)
198
+ argument_error(__FILE__, __LINE__);
199
+ if (!*signals)
200
+ argument_error(__FILE__, __LINE__);
201
+ if (start > end)
202
+ argument_error(__FILE__, __LINE__);
203
+
204
+ if (start == 0 && end == signals->capacity())
205
+ return Signals_tick(signals, fun);
206
+
207
+ signals->self->frames->slice(start, end);
208
+ fun(signals->self->frames.get());
209
+ signals->self->frames->unslice();
210
+ Signals_set_nsamples(signals, end);
211
+ return end;
212
+ }
213
+
95
214
  void
96
- Signals_resize (Signals* signals, uint nsamples, Float value)
215
+ Signals_fill (Signals* signals, uint nsamples, Sample value)
97
216
  {
98
- Signals_clear(signals, nsamples);
217
+ if (!signals)
218
+ argument_error(__FILE__, __LINE__);
219
+ if (!*signals)
220
+ argument_error(__FILE__, __LINE__);
99
221
 
100
- Frames* frames = Signals_get_frames(signals);
101
- assert(frames);
222
+ Signals_clear(signals);
223
+ Signals_set_nsamples(signals, nsamples);
102
224
 
103
- Float* p = &(*frames)(0, 0);
104
- size_t size = frames->size();
225
+ Sample* p = Signals_at(signals, 0);
226
+ size_t size = nsamples * signals->nchannels();
105
227
  for (size_t i = 0; i < size; ++i)
106
228
  *p++ = value;
107
-
108
- Signals_set_nsamples(signals, nsamples);
109
229
  }
110
230
 
111
231
  static uint
112
- copy_frames (Signals* to, const Signals& from, uint from_offset)
232
+ copy_samples (Signals* to, const Signals& from, uint from_offset)
113
233
  {
114
234
  assert(to && *to && from);
115
235
 
116
236
  if (from_offset >= from.nsamples())
117
237
  return 0;
118
238
 
119
- uint to_offset = to->nsamples();
120
- uint to_nsamples = to->capacity() - to_offset;
121
- uint from_nsamples = from.nsamples();
122
- uint copy_nsamples =
123
- std::min(from_offset + to_nsamples, from_nsamples)
124
- - from_offset;
239
+ uint to_nchannels = to->nchannels();
240
+ uint from_nchannels = from.nchannels();
241
+ uint to_offset = to->nsamples();
242
+ uint to_nsamples = to->capacity() - to_offset;
243
+ uint from_nsamples = from.nsamples();
244
+ uint copy_nsamples =
245
+ std::min(from_offset + to_nsamples, from_nsamples) - from_offset;
125
246
 
126
- Frames* to_frames = Signals_get_frames(to);
127
- const Frames* from_frames = Signals_get_frames(&from);
128
- assert(to_frames && from_frames);
129
-
130
- for (uint channel = 0; channel < to_frames->nchannels(); ++channel)
247
+ for (uint channel = 0; channel < to_nchannels; ++channel)
131
248
  {
132
- uint from_channel = channel < from_frames->nchannels() ? channel : 0;
133
-
249
+ uint from_channel = channel < from_nchannels ? channel : 0;
250
+ Sample* to_p = Signals_at(to, to_offset, channel);
251
+ const Sample* from_p = Signals_at(from, from_offset, from_channel);
134
252
  for (uint i = 0; i < copy_nsamples; ++i)
135
253
  {
136
- (*to_frames)( to_offset + i, channel) =
137
- (*from_frames)(from_offset + i, from_channel);
254
+ *to_p = *from_p;
255
+ to_p += to_nchannels;
256
+ from_p += from_nchannels;
138
257
  }
139
258
  }
140
259
 
141
- to->self->nsamples += copy_nsamples;
260
+ Signals_set_nsamples(to, to->self->nsamples + copy_nsamples);
142
261
  return copy_nsamples;
143
262
  }
144
263
 
145
264
  static uint
146
- resample_frames (Signals* to, const Signals& from, uint from_offset)
265
+ resample (Signals* to, const Signals& from, uint from_offset)
147
266
  {
148
267
  assert(to && *to && from);
149
268
 
@@ -174,16 +293,12 @@ namespace Beeps
174
293
  from.sample_rate(), to->sample_rate(), from_nsamples);
175
294
  r8b::CFixedBuffer<double> from_buf(from_nsamples), to_buf(to_nsamples);
176
295
 
177
- Frames* to_frames = Signals_get_frames(to);
178
- const Frames* from_frames = Signals_get_frames(&from);
179
- assert(to_frames && from_frames);
180
-
181
- for (uint channel = 0; channel < to_frames->nchannels(); ++channel)
296
+ for (uint channel = 0; channel < to->nchannels(); ++channel)
182
297
  {
183
- uint from_channel = channel < from_frames->nchannels() ? channel : 0;
298
+ uint from_channel = channel < from.nchannels() ? channel : 0;
184
299
 
185
300
  for (uint i = 0; i < from_nsamples; ++i)
186
- from_buf[i] = (*from_frames)(from_offset + i, from_channel);
301
+ from_buf[i] = *Signals_at(from, from_offset + i, from_channel);
187
302
 
188
303
  resampler.clear();
189
304
  resampler.oneshot(
@@ -191,10 +306,10 @@ namespace Beeps
191
306
  (double*) to_buf, to_nsamples);
192
307
 
193
308
  for (uint i = 0; i < to_nsamples; ++i)
194
- (*to_frames)(to_offset + i, channel) = to_buf[i];
309
+ *Signals_at(to, to_offset + i, channel) = to_buf[i];
195
310
  }
196
311
 
197
- to->self->nsamples += to_nsamples;
312
+ Signals_set_nsamples(to, to->self->nsamples + to_nsamples);
198
313
  return from_nsamples;
199
314
  }
200
315
 
@@ -211,9 +326,9 @@ namespace Beeps
211
326
  Signals_clear(to);
212
327
 
213
328
  if (to->sample_rate() == from.sample_rate())
214
- return copy_frames(to, from, from_offset);
329
+ return copy_samples(to, from, from_offset);
215
330
  else
216
- return resample_frames(to, from, from_offset);
331
+ return resample(to, from, from_offset);
217
332
  }
218
333
 
219
334
  void
@@ -224,14 +339,13 @@ namespace Beeps
224
339
  if (signals->nchannels() != add.nchannels())
225
340
  argument_error(__FILE__, __LINE__);
226
341
 
227
- Frames* sigf = Signals_get_frames(signals);
228
- Frames* addf = Signals_get_frames(const_cast<Signals*>(&add));
229
- Float* sigp = &(*sigf)(0, 0);
230
- Float* addp = &(*addf)(0, 0);
231
- uint nframes = std::min(sigf->nframes(), addf->nframes());
342
+ Sample* sig_p = Signals_at(signals, 0);
343
+ const Sample* add_p = Signals_at(add, 0);
344
+ uint nsamples = std::min(signals->nsamples(), add.nsamples());
345
+ uint size = nsamples * signals->nchannels();
232
346
 
233
- for (uint i = 0; i < nframes; ++i, ++sigp, ++addp)
234
- *sigp += *addp;
347
+ for (uint i = 0; i < size; ++i, ++sig_p, ++add_p)
348
+ *sig_p += *add_p;
235
349
  }
236
350
 
237
351
  void
@@ -244,17 +358,52 @@ namespace Beeps
244
358
  if (signals->capacity() != multiplier.capacity())
245
359
  argument_error(__FILE__, __LINE__);
246
360
 
247
- Frames* sigf = Signals_get_frames(signals);
248
- Frames* mulf = Signals_get_frames(const_cast<Signals*>(&multiplier));
249
- uint nchannels = sigf->nchannels();
250
- uint nframes = sigf->nframes();
361
+ uint nchannels = signals->nchannels();
362
+ uint nsamples = signals->nsamples();
251
363
 
252
364
  for (uint ch = 0; ch < nchannels; ++ch)
253
365
  {
254
- Float* sigp = &(*sigf)(0, ch);
255
- Float* mulp = &(*mulf)(0, 0);
256
- for (uint i = 0; i < nframes; i += nchannels, sigp += nchannels, ++mulp)
257
- *sigp *= *mulp;
366
+ Sample* sig_p = Signals_at(signals, 0, ch);
367
+ const Sample* mul_p = Signals_at(multiplier, 0, 0);
368
+ for (uint i = 0; i < nsamples; ++i, sig_p += nchannels, ++mul_p)
369
+ *sig_p *= *mul_p;
370
+ }
371
+ }
372
+
373
+ void
374
+ Signals_offset_and_scale (
375
+ Signals* signals, float offset, float scale,
376
+ int channel, uint start, int end_)
377
+ {
378
+ if (!signals)
379
+ argument_error(__FILE__, __LINE__);
380
+
381
+ uint signals_nsamples = signals->nsamples();
382
+ uint end = end_ < 0 ? signals_nsamples : (uint) end_;
383
+ if (start > signals_nsamples)
384
+ argument_error(__FILE__, __LINE__);
385
+ if (end > signals_nsamples)
386
+ argument_error(__FILE__, __LINE__);
387
+ if (end < start)
388
+ argument_error(__FILE__, __LINE__);
389
+
390
+ if (offset == 0 && scale == 1) return;
391
+
392
+ uint nchannels = signals->nchannels();
393
+ uint nsamples = end - start;
394
+
395
+ if (channel >= 0)
396
+ {
397
+ Sample* p = Signals_at(signals, start, channel);
398
+ for (uint i = 0; i < nsamples; ++i, p += nchannels)
399
+ *p = *p * scale + offset;
400
+ }
401
+ else
402
+ {
403
+ uint size = nchannels * nsamples;
404
+ Sample* p = Signals_at(signals, start, 0);
405
+ for (uint i = 0; i < size; ++i, ++p)
406
+ *p = *p * scale + offset;
258
407
  }
259
408
  }
260
409
 
@@ -262,7 +411,8 @@ namespace Beeps
262
411
  void
263
412
  write_samples (Signals* signals, const SignalSamples<T>& samples, long nsamples_)
264
413
  {
265
- uint nsamples = nsamples_ < 0 ? samples.nsamples() : (uint) nsamples_;
414
+ uint nchannels = signals->nchannels();
415
+ uint nsamples = nsamples_ < 0 ? samples.nsamples() : (uint) nsamples_;
266
416
 
267
417
  if (!signals)
268
418
  argument_error(__FILE__, __LINE__);
@@ -273,17 +423,15 @@ namespace Beeps
273
423
  if (signals->capacity() < nsamples)
274
424
  argument_error(__FILE__, __LINE__);
275
425
 
276
- Frames* f = Signals_get_frames(signals);
277
- assert(f);
278
-
279
- for (uint channel = 0; channel < signals->nchannels(); ++channel)
426
+ for (uint channel = 0; channel < nchannels; ++channel)
280
427
  {
281
- const T* buf = samples.channel(channel);
282
- for (uint sample = 0; sample < nsamples; ++sample)
283
- (*f)(sample, channel) = buf[sample];
428
+ Sample* sig_p = Signals_at(signals, 0, channel);
429
+ const T* buf = samples.channel(channel);
430
+ for (uint i = 0; i < nsamples; ++i, sig_p += nchannels)
431
+ *sig_p = buf[i];
284
432
  }
285
433
 
286
- signals->self->nsamples = nsamples;
434
+ Signals_set_nsamples(signals, nsamples);
287
435
  }
288
436
 
289
437
  template <>
@@ -307,29 +455,39 @@ namespace Beeps
307
455
  {
308
456
  if (!signals)
309
457
  argument_error(__FILE__, __LINE__);
458
+ if (nsamples > signals->capacity())
459
+ argument_error(__FILE__, __LINE__);
310
460
 
311
461
  signals->self->nsamples = nsamples;
312
462
  }
313
463
 
314
- float
315
- Signals_get_seconds (const Signals& signals)
464
+ Sample*
465
+ Signals_at (Signals* signals, uint index, uint channel)
316
466
  {
317
- return (float) (signals.nsamples() / signals.sample_rate());
467
+ if (!signals)
468
+ argument_error(__FILE__, __LINE__);
469
+ if (!*signals)
470
+ argument_error(__FILE__, __LINE__);
471
+
472
+ return &(*signals->self->frames)(index, channel);
318
473
  }
319
474
 
320
- Frames*
321
- Signals_get_frames (Signals* signals)
475
+ const Sample*
476
+ Signals_at (const Signals* signals, uint index, uint channel)
322
477
  {
323
- if (!signals)
324
- argument_error(__FILE__, __LINE__);
478
+ return Signals_at(const_cast<Signals*>(signals), index, channel);
479
+ }
325
480
 
326
- return signals->self->frames.get();
481
+ const Sample*
482
+ Signals_at (const Signals& signals, uint index, uint channel)
483
+ {
484
+ return Signals_at(const_cast<Signals*>(&signals), index, channel);
327
485
  }
328
486
 
329
- const Frames*
330
- Signals_get_frames (const Signals* signals)
487
+ float
488
+ Signals_get_seconds (const Signals& signals)
331
489
  {
332
- return Signals_get_frames(const_cast<Signals*>(signals));
490
+ return (float) (signals.nsamples() / signals.sample_rate());
333
491
  }
334
492
 
335
493
  static void
@@ -338,20 +496,20 @@ namespace Beeps
338
496
  {
339
497
  assert(buffer && signals);
340
498
 
341
- const Frames* frames = Signals_get_frames(&signals);
342
- assert(frames);
499
+ uint nchannels = signals.nchannels();
500
+ uint nsamples = signals.nsamples();
343
501
 
344
502
  buffer->clear();
345
- for (uint ch = 0; ch < frames->nchannels(); ++ch)
503
+ for (uint ch = 0; ch < nchannels; ++ch)
346
504
  {
347
505
  buffer->emplace_back(std::vector<float>());
348
506
  auto& channel = buffer->back();
349
507
 
350
- uint nframes = frames->nframes();
351
- channel.reserve(nframes);
508
+ channel.reserve(nsamples);
352
509
 
353
- for (uint i = 0; i < nframes; ++i)
354
- channel.emplace_back((*frames)(i, ch));
510
+ const Sample* p = Signals_at(signals, 0, ch);
511
+ for (uint i = 0; i < nsamples; ++i, p += nchannels)
512
+ channel.push_back(*p);
355
513
  }
356
514
  }
357
515
 
@@ -392,7 +550,7 @@ namespace Beeps
392
550
  uint
393
551
  Signals::nchannels () const
394
552
  {
395
- return self->frames ? self->frames->nchannels() : 0;
553
+ return self->frames ? self->frames->channels() : 0;
396
554
  }
397
555
 
398
556
  uint
@@ -404,7 +562,7 @@ namespace Beeps
404
562
  uint
405
563
  Signals::capacity () const
406
564
  {
407
- return self->frames ? self->frames->nframes() : 0;
565
+ return self->frames ? self->frames->frames() : 0;
408
566
  }
409
567
 
410
568
  bool
@@ -413,7 +571,7 @@ namespace Beeps
413
571
  return self->nsamples == 0;
414
572
  }
415
573
 
416
- const double*
574
+ const Sample*
417
575
  Signals::samples () const
418
576
  {
419
577
  return self->frames ? self->frames->data() : NULL;
@@ -422,7 +580,7 @@ namespace Beeps
422
580
  Signals::operator bool () const
423
581
  {
424
582
  const Frames* f = self->frames.get();
425
- return f && f->dataRate() > 0 && f->nchannels() > 0 && f->nframes() > 0;
583
+ return f && f->dataRate() > 0 && f->channels() > 0 && f->frames() > 0;
426
584
  }
427
585
 
428
586
  bool