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
@@ -27,13 +27,15 @@ namespace Beeps
27
27
 
28
28
  virtual float gain () const;
29
29
 
30
- virtual void filter (
31
- Context* context, Signals* signals, uint* offset) override;
32
-
33
30
  struct Data;
34
31
 
35
32
  Xot::PImpl<Data> self;
36
33
 
34
+ protected:
35
+
36
+ virtual void filter (
37
+ Context* context, Signals* signals, uint* offset) override;
38
+
37
39
  };// Gain
38
40
 
39
41
 
@@ -66,15 +68,17 @@ namespace Beeps
66
68
 
67
69
  virtual const_iterator end () const;
68
70
 
69
- virtual void filter (
70
- Context* context, Signals* signals, uint* offset) override;
71
-
72
71
  virtual operator bool () const override;
73
72
 
74
73
  struct Data;
75
74
 
76
75
  Xot::PImpl<Data> self;
77
76
 
77
+ protected:
78
+
79
+ virtual void filter (
80
+ Context* context, Signals* signals, uint* offset) override;
81
+
78
82
  };// Mixer
79
83
 
80
84
 
@@ -109,16 +113,107 @@ namespace Beeps
109
113
 
110
114
  virtual float release_time () const;
111
115
 
116
+ virtual operator bool () const override;
117
+
118
+ struct Data;
119
+
120
+ Xot::PImpl<Data> self;
121
+
122
+ protected:
123
+
112
124
  virtual void filter (
113
125
  Context* context, Signals* signals, uint* offset) override;
114
126
 
115
- virtual operator bool () const override;
127
+ };// Envelope
128
+
129
+
130
+ class LowPass : public Filter
131
+ {
132
+
133
+ typedef Filter Super;
134
+
135
+ public:
136
+
137
+ LowPass (Processor* input = NULL);
138
+
139
+ virtual ~LowPass ();
140
+
141
+ virtual void set_cutoff_frequency (float frequency);
142
+
143
+ virtual float cutoff_frequency () const;
116
144
 
117
145
  struct Data;
118
146
 
119
147
  Xot::PImpl<Data> self;
120
148
 
121
- };// Envelope
149
+ protected:
150
+
151
+ virtual void filter (
152
+ Context* context, Signals* signals, uint* offset) override;
153
+
154
+ };// LowPass
155
+
156
+
157
+ class HighPass : public Filter
158
+ {
159
+
160
+ typedef Filter Super;
161
+
162
+ public:
163
+
164
+ HighPass (Processor* input = NULL);
165
+
166
+ virtual ~HighPass ();
167
+
168
+ virtual void set_cutoff_frequency (float frequency);
169
+
170
+ virtual float cutoff_frequency () const;
171
+
172
+ struct Data;
173
+
174
+ Xot::PImpl<Data> self;
175
+
176
+ protected:
177
+
178
+ virtual void filter (
179
+ Context* context, Signals* signals, uint* offset) override;
180
+
181
+ };// HighPass
182
+
183
+
184
+ class Reverb : public Filter
185
+ {
186
+
187
+ typedef Filter Super;
188
+
189
+ public:
190
+
191
+ Reverb (Processor* input = NULL);
192
+
193
+ virtual ~Reverb ();
194
+
195
+ virtual void set_mix (float mix);
196
+
197
+ virtual float mix () const;
198
+
199
+ virtual void set_room_size (float frequency);
200
+
201
+ virtual float room_size () const;
202
+
203
+ virtual void set_damping (float damping);
204
+
205
+ virtual float damping () const;
206
+
207
+ struct Data;
208
+
209
+ Xot::PImpl<Data> self;
210
+
211
+ protected:
212
+
213
+ virtual void filter (
214
+ Context* context, Signals* signals, uint* offset) override;
215
+
216
+ };// Reverb
122
217
 
123
218
 
124
219
  class TimeStretch : public Filter
@@ -138,15 +233,17 @@ namespace Beeps
138
233
 
139
234
  virtual float scale () const;
140
235
 
141
- virtual void filter (
142
- Context* context, Signals* signals, uint* offset) override;
143
-
144
236
  virtual operator bool () const override;
145
237
 
146
238
  struct Data;
147
239
 
148
240
  Xot::PImpl<Data> self;
149
241
 
242
+ protected:
243
+
244
+ virtual void filter (
245
+ Context* context, Signals* signals, uint* offset) override;
246
+
150
247
  };// TimeStretch
151
248
 
152
249
 
@@ -167,15 +264,17 @@ namespace Beeps
167
264
 
168
265
  virtual float shift () const;
169
266
 
170
- virtual void filter (
171
- Context* context, Signals* signals, uint* offset) override;
172
-
173
267
  virtual operator bool () const override;
174
268
 
175
269
  struct Data;
176
270
 
177
271
  Xot::PImpl<Data> self;
178
272
 
273
+ protected:
274
+
275
+ virtual void filter (
276
+ Context* context, Signals* signals, uint* offset) override;
277
+
179
278
  };// PitchShift
180
279
 
181
280
 
@@ -202,15 +301,17 @@ namespace Beeps
202
301
 
203
302
  virtual const Spectrum& spectrum () const;
204
303
 
205
- virtual void filter (
206
- Context* context, Signals* signals, uint* offset) override;
207
-
208
304
  virtual operator bool () const override;
209
305
 
210
306
  struct Data;
211
307
 
212
308
  Xot::PImpl<Data> self;
213
309
 
310
+ protected:
311
+
312
+ virtual void filter (
313
+ Context* context, Signals* signals, uint* offset) override;
314
+
214
315
  };// Analyser
215
316
 
216
317
 
@@ -25,7 +25,7 @@ namespace Beeps
25
25
 
26
26
  Oscillator (Type type = SINE);
27
27
 
28
- Oscillator (float* samples, size_t size);
28
+ Oscillator (const Sample* samples, size_t size);
29
29
 
30
30
  virtual ~Oscillator ();
31
31
 
@@ -35,22 +35,41 @@ namespace Beeps
35
35
 
36
36
  virtual Type type () const;
37
37
 
38
- virtual void set_samples (float* samples, size_t size);
38
+ virtual void set_samples (const Sample* samples, size_t size);
39
39
 
40
- virtual const float* samples () const;
40
+ virtual const Sample* samples () const;
41
41
 
42
- virtual size_t nsamples () const;
42
+ virtual size_t nsamples () const;
43
43
 
44
- virtual void set_frequency (float frequency);
44
+ virtual void set_frequency (float frequency);
45
+
46
+ virtual void set_frequency (Processor* frequency);
45
47
 
46
48
  virtual float frequency () const;
47
49
 
48
- virtual void set_phase (float phase);
50
+ virtual void set_phase (float phase);
51
+
52
+ virtual void set_phase (Processor* phase);
49
53
 
50
54
  virtual float phase () const;
51
55
 
52
- virtual void generate (
53
- Context* context, Signals* signals, uint* offset) override;
56
+ virtual void set_gain (float gain);
57
+
58
+ virtual void set_gain (Processor* gain);
59
+
60
+ virtual float gain () const;
61
+
62
+ virtual void set_offset (float offset);
63
+
64
+ virtual void set_offset (Processor* offset);
65
+
66
+ virtual float offset () const;
67
+
68
+ virtual void set_duty (float duty);
69
+
70
+ virtual void set_duty (Processor* duty);
71
+
72
+ virtual float duty () const;
54
73
 
55
74
  virtual operator bool () const override;
56
75
 
@@ -58,6 +77,14 @@ namespace Beeps
58
77
 
59
78
  Xot::PImpl<Data> self;
60
79
 
80
+ protected:
81
+
82
+ virtual void generate (
83
+ Context* context, Signals* signals, uint* offset) override;
84
+
85
+ virtual int max_segment_size_for_process (
86
+ double sample_rate, uint nsamples) const override;
87
+
61
88
  };// Oscillator
62
89
 
63
90
 
@@ -80,15 +107,17 @@ namespace Beeps
80
107
 
81
108
  virtual float time_scale () const;
82
109
 
83
- virtual void generate (
84
- Context* context, Signals* signals, uint* offset) override;
85
-
86
110
  virtual operator bool () const override;
87
111
 
88
112
  struct Data;
89
113
 
90
114
  Xot::PImpl<Data> self;
91
115
 
116
+ protected:
117
+
118
+ virtual void generate (
119
+ Context* context, Signals* signals, uint* offset) override;
120
+
92
121
  };// Sequencer
93
122
 
94
123
 
@@ -117,15 +146,17 @@ namespace Beeps
117
146
 
118
147
  virtual float seconds () const;
119
148
 
120
- virtual void generate (
121
- Context* context, Signals* signals, uint* offset) override;
122
-
123
149
  virtual operator bool () const override;
124
150
 
125
151
  struct Data;
126
152
 
127
153
  Xot::PImpl<Data> self;
128
154
 
155
+ protected:
156
+
157
+ virtual void generate (
158
+ Context* context, Signals* signals, uint* offset) override;
159
+
129
160
  };// FileIn
130
161
 
131
162
 
@@ -148,15 +179,17 @@ namespace Beeps
148
179
 
149
180
  virtual uint nchannels () const;
150
181
 
151
- virtual void generate (
152
- Context* context, Signals* signals, uint* offset) override;
153
-
154
182
  virtual operator bool () const override;
155
183
 
156
184
  struct Data;
157
185
 
158
186
  Xot::PImpl<Data> self;
159
187
 
188
+ protected:
189
+
190
+ virtual void generate (
191
+ Context* context, Signals* signals, uint* offset) override;
192
+
160
193
  };// MicIn
161
194
 
162
195
 
@@ -4,18 +4,17 @@
4
4
  #define __BEEPS_PROCESSOR_H__
5
5
 
6
6
 
7
+ #include <map>
7
8
  #include <xot/ref.h>
8
9
  #include <xot/pimpl.h>
9
10
  #include <beeps/defs.h>
11
+ #include <beeps/signals.h>
10
12
 
11
13
 
12
14
  namespace Beeps
13
15
  {
14
16
 
15
17
 
16
- class Signals;
17
-
18
-
19
18
  class Processor : public Xot::RefCountable<>
20
19
  {
21
20
 
@@ -25,7 +24,9 @@ namespace Beeps
25
24
 
26
25
  class Context {};
27
26
 
28
- typedef Xot::Ref<This> Ref;
27
+ typedef Xot::Ref<This> Ref;
28
+
29
+ typedef std::map<uint, Ref> Map;
29
30
 
30
31
  virtual ~Processor ();
31
32
 
@@ -51,11 +52,22 @@ namespace Beeps
51
52
 
52
53
  Processor (bool generator = false);
53
54
 
54
- virtual void process (Context* context, Signals* signals, uint* offset) final;
55
+ virtual void process (Context* context, Signals* signals, uint* offset) final;
55
56
 
56
57
  virtual void generate (Context* context, Signals* signals, uint* offset);
57
58
 
58
- virtual void filter (Context* context, Signals* signals, uint* offset);
59
+ virtual void filter (Context* context, Signals* signals, uint* offset);
60
+
61
+ virtual int max_segment_size_for_process (
62
+ double sample_rate, uint nsamples) const;
63
+
64
+ virtual uint get_segment_size (double sample_rate, uint nsamples) const;
65
+
66
+ virtual void set_sub_input (uint index, Processor* input);
67
+
68
+ virtual Processor* sub_input (uint index) const;
69
+
70
+ virtual void clear_sub_input_unless_processing (uint index);
59
71
 
60
72
  virtual void set_updated ();
61
73
 
@@ -100,6 +112,11 @@ namespace Beeps
100
112
  };// Filter
101
113
 
102
114
 
115
+ Signals get_signals (
116
+ Processor* processor, float seconds,
117
+ uint nchannels = 1, double sample_rate = 0);
118
+
119
+
103
120
  }// Beeps
104
121
 
105
122
 
@@ -15,6 +15,12 @@ RUCY_DECLARE_WRAPPER_VALUE_FROM_TO(BEEPS_EXPORT, Beeps::Mixer)
15
15
 
16
16
  RUCY_DECLARE_WRAPPER_VALUE_FROM_TO(BEEPS_EXPORT, Beeps::Envelope)
17
17
 
18
+ RUCY_DECLARE_WRAPPER_VALUE_FROM_TO(BEEPS_EXPORT, Beeps:: LowPass)
19
+
20
+ RUCY_DECLARE_WRAPPER_VALUE_FROM_TO(BEEPS_EXPORT, Beeps::HighPass)
21
+
22
+ RUCY_DECLARE_WRAPPER_VALUE_FROM_TO(BEEPS_EXPORT, Beeps::Reverb)
23
+
18
24
  RUCY_DECLARE_WRAPPER_VALUE_FROM_TO(BEEPS_EXPORT, Beeps::TimeStretch)
19
25
 
20
26
  RUCY_DECLARE_WRAPPER_VALUE_FROM_TO(BEEPS_EXPORT, Beeps::PitchShift)
@@ -35,6 +41,15 @@ namespace Beeps
35
41
  BEEPS_EXPORT Rucy::Class envelope_class ();
36
42
  // class Beeps::Envelope
37
43
 
44
+ BEEPS_EXPORT Rucy::Class low_pass_class ();
45
+ // class Beeps:: LowPass
46
+
47
+ BEEPS_EXPORT Rucy::Class high_pass_class ();
48
+ // class Beeps::HighPass
49
+
50
+ BEEPS_EXPORT Rucy::Class reverb_class ();
51
+ // class Beeps::Reverb
52
+
38
53
  BEEPS_EXPORT Rucy::Class time_stretch_class ();
39
54
  // class Beeps::TimeStretch
40
55
 
@@ -70,6 +85,24 @@ namespace Rucy
70
85
  return Beeps::envelope_class();
71
86
  }
72
87
 
88
+ template <> inline Class
89
+ get_ruby_class<Beeps::LowPass> ()
90
+ {
91
+ return Beeps::low_pass_class();
92
+ }
93
+
94
+ template <> inline Class
95
+ get_ruby_class<Beeps::HighPass> ()
96
+ {
97
+ return Beeps::high_pass_class();
98
+ }
99
+
100
+ template <> inline Class
101
+ get_ruby_class<Beeps::Reverb> ()
102
+ {
103
+ return Beeps::reverb_class();
104
+ }
105
+
73
106
  template <> inline Class
74
107
  get_ruby_class<Beeps::TimeStretch> ()
75
108
  {
@@ -0,0 +1,40 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __BEEPS_RUBY_SIGNALS_H__
4
+ #define __BEEPS_RUBY_SIGNALS_H__
5
+
6
+
7
+ #include <rucy/class.h>
8
+ #include <rucy/extension.h>
9
+ #include <beeps/signals.h>
10
+
11
+
12
+ RUCY_DECLARE_VALUE_FROM_TO(BEEPS_EXPORT, Beeps::Signals)
13
+
14
+
15
+ namespace Beeps
16
+ {
17
+
18
+
19
+ BEEPS_EXPORT Rucy::Class signals_class ();
20
+ // class Beeps::Signals
21
+
22
+
23
+ }// Beeps
24
+
25
+
26
+ namespace Rucy
27
+ {
28
+
29
+
30
+ template <> inline Class
31
+ get_ruby_class<Beeps::Signals> ()
32
+ {
33
+ return Beeps::signals_class();
34
+ }
35
+
36
+
37
+ }// Rucy
38
+
39
+
40
+ #endif//EOH
@@ -33,7 +33,7 @@ namespace Beeps
33
33
 
34
34
  bool empty () const;
35
35
 
36
- const double* samples () const;
36
+ const Sample* samples () const;
37
37
 
38
38
  operator bool () const;
39
39
 
@@ -38,6 +38,10 @@ module Beeps
38
38
  # self
39
39
  #end
40
40
 
41
+ def self.get_signals(processor, seconds: 1, nchannels: 1, sample_rate: 0)
42
+ get_signals! processor, seconds, nchannels, sample_rate
43
+ end
44
+
41
45
  end# Processor
42
46
 
43
47
 
@@ -64,7 +68,7 @@ module Beeps
64
68
  end
65
69
  end
66
70
 
67
- universal_accessor :type, :frequency, :phase
71
+ universal_accessor :type, :frequency, :phase, :gain, :offset, :duty
68
72
 
69
73
  alias freq= frequency=
70
74
  alias freq frequency
@@ -119,6 +123,8 @@ module Beeps
119
123
 
120
124
  alias each each_input
121
125
 
126
+ alias inputs to_a
127
+
122
128
  end# Mixer
123
129
 
124
130
 
@@ -158,6 +164,45 @@ module Beeps
158
164
  end# Envelope
159
165
 
160
166
 
167
+ class LowPass
168
+
169
+ def initialize(cutoff = nil, **kwargs, &block)
170
+ super(**kwargs, &block)
171
+
172
+ self.cutoff = cutoff if cutoff
173
+ end
174
+
175
+ universal_accessor :cutoff_frequency
176
+
177
+ alias cutoff= cutoff_frequency=
178
+ alias cutoff cutoff_frequency
179
+
180
+ end# LowPass
181
+
182
+
183
+ class HighPass
184
+
185
+ def initialize(cutoff = nil, **kwargs, &block)
186
+ super(**kwargs, &block)
187
+
188
+ self.cutoff = cutoff if cutoff
189
+ end
190
+
191
+ universal_accessor :cutoff_frequency
192
+
193
+ alias cutoff= cutoff_frequency=
194
+ alias cutoff cutoff_frequency
195
+
196
+ end# HighPass
197
+
198
+
199
+ class Reverb
200
+
201
+ universal_accessor :mix, :room_size, :damping
202
+
203
+ end# Reverb
204
+
205
+
161
206
  class TimeStretch
162
207
 
163
208
  universal_accessor :scale
@@ -0,0 +1,19 @@
1
+ require 'beeps/ext'
2
+
3
+
4
+ module Beeps
5
+
6
+
7
+ class Signals
8
+
9
+ include Enumerable
10
+
11
+ def each(channel: nil, &block)
12
+ return enum_for(:each, channel: channel) unless block
13
+ each! channel, &block
14
+ end
15
+
16
+ end# Signals
17
+
18
+
19
+ end# Beeps
data/lib/beeps.rb CHANGED
@@ -2,5 +2,6 @@ require 'beeps/autoinit'
2
2
  require 'beeps/extension'
3
3
 
4
4
  require 'beeps/beeps'
5
+ require 'beeps/signals'
5
6
  require 'beeps/processor'
6
7
  require 'beeps/sound'