beeps 0.1.31 → 0.1.33

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 (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
@@ -0,0 +1,150 @@
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
+ RUCY_DEF_ALLOC(alloc, klass)
17
+ {
18
+ return value(new Beeps::RubyProcessor<Beeps::ADSR>, klass);
19
+ }
20
+ RUCY_END
21
+
22
+ static
23
+ RUCY_DEF1(note_on, delay)
24
+ {
25
+ CHECK;
26
+
27
+ THIS->note_on(to<float>(delay));
28
+ }
29
+ RUCY_END
30
+
31
+ static
32
+ RUCY_DEF1(note_off, delay)
33
+ {
34
+ CHECK;
35
+
36
+ THIS->note_off(to<float>(delay));
37
+ }
38
+ RUCY_END
39
+
40
+ static
41
+ RUCY_DEF1(set_attack_time, time)
42
+ {
43
+ CHECK;
44
+
45
+ THIS->set_attack_time(to<float>(time));
46
+ return time;
47
+ }
48
+ RUCY_END
49
+
50
+ static
51
+ RUCY_DEF0(get_attack_time)
52
+ {
53
+ CHECK;
54
+
55
+ return value(THIS->attack_time());
56
+ }
57
+ RUCY_END
58
+
59
+ static
60
+ RUCY_DEF1(set_decay_time, time)
61
+ {
62
+ CHECK;
63
+
64
+ THIS->set_decay_time(to<float>(time));
65
+ return time;
66
+ }
67
+ RUCY_END
68
+
69
+ static
70
+ RUCY_DEF0(get_decay_time)
71
+ {
72
+ CHECK;
73
+
74
+ return value(THIS->decay_time());
75
+ }
76
+ RUCY_END
77
+
78
+ static
79
+ RUCY_DEF1(set_sustain_level, level)
80
+ {
81
+ CHECK;
82
+
83
+ THIS->set_sustain_level(to<float>(level));
84
+ return level;
85
+ }
86
+ RUCY_END
87
+
88
+ static
89
+ RUCY_DEF0(get_sustain_level)
90
+ {
91
+ CHECK;
92
+
93
+ return value(THIS->sustain_level());
94
+ }
95
+ RUCY_END
96
+
97
+ static
98
+ RUCY_DEF1(set_release_time, time)
99
+ {
100
+ CHECK;
101
+
102
+ THIS->set_release_time(to<float>(time));
103
+ return time;
104
+ }
105
+ RUCY_END
106
+
107
+ static
108
+ RUCY_DEF0(get_release_time)
109
+ {
110
+ CHECK;
111
+
112
+ return value(THIS->release_time());
113
+ }
114
+ RUCY_END
115
+
116
+
117
+ static Class cADSR;
118
+
119
+ void
120
+ Init_beeps_adsr ()
121
+ {
122
+ Module mBeeps = define_module("Beeps");
123
+
124
+ cADSR = mBeeps.define_class("ADSR", Beeps::processor_class());
125
+ cADSR.define_alloc_func(alloc);
126
+ cADSR.define_private_method("note_on!", note_on);
127
+ cADSR.define_private_method("note_off!", note_off);
128
+ cADSR.define_method( "attack_time=", set_attack_time);
129
+ cADSR.define_method( "attack_time", get_attack_time);
130
+ cADSR.define_method( "decay_time=", set_decay_time);
131
+ cADSR.define_method( "decay_time", get_decay_time);
132
+ cADSR.define_method("sustain_level=", set_sustain_level);
133
+ cADSR.define_method("sustain_level", get_sustain_level);
134
+ cADSR.define_method("release_time=", set_release_time);
135
+ cADSR.define_method("release_time", get_release_time);
136
+ }
137
+
138
+
139
+ namespace Beeps
140
+ {
141
+
142
+
143
+ Class
144
+ adsr_class ()
145
+ {
146
+ return cADSR;
147
+ }
148
+
149
+
150
+ }// Beeps
@@ -0,0 +1,134 @@
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
+ RUCY_DEF_ALLOC(alloc, klass)
18
+ {
19
+ return value(new Beeps::RubyProcessor<Beeps::Analyser>, klass);
20
+ }
21
+ RUCY_END
22
+
23
+ static
24
+ RUCY_DEF1(set_fft_size, size)
25
+ {
26
+ CHECK;
27
+
28
+ THIS->set_fft_size(to<uint>(size));
29
+ return size;
30
+ }
31
+ RUCY_END
32
+
33
+ static
34
+ RUCY_DEF0(get_fft_size)
35
+ {
36
+ CHECK;
37
+
38
+ return value(THIS->fft_size());
39
+ }
40
+ RUCY_END
41
+
42
+ static
43
+ RUCY_DEF0(get_resolution)
44
+ {
45
+ CHECK;
46
+
47
+ return value(THIS->resolution());
48
+ }
49
+ RUCY_END
50
+
51
+ static
52
+ RUCY_DEF1(each_signal, nsamples_)
53
+ {
54
+ CHECK;
55
+
56
+ if (!*THIS)
57
+ invalid_object_error(__FILE__, __LINE__);
58
+
59
+ const Beeps::Signals& sig = THIS->signals();
60
+
61
+ uint nsamples = to<uint>(nsamples_);
62
+ if (nsamples > sig.nsamples()) nsamples = sig.nsamples();
63
+
64
+ const double* samples = sig.samples();
65
+ uint nchannels = sig.nchannels();
66
+ uint start = (sig.nsamples() - nsamples) * nchannels;
67
+ switch (nchannels)
68
+ {
69
+ case 1:
70
+ for (uint i = start; i < nsamples; ++i)
71
+ rb_yield(value(samples[i]));
72
+ break;
73
+
74
+ case 2:
75
+ Value values[2];
76
+ Value args(2, values);
77
+ for (uint i = start; i < nsamples; i += 2)
78
+ {
79
+ args[0] = value(samples[i + 0]);
80
+ args[1] = value(samples[i + 1]);
81
+ rb_yield(args);
82
+ }
83
+ break;
84
+ }
85
+
86
+ return nil();
87
+ }
88
+ RUCY_END
89
+
90
+ static
91
+ RUCY_DEF0(each_spectrum)
92
+ {
93
+ CHECK;
94
+
95
+ if (!*THIS)
96
+ invalid_object_error(__FILE__, __LINE__);
97
+
98
+ for (auto val : THIS->spectrum())
99
+ rb_yield(value(val));
100
+
101
+ return nil();
102
+ }
103
+ RUCY_END
104
+
105
+
106
+ static Class cAnalyser;
107
+
108
+ void
109
+ Init_beeps_analyser ()
110
+ {
111
+ Module mBeeps = define_module("Beeps");
112
+
113
+ cAnalyser = mBeeps.define_class("Analyser", Beeps::processor_class());
114
+ cAnalyser.define_alloc_func(alloc);
115
+ cAnalyser.define_method("fft_size=", set_fft_size);
116
+ cAnalyser.define_method("fft_size", get_fft_size);
117
+ cAnalyser.define_method("resolution", get_resolution);
118
+ cAnalyser.define_private_method("each_signal!", each_signal);
119
+ cAnalyser.define_private_method("each_spectrum!", each_spectrum);
120
+ }
121
+
122
+
123
+ namespace Beeps
124
+ {
125
+
126
+
127
+ Class
128
+ analyser_class ()
129
+ {
130
+ return cAnalyser;
131
+ }
132
+
133
+
134
+ }// Beeps
data/ext/beeps/beeps.cpp CHANGED
@@ -21,6 +21,14 @@ RUCY_DEF0(fin)
21
21
  }
22
22
  RUCY_END
23
23
 
24
+ static
25
+ RUCY_DEF0(process_streams)
26
+ {
27
+ Beeps::process_streams();
28
+ return self;
29
+ }
30
+ RUCY_END
31
+
24
32
 
25
33
  static Module mBeeps;
26
34
 
@@ -29,7 +37,8 @@ Init_beeps ()
29
37
  {
30
38
  mBeeps = define_module("Beeps");
31
39
  mBeeps.define_singleton_method("init!", init);
32
- mBeeps.define_singleton_method("fin!", fin);
40
+ mBeeps.define_singleton_method("fin!", fin);
41
+ mBeeps.define_singleton_method("process_streams!", process_streams);
33
42
  }
34
43
 
35
44
 
data/ext/beeps/extconf.rb CHANGED
@@ -15,8 +15,7 @@ require 'beeps/extension'
15
15
  Xot::ExtConf.new Xot, Rucy, Beeps do
16
16
  setup do
17
17
  headers << 'ruby.h' << 'OpenAL/al.h' << 'OpenAL/alc.h'
18
- local_libs << 'rucy'
19
- frameworks << 'OpenAL' if osx?
18
+ frameworks << 'OpenAL' << 'AVFoundation' if osx?
20
19
  $LDFLAGS << ' -Wl,--out-implib=native.dll.a' if cygwin?
21
20
  end
22
21
 
@@ -1,30 +1,76 @@
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
  RUCY_DEF_ALLOC(alloc, klass)
16
17
  {
17
- return new_type<Beeps::FileIn>(klass);
18
+ return value(new Beeps::RubyProcessor<Beeps::FileIn>, klass);
19
+ }
20
+ RUCY_END
21
+
22
+ static
23
+ RUCY_DEF1(set_path, path)
24
+ {
25
+ CHECK;
26
+
27
+ THIS->set_path(path.c_str());
28
+ return path;
29
+ }
30
+ RUCY_END
31
+
32
+ static
33
+ RUCY_DEF0(get_path)
34
+ {
35
+ CHECK;
36
+
37
+ return value(THIS->path());
38
+ }
39
+ RUCY_END
40
+
41
+ static
42
+ RUCY_DEF0(get_sample_rate)
43
+ {
44
+ CHECK;
45
+
46
+ return value(THIS->sample_rate());
47
+ }
48
+ RUCY_END
49
+
50
+ static
51
+ RUCY_DEF0(get_nchannels)
52
+ {
53
+ CHECK;
54
+
55
+ return value(THIS->nchannels());
56
+ }
57
+ RUCY_END
58
+
59
+ static
60
+ RUCY_DEF0(get_nsamples)
61
+ {
62
+ CHECK;
63
+
64
+ return value(THIS->nsamples());
18
65
  }
19
66
  RUCY_END
20
67
 
21
68
  static
22
- RUCY_DEF1(initialize, path)
69
+ RUCY_DEF0(get_seconds)
23
70
  {
24
- RUCY_CHECK_OBJ(Beeps::FileIn, self);
71
+ CHECK;
25
72
 
26
- *THIS = Beeps::FileIn(to<const char*>(path));
27
- return self;
73
+ return value(THIS->seconds());
28
74
  }
29
75
  RUCY_END
30
76
 
@@ -38,7 +84,12 @@ Init_beeps_file_in ()
38
84
 
39
85
  cFileIn = mBeeps.define_class("FileIn", Beeps::processor_class());
40
86
  cFileIn.define_alloc_func(alloc);
41
- cFileIn.define_private_method("initialize", initialize);
87
+ cFileIn.define_method("path=", set_path);
88
+ cFileIn.define_method("path", get_path);
89
+ cFileIn.define_method("sample_rate", get_sample_rate);
90
+ cFileIn.define_method("nchannels", get_nchannels);
91
+ cFileIn.define_method("nsamples", get_nsamples);
92
+ cFileIn.define_method("seconds", get_seconds);
42
93
  }
43
94
 
44
95
 
@@ -0,0 +1,67 @@
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
+ RUCY_DEF_ALLOC(alloc, klass)
17
+ {
18
+ return value(new Beeps::RubyProcessor<Beeps::Gain>, klass);
19
+ }
20
+ RUCY_END
21
+
22
+ static
23
+ RUCY_DEF1(set_gain, gain)
24
+ {
25
+ CHECK;
26
+
27
+ THIS->set_gain(to<float>(gain));
28
+ return gain;
29
+ }
30
+ RUCY_END
31
+
32
+ static
33
+ RUCY_DEF0(get_gain)
34
+ {
35
+ CHECK;
36
+
37
+ return value(THIS->gain());
38
+ }
39
+ RUCY_END
40
+
41
+
42
+ static Class cGain;
43
+
44
+ void
45
+ Init_beeps_gain ()
46
+ {
47
+ Module mBeeps = define_module("Beeps");
48
+
49
+ cGain = mBeeps.define_class("Gain", Beeps::processor_class());
50
+ cGain.define_alloc_func(alloc);
51
+ cGain.define_method("gain=", set_gain);
52
+ cGain.define_method("gain", get_gain);
53
+ }
54
+
55
+
56
+ namespace Beeps
57
+ {
58
+
59
+
60
+ Class
61
+ gain_class ()
62
+ {
63
+ return cGain;
64
+ }
65
+
66
+
67
+ }// Beeps
@@ -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::MicIn)
9
+
10
+ #define THIS to<Beeps::MicIn*>(self)
11
+
12
+ #define CHECK RUCY_CHECK_OBJ(Beeps::MicIn, self)
13
+
14
+
15
+ static
16
+ RUCY_DEF_ALLOC(alloc, klass)
17
+ {
18
+ return value(new Beeps::RubyProcessor<Beeps::MicIn>, klass);
19
+ }
20
+ RUCY_END
21
+
22
+ static
23
+ RUCY_DEF0(start)
24
+ {
25
+ CHECK;
26
+
27
+ THIS->start();
28
+ return self;
29
+ }
30
+ RUCY_END
31
+
32
+ static
33
+ RUCY_DEF0(stop)
34
+ {
35
+ CHECK;
36
+
37
+ THIS->stop();
38
+ return self;
39
+ }
40
+ RUCY_END
41
+
42
+ static
43
+ RUCY_DEF0(get_sample_rate)
44
+ {
45
+ CHECK;
46
+
47
+ return value(THIS->sample_rate());
48
+ }
49
+ RUCY_END
50
+
51
+ static
52
+ RUCY_DEF0(get_nchannels)
53
+ {
54
+ CHECK;
55
+
56
+ return value(THIS->nchannels());
57
+ }
58
+ RUCY_END
59
+
60
+
61
+ static Class cMicIn;
62
+
63
+ void
64
+ Init_beeps_mic_in ()
65
+ {
66
+ Module mBeeps = define_module("Beeps");
67
+
68
+ cMicIn = mBeeps.define_class("MicIn", Beeps::processor_class());
69
+ cMicIn.define_alloc_func(alloc);
70
+ cMicIn.define_method("start", start);
71
+ cMicIn.define_method("stop", stop);
72
+ cMicIn.define_method("sample_rate", get_sample_rate);
73
+ cMicIn.define_method("nchannels", get_nchannels);
74
+ }
75
+
76
+
77
+ namespace Beeps
78
+ {
79
+
80
+
81
+ Class
82
+ mic_in_class ()
83
+ {
84
+ return cMicIn;
85
+ }
86
+
87
+
88
+ }// Beeps
data/ext/beeps/native.cpp CHANGED
@@ -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,93 @@
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
+ RUCY_DEF_ALLOC(alloc, klass)
17
+ {
18
+ return value(new Beeps::RubyProcessor<Beeps::Oscillator>, klass);
19
+ }
20
+ RUCY_END
21
+
22
+ static
23
+ RUCY_DEF1(set_type, type)
24
+ {
25
+ CHECK;
26
+
27
+ THIS->set_type((Beeps::Oscillator::Type) to<uint>(type));
28
+ return type;
29
+ }
30
+ RUCY_END
31
+
32
+ static
33
+ RUCY_DEF0(get_type)
34
+ {
35
+ CHECK;
36
+
37
+ return value(THIS->type());
38
+ }
39
+ RUCY_END
40
+
41
+ static
42
+ RUCY_DEF1(set_frequency, frequency)
43
+ {
44
+ CHECK;
45
+
46
+ THIS->set_frequency(to<float>(frequency));
47
+ return frequency;
48
+ }
49
+ RUCY_END
50
+
51
+ static
52
+ RUCY_DEF0(get_frequency)
53
+ {
54
+ CHECK;
55
+
56
+ return value(THIS->frequency());
57
+ }
58
+ RUCY_END
59
+
60
+
61
+ static Class cOscillator;
62
+
63
+ void
64
+ Init_beeps_oscillator ()
65
+ {
66
+ Module mBeeps = define_module("Beeps");
67
+
68
+ cOscillator = mBeeps.define_class("Oscillator", Beeps::processor_class());
69
+ cOscillator.define_alloc_func(alloc);
70
+ cOscillator.define_method("type=", set_type);
71
+ cOscillator.define_method("type", get_type);
72
+ cOscillator.define_method("frequency=", set_frequency);
73
+ cOscillator.define_method("frequency", get_frequency);
74
+ cOscillator.define_const("NONE", Beeps::Oscillator::NONE);
75
+ cOscillator.define_const("SINE", Beeps::Oscillator::SINE);
76
+ cOscillator.define_const("TRIANGLE", Beeps::Oscillator::TRIANGLE);
77
+ cOscillator.define_const("SQUARE", Beeps::Oscillator::SQUARE);
78
+ cOscillator.define_const("SAWTOOTH", Beeps::Oscillator::SAWTOOTH);
79
+ }
80
+
81
+
82
+ namespace Beeps
83
+ {
84
+
85
+
86
+ Class
87
+ oscillator_class ()
88
+ {
89
+ return cOscillator;
90
+ }
91
+
92
+
93
+ }// Beeps