beeps 0.1.31 → 0.1.33

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/beeps/adsr.cpp +139 -0
  3. data/.doc/ext/beeps/analyser.cpp +128 -0
  4. data/.doc/ext/beeps/beeps.cpp +9 -1
  5. data/.doc/ext/beeps/file_in.cpp +55 -9
  6. data/.doc/ext/beeps/gain.cpp +64 -0
  7. data/.doc/ext/beeps/mic_in.cpp +83 -0
  8. data/.doc/ext/beeps/native.cpp +20 -8
  9. data/.doc/ext/beeps/oscillator.cpp +88 -0
  10. data/.doc/ext/beeps/pitch_shift.cpp +64 -0
  11. data/.doc/ext/beeps/processor.cpp +31 -2
  12. data/.doc/ext/beeps/sound.cpp +90 -7
  13. data/.doc/ext/beeps/sound_player.cpp +156 -0
  14. data/.doc/ext/beeps/time_stretch.cpp +64 -0
  15. data/.github/workflows/release-gem.yml +62 -0
  16. data/.github/workflows/test.yml +0 -6
  17. data/.github/workflows/utils.rb +13 -5
  18. data/ChangeLog.md +13 -0
  19. data/Rakefile +27 -6
  20. data/VERSION +1 -1
  21. data/beeps.gemspec +2 -2
  22. data/ext/beeps/adsr.cpp +150 -0
  23. data/ext/beeps/analyser.cpp +134 -0
  24. data/ext/beeps/beeps.cpp +10 -1
  25. data/ext/beeps/extconf.rb +1 -2
  26. data/ext/beeps/file_in.cpp +60 -9
  27. data/ext/beeps/gain.cpp +67 -0
  28. data/ext/beeps/mic_in.cpp +88 -0
  29. data/ext/beeps/native.cpp +20 -8
  30. data/ext/beeps/oscillator.cpp +93 -0
  31. data/ext/beeps/pitch_shift.cpp +67 -0
  32. data/ext/beeps/processor.cpp +34 -2
  33. data/ext/beeps/sound.cpp +99 -7
  34. data/ext/beeps/sound_player.cpp +169 -0
  35. data/ext/beeps/time_stretch.cpp +67 -0
  36. data/include/beeps/beeps.h +2 -1
  37. data/include/beeps/filter.h +179 -0
  38. data/include/beeps/generator.h +120 -0
  39. data/include/beeps/processor.h +37 -68
  40. data/include/beeps/ruby/filter.h +78 -0
  41. data/include/beeps/ruby/generator.h +60 -0
  42. data/include/beeps/ruby/processor.h +5 -45
  43. data/include/beeps/ruby/sound.h +14 -3
  44. data/include/beeps/signals.h +10 -4
  45. data/include/beeps/sound.h +67 -2
  46. data/lib/beeps/beeps.rb +6 -1
  47. data/lib/beeps/processor.rb +95 -15
  48. data/lib/beeps/sound.rb +29 -2
  49. data/src/adsr.cpp +245 -0
  50. data/src/analyser.cpp +254 -0
  51. data/src/beeps.cpp +11 -2
  52. data/src/file_in.cpp +94 -0
  53. data/src/gain.cpp +55 -0
  54. data/src/mic_in.cpp +262 -0
  55. data/src/mic_in.h +20 -0
  56. data/src/openal.cpp +2 -1
  57. data/src/oscillator.cpp +145 -0
  58. data/src/osx/signals.mm +83 -0
  59. data/src/pitch_shift.cpp +82 -0
  60. data/src/processor.cpp +202 -88
  61. data/src/processor.h +98 -0
  62. data/src/signals.cpp +326 -20
  63. data/src/signals.h +192 -2
  64. data/src/sound.cpp +735 -113
  65. data/src/sound.h +6 -1
  66. data/src/time_stretch.cpp +91 -0
  67. data/test/helper.rb +2 -1
  68. data/test/test_beeps.rb +10 -7
  69. data/test/test_beeps_init.rb +18 -0
  70. data/test/test_file_in.rb +15 -0
  71. data/test/test_processor.rb +50 -0
  72. data/test/test_sound.rb +87 -11
  73. data/test/test_sound_player.rb +134 -0
  74. metadata +55 -17
  75. data/.doc/ext/beeps/sawtooth_wave.cpp +0 -61
  76. data/.doc/ext/beeps/sine_wave.cpp +0 -61
  77. data/.doc/ext/beeps/square_wave.cpp +0 -61
  78. data/.github/workflows/release.yml +0 -34
  79. data/ext/beeps/sawtooth_wave.cpp +0 -64
  80. data/ext/beeps/sine_wave.cpp +0 -64
  81. data/ext/beeps/square_wave.cpp +0 -64
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e709310c7554defe3986e27506ad58db7a4bac6ca804cf6d01ed84d25dcac15
4
- data.tar.gz: 6324f51401883f0c2659ec239e9629182a21cbbaf8a05ed5b5c15ad91bb28ae9
3
+ metadata.gz: 0b9915b433d5e54ae45f1a6cc1fc0a922f558ed0133908c3d1bf30554fc348c3
4
+ data.tar.gz: 53f4a30891273bfcdd969ca408a963b6aa5c847055c3868701dc356e46a45b6e
5
5
  SHA512:
6
- metadata.gz: f10c60f3e75cf76eb4dcc6cae1d0a20187d720e8f74af33cfa140588d846343e41579bfac299c2e72ba39da10d27ee3e396d4b38ddc22bf7c7a497a45e70abf2
7
- data.tar.gz: 7b9e64b60fc04046e761e4a03d9645bf54d7fc946f9be06a4e797da73c63ecadce7fe99f9df8663e21eb05294262c226be0409fe5d01afab8be567e3c48ead4c
6
+ metadata.gz: 90ed2a73165ea3106af0512fd0133bc587762944c0da07d70d5d1bb1a3815df7173417e528a5e9979677c5d8ccb0a60207ca855ea3eceff5f675010cd87bb13a
7
+ data.tar.gz: e8e6f3e6a1fb38ba2a45bae0aaa2a549097d726a6ae0f5ea2ba768351a354144f9d67a1f9f84ac2b3ff17451cbdb3e9a9209dfcd1f986b31ee850aae5b693b2e
@@ -0,0 +1,139 @@
1
+ #include "beeps/ruby/filter.h"
2
+
3
+
4
+ #include "beeps/ruby/processor.h"
5
+ #include "defs.h"
6
+
7
+
8
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(Beeps::ADSR)
9
+
10
+ #define THIS to<Beeps::ADSR*>(self)
11
+
12
+ #define CHECK RUCY_CHECK_OBJ(Beeps::ADSR, self)
13
+
14
+
15
+ static
16
+ VALUE alloc(VALUE klass)
17
+ {
18
+ return value(new Beeps::RubyProcessor<Beeps::ADSR>, klass);
19
+ }
20
+
21
+ static
22
+ VALUE note_on(VALUE self, VALUE delay)
23
+ {
24
+ CHECK;
25
+
26
+ THIS->note_on(to<float>(delay));
27
+ }
28
+
29
+ static
30
+ VALUE note_off(VALUE self, VALUE delay)
31
+ {
32
+ CHECK;
33
+
34
+ THIS->note_off(to<float>(delay));
35
+ }
36
+
37
+ static
38
+ VALUE set_attack_time(VALUE self, VALUE time)
39
+ {
40
+ CHECK;
41
+
42
+ THIS->set_attack_time(to<float>(time));
43
+ return time;
44
+ }
45
+
46
+ static
47
+ VALUE get_attack_time(VALUE self)
48
+ {
49
+ CHECK;
50
+
51
+ return value(THIS->attack_time());
52
+ }
53
+
54
+ static
55
+ VALUE set_decay_time(VALUE self, VALUE time)
56
+ {
57
+ CHECK;
58
+
59
+ THIS->set_decay_time(to<float>(time));
60
+ return time;
61
+ }
62
+
63
+ static
64
+ VALUE get_decay_time(VALUE self)
65
+ {
66
+ CHECK;
67
+
68
+ return value(THIS->decay_time());
69
+ }
70
+
71
+ static
72
+ VALUE set_sustain_level(VALUE self, VALUE level)
73
+ {
74
+ CHECK;
75
+
76
+ THIS->set_sustain_level(to<float>(level));
77
+ return level;
78
+ }
79
+
80
+ static
81
+ VALUE get_sustain_level(VALUE self)
82
+ {
83
+ CHECK;
84
+
85
+ return value(THIS->sustain_level());
86
+ }
87
+
88
+ static
89
+ VALUE set_release_time(VALUE self, VALUE time)
90
+ {
91
+ CHECK;
92
+
93
+ THIS->set_release_time(to<float>(time));
94
+ return time;
95
+ }
96
+
97
+ static
98
+ VALUE get_release_time(VALUE self)
99
+ {
100
+ CHECK;
101
+
102
+ return value(THIS->release_time());
103
+ }
104
+
105
+
106
+ static Class cADSR;
107
+
108
+ void
109
+ Init_beeps_adsr ()
110
+ {
111
+ Module mBeeps = rb_define_module("Beeps");
112
+
113
+ cADSR = mBeeps.define_class("ADSR", Beeps::processor_class());
114
+ rb_define_alloc_func(cADSR, alloc);
115
+ cADSR.define_private_method("note_on!", note_on);
116
+ cADSR.define_private_method("note_off!", note_off);
117
+ rb_define_method(cADSR, "attack_time=", RUBY_METHOD_FUNC(set_attack_time), 1);
118
+ rb_define_method(cADSR, "attack_time", RUBY_METHOD_FUNC(get_attack_time), 0);
119
+ rb_define_method(cADSR, "decay_time=", RUBY_METHOD_FUNC(set_decay_time), 1);
120
+ rb_define_method(cADSR, "decay_time", RUBY_METHOD_FUNC(get_decay_time), 0);
121
+ rb_define_method(cADSR, "sustain_level=", RUBY_METHOD_FUNC(set_sustain_level), 1);
122
+ rb_define_method(cADSR, "sustain_level", RUBY_METHOD_FUNC(get_sustain_level), 0);
123
+ rb_define_method(cADSR, "release_time=", RUBY_METHOD_FUNC(set_release_time), 1);
124
+ rb_define_method(cADSR, "release_time", RUBY_METHOD_FUNC(get_release_time), 0);
125
+ }
126
+
127
+
128
+ namespace Beeps
129
+ {
130
+
131
+
132
+ Class
133
+ adsr_class ()
134
+ {
135
+ return cADSR;
136
+ }
137
+
138
+
139
+ }// Beeps
@@ -0,0 +1,128 @@
1
+ #include "beeps/ruby/filter.h"
2
+
3
+
4
+ #include "beeps/ruby/processor.h"
5
+ #include "beeps/signals.h"
6
+ #include "defs.h"
7
+
8
+
9
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(Beeps::Analyser)
10
+
11
+ #define THIS to<Beeps::Analyser*>(self)
12
+
13
+ #define CHECK RUCY_CHECK_OBJ(Beeps::Analyser, self)
14
+
15
+
16
+ static
17
+ VALUE alloc(VALUE klass)
18
+ {
19
+ return value(new Beeps::RubyProcessor<Beeps::Analyser>, klass);
20
+ }
21
+
22
+ static
23
+ VALUE set_fft_size(VALUE self, VALUE size)
24
+ {
25
+ CHECK;
26
+
27
+ THIS->set_fft_size(to<uint>(size));
28
+ return size;
29
+ }
30
+
31
+ static
32
+ VALUE get_fft_size(VALUE self)
33
+ {
34
+ CHECK;
35
+
36
+ return value(THIS->fft_size());
37
+ }
38
+
39
+ static
40
+ VALUE get_resolution(VALUE self)
41
+ {
42
+ CHECK;
43
+
44
+ return value(THIS->resolution());
45
+ }
46
+
47
+ static
48
+ VALUE each_signal(VALUE self, VALUE nsamples_)
49
+ {
50
+ CHECK;
51
+
52
+ if (!*THIS)
53
+ invalid_object_error(__FILE__, __LINE__);
54
+
55
+ const Beeps::Signals& sig = THIS->signals();
56
+
57
+ uint nsamples = to<uint>(nsamples_);
58
+ if (nsamples > sig.nsamples()) nsamples = sig.nsamples();
59
+
60
+ const double* samples = sig.samples();
61
+ uint nchannels = sig.nchannels();
62
+ uint start = (sig.nsamples() - nsamples) * nchannels;
63
+ switch (nchannels)
64
+ {
65
+ case 1:
66
+ for (uint i = start; i < nsamples; ++i)
67
+ rb_yield(value(samples[i]));
68
+ break;
69
+
70
+ case 2:
71
+ Value values[2];
72
+ Value args(2, values);
73
+ for (uint i = start; i < nsamples; i += 2)
74
+ {
75
+ args[0] = value(samples[i + 0]);
76
+ args[1] = value(samples[i + 1]);
77
+ rb_yield(args);
78
+ }
79
+ break;
80
+ }
81
+
82
+ return nil();
83
+ }
84
+
85
+ static
86
+ VALUE each_spectrum(VALUE self)
87
+ {
88
+ CHECK;
89
+
90
+ if (!*THIS)
91
+ invalid_object_error(__FILE__, __LINE__);
92
+
93
+ for (auto val : THIS->spectrum())
94
+ rb_yield(value(val));
95
+
96
+ return nil();
97
+ }
98
+
99
+
100
+ static Class cAnalyser;
101
+
102
+ void
103
+ Init_beeps_analyser ()
104
+ {
105
+ Module mBeeps = rb_define_module("Beeps");
106
+
107
+ cAnalyser = mBeeps.define_class("Analyser", Beeps::processor_class());
108
+ rb_define_alloc_func(cAnalyser, alloc);
109
+ rb_define_method(cAnalyser, "fft_size=", RUBY_METHOD_FUNC(set_fft_size), 1);
110
+ rb_define_method(cAnalyser, "fft_size", RUBY_METHOD_FUNC(get_fft_size), 0);
111
+ rb_define_method(cAnalyser, "resolution", RUBY_METHOD_FUNC(get_resolution), 0);
112
+ cAnalyser.define_private_method("each_signal!", each_signal);
113
+ cAnalyser.define_private_method("each_spectrum!", each_spectrum);
114
+ }
115
+
116
+
117
+ namespace Beeps
118
+ {
119
+
120
+
121
+ Class
122
+ analyser_class ()
123
+ {
124
+ return cAnalyser;
125
+ }
126
+
127
+
128
+ }// Beeps
@@ -19,6 +19,13 @@ VALUE fin(VALUE self)
19
19
  return self;
20
20
  }
21
21
 
22
+ static
23
+ VALUE process_streams(VALUE self)
24
+ {
25
+ Beeps::process_streams();
26
+ return self;
27
+ }
28
+
22
29
 
23
30
  static Module mBeeps;
24
31
 
@@ -27,7 +34,8 @@ Init_beeps ()
27
34
  {
28
35
  mBeeps = rb_define_module("Beeps");
29
36
  mBeeps.define_singleton_method("init!", init);
30
- mBeeps.define_singleton_method("fin!", fin);
37
+ mBeeps.define_singleton_method("fin!", fin);
38
+ mBeeps.define_singleton_method("process_streams!", process_streams);
31
39
  }
32
40
 
33
41
 
@@ -1,29 +1,70 @@
1
- #include "beeps/ruby/processor.h"
1
+ #include "beeps/ruby/generator.h"
2
2
 
3
3
 
4
+ #include "beeps/ruby/processor.h"
4
5
  #include "defs.h"
5
6
 
6
7
 
7
- RUCY_DEFINE_VALUE_FROM_TO(Beeps::FileIn)
8
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(Beeps::FileIn)
8
9
 
9
10
  #define THIS to<Beeps::FileIn*>(self)
10
11
 
11
- #define CHECK RUCY_CHECK_OBJECT(Beeps::FileIn, self)
12
+ #define CHECK RUCY_CHECK_OBJ(Beeps::FileIn, self)
12
13
 
13
14
 
14
15
  static
15
16
  VALUE alloc(VALUE klass)
16
17
  {
17
- return new_type<Beeps::FileIn>(klass);
18
+ return value(new Beeps::RubyProcessor<Beeps::FileIn>, klass);
19
+ }
20
+
21
+ static
22
+ VALUE set_path(VALUE self, VALUE path)
23
+ {
24
+ CHECK;
25
+
26
+ THIS->set_path(path.c_str());
27
+ return path;
28
+ }
29
+
30
+ static
31
+ VALUE get_path(VALUE self)
32
+ {
33
+ CHECK;
34
+
35
+ return value(THIS->path());
36
+ }
37
+
38
+ static
39
+ VALUE get_sample_rate(VALUE self)
40
+ {
41
+ CHECK;
42
+
43
+ return value(THIS->sample_rate());
44
+ }
45
+
46
+ static
47
+ VALUE get_nchannels(VALUE self)
48
+ {
49
+ CHECK;
50
+
51
+ return value(THIS->nchannels());
52
+ }
53
+
54
+ static
55
+ VALUE get_nsamples(VALUE self)
56
+ {
57
+ CHECK;
58
+
59
+ return value(THIS->nsamples());
18
60
  }
19
61
 
20
62
  static
21
- VALUE initialize(VALUE self, VALUE path)
63
+ VALUE get_seconds(VALUE self)
22
64
  {
23
- RUCY_CHECK_OBJ(Beeps::FileIn, self);
65
+ CHECK;
24
66
 
25
- *THIS = Beeps::FileIn(to<const char*>(path));
26
- return self;
67
+ return value(THIS->seconds());
27
68
  }
28
69
 
29
70
 
@@ -36,7 +77,12 @@ Init_beeps_file_in ()
36
77
 
37
78
  cFileIn = mBeeps.define_class("FileIn", Beeps::processor_class());
38
79
  rb_define_alloc_func(cFileIn, alloc);
39
- rb_define_private_method(cFileIn, "initialize", RUBY_METHOD_FUNC(initialize), 1);
80
+ rb_define_method(cFileIn, "path=", RUBY_METHOD_FUNC(set_path), 1);
81
+ rb_define_method(cFileIn, "path", RUBY_METHOD_FUNC(get_path), 0);
82
+ rb_define_method(cFileIn, "sample_rate", RUBY_METHOD_FUNC(get_sample_rate), 0);
83
+ rb_define_method(cFileIn, "nchannels", RUBY_METHOD_FUNC(get_nchannels), 0);
84
+ rb_define_method(cFileIn, "nsamples", RUBY_METHOD_FUNC(get_nsamples), 0);
85
+ rb_define_method(cFileIn, "seconds", RUBY_METHOD_FUNC(get_seconds), 0);
40
86
  }
41
87
 
42
88
 
@@ -0,0 +1,64 @@
1
+ #include "beeps/ruby/filter.h"
2
+
3
+
4
+ #include "beeps/ruby/processor.h"
5
+ #include "defs.h"
6
+
7
+
8
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(Beeps::Gain)
9
+
10
+ #define THIS to<Beeps::Gain*>(self)
11
+
12
+ #define CHECK RUCY_CHECK_OBJ(Beeps::Gain, self)
13
+
14
+
15
+ static
16
+ VALUE alloc(VALUE klass)
17
+ {
18
+ return value(new Beeps::RubyProcessor<Beeps::Gain>, klass);
19
+ }
20
+
21
+ static
22
+ VALUE set_gain(VALUE self, VALUE gain)
23
+ {
24
+ CHECK;
25
+
26
+ THIS->set_gain(to<float>(gain));
27
+ return gain;
28
+ }
29
+
30
+ static
31
+ VALUE get_gain(VALUE self)
32
+ {
33
+ CHECK;
34
+
35
+ return value(THIS->gain());
36
+ }
37
+
38
+
39
+ static Class cGain;
40
+
41
+ void
42
+ Init_beeps_gain ()
43
+ {
44
+ Module mBeeps = rb_define_module("Beeps");
45
+
46
+ cGain = mBeeps.define_class("Gain", Beeps::processor_class());
47
+ rb_define_alloc_func(cGain, alloc);
48
+ rb_define_method(cGain, "gain=", RUBY_METHOD_FUNC(set_gain), 1);
49
+ rb_define_method(cGain, "gain", RUBY_METHOD_FUNC(get_gain), 0);
50
+ }
51
+
52
+
53
+ namespace Beeps
54
+ {
55
+
56
+
57
+ Class
58
+ gain_class ()
59
+ {
60
+ return cGain;
61
+ }
62
+
63
+
64
+ }// Beeps
@@ -0,0 +1,83 @@
1
+ #include "beeps/ruby/generator.h"
2
+
3
+
4
+ #include "beeps/ruby/processor.h"
5
+ #include "defs.h"
6
+
7
+
8
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(Beeps::MicIn)
9
+
10
+ #define THIS to<Beeps::MicIn*>(self)
11
+
12
+ #define CHECK RUCY_CHECK_OBJ(Beeps::MicIn, self)
13
+
14
+
15
+ static
16
+ VALUE alloc(VALUE klass)
17
+ {
18
+ return value(new Beeps::RubyProcessor<Beeps::MicIn>, klass);
19
+ }
20
+
21
+ static
22
+ VALUE start(VALUE self)
23
+ {
24
+ CHECK;
25
+
26
+ THIS->start();
27
+ return self;
28
+ }
29
+
30
+ static
31
+ VALUE stop(VALUE self)
32
+ {
33
+ CHECK;
34
+
35
+ THIS->stop();
36
+ return self;
37
+ }
38
+
39
+ static
40
+ VALUE get_sample_rate(VALUE self)
41
+ {
42
+ CHECK;
43
+
44
+ return value(THIS->sample_rate());
45
+ }
46
+
47
+ static
48
+ VALUE get_nchannels(VALUE self)
49
+ {
50
+ CHECK;
51
+
52
+ return value(THIS->nchannels());
53
+ }
54
+
55
+
56
+ static Class cMicIn;
57
+
58
+ void
59
+ Init_beeps_mic_in ()
60
+ {
61
+ Module mBeeps = rb_define_module("Beeps");
62
+
63
+ cMicIn = mBeeps.define_class("MicIn", Beeps::processor_class());
64
+ rb_define_alloc_func(cMicIn, alloc);
65
+ rb_define_method(cMicIn, "start", RUBY_METHOD_FUNC(start), 0);
66
+ rb_define_method(cMicIn, "stop", RUBY_METHOD_FUNC(stop), 0);
67
+ rb_define_method(cMicIn, "sample_rate", RUBY_METHOD_FUNC(get_sample_rate), 0);
68
+ rb_define_method(cMicIn, "nchannels", RUBY_METHOD_FUNC(get_nchannels), 0);
69
+ }
70
+
71
+
72
+ namespace Beeps
73
+ {
74
+
75
+
76
+ Class
77
+ mic_in_class ()
78
+ {
79
+ return cMicIn;
80
+ }
81
+
82
+
83
+ }// Beeps
@@ -4,13 +4,19 @@
4
4
  void Init_beeps ();
5
5
  void Init_beeps_exception ();
6
6
 
7
+ void Init_beeps_sound ();
8
+ void Init_beeps_sound_player ();
7
9
  void Init_beeps_processor ();
8
- void Init_beeps_sine_wave ();
9
- void Init_beeps_square_wave ();
10
- void Init_beeps_sawtooth_wave ();
10
+
11
+ void Init_beeps_oscillator ();
11
12
  void Init_beeps_file_in ();
13
+ void Init_beeps_mic_in ();
12
14
 
13
- void Init_beeps_sound ();
15
+ void Init_beeps_gain ();
16
+ void Init_beeps_adsr ();
17
+ void Init_beeps_time_stretch ();
18
+ void Init_beeps_pitch_shift ();
19
+ void Init_beeps_analyser ();
14
20
 
15
21
 
16
22
  extern "C" void
@@ -27,13 +33,19 @@ extern "C" void
27
33
  Init_beeps();
28
34
  Init_beeps_exception();
29
35
 
36
+ Init_beeps_sound();
37
+ Init_beeps_sound_player();
30
38
  Init_beeps_processor();
31
- Init_beeps_sine_wave();
32
- Init_beeps_square_wave();
33
- Init_beeps_sawtooth_wave();
39
+
40
+ Init_beeps_oscillator();
34
41
  Init_beeps_file_in();
42
+ Init_beeps_mic_in();
35
43
 
36
- Init_beeps_sound();
44
+ Init_beeps_gain();
45
+ Init_beeps_adsr();
46
+ Init_beeps_time_stretch();
47
+ Init_beeps_pitch_shift();
48
+ Init_beeps_analyser();
37
49
 
38
50
  RUCY_CATCH
39
51
  }
@@ -0,0 +1,88 @@
1
+ #include "beeps/ruby/generator.h"
2
+
3
+
4
+ #include "beeps/ruby/processor.h"
5
+ #include "defs.h"
6
+
7
+
8
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(Beeps::Oscillator)
9
+
10
+ #define THIS to<Beeps::Oscillator*>(self)
11
+
12
+ #define CHECK RUCY_CHECK_OBJ(Beeps::Oscillator, self)
13
+
14
+
15
+ static
16
+ VALUE alloc(VALUE klass)
17
+ {
18
+ return value(new Beeps::RubyProcessor<Beeps::Oscillator>, klass);
19
+ }
20
+
21
+ static
22
+ VALUE set_type(VALUE self, VALUE type)
23
+ {
24
+ CHECK;
25
+
26
+ THIS->set_type((Beeps::Oscillator::Type) to<uint>(type));
27
+ return type;
28
+ }
29
+
30
+ static
31
+ VALUE get_type(VALUE self)
32
+ {
33
+ CHECK;
34
+
35
+ return value(THIS->type());
36
+ }
37
+
38
+ static
39
+ VALUE set_frequency(VALUE self, VALUE frequency)
40
+ {
41
+ CHECK;
42
+
43
+ THIS->set_frequency(to<float>(frequency));
44
+ return frequency;
45
+ }
46
+
47
+ static
48
+ VALUE get_frequency(VALUE self)
49
+ {
50
+ CHECK;
51
+
52
+ return value(THIS->frequency());
53
+ }
54
+
55
+
56
+ static Class cOscillator;
57
+
58
+ void
59
+ Init_beeps_oscillator ()
60
+ {
61
+ Module mBeeps = rb_define_module("Beeps");
62
+
63
+ cOscillator = mBeeps.define_class("Oscillator", Beeps::processor_class());
64
+ rb_define_alloc_func(cOscillator, alloc);
65
+ rb_define_method(cOscillator, "type=", RUBY_METHOD_FUNC(set_type), 1);
66
+ rb_define_method(cOscillator, "type", RUBY_METHOD_FUNC(get_type), 0);
67
+ rb_define_method(cOscillator, "frequency=", RUBY_METHOD_FUNC(set_frequency), 1);
68
+ rb_define_method(cOscillator, "frequency", RUBY_METHOD_FUNC(get_frequency), 0);
69
+ cOscillator.define_const("NONE", Beeps::Oscillator::NONE);
70
+ cOscillator.define_const("SINE", Beeps::Oscillator::SINE);
71
+ cOscillator.define_const("TRIANGLE", Beeps::Oscillator::TRIANGLE);
72
+ cOscillator.define_const("SQUARE", Beeps::Oscillator::SQUARE);
73
+ cOscillator.define_const("SAWTOOTH", Beeps::Oscillator::SAWTOOTH);
74
+ }
75
+
76
+
77
+ namespace Beeps
78
+ {
79
+
80
+
81
+ Class
82
+ oscillator_class ()
83
+ {
84
+ return cOscillator;
85
+ }
86
+
87
+
88
+ }// Beeps