beeps 0.1.32 → 0.1.33

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) 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 +4 -1
  16. data/ChangeLog.md +8 -0
  17. data/Rakefile +26 -4
  18. data/VERSION +1 -1
  19. data/beeps.gemspec +2 -2
  20. data/ext/beeps/adsr.cpp +150 -0
  21. data/ext/beeps/analyser.cpp +134 -0
  22. data/ext/beeps/beeps.cpp +10 -1
  23. data/ext/beeps/extconf.rb +1 -2
  24. data/ext/beeps/file_in.cpp +60 -9
  25. data/ext/beeps/gain.cpp +67 -0
  26. data/ext/beeps/mic_in.cpp +88 -0
  27. data/ext/beeps/native.cpp +20 -8
  28. data/ext/beeps/oscillator.cpp +93 -0
  29. data/ext/beeps/pitch_shift.cpp +67 -0
  30. data/ext/beeps/processor.cpp +34 -2
  31. data/ext/beeps/sound.cpp +99 -7
  32. data/ext/beeps/sound_player.cpp +169 -0
  33. data/ext/beeps/time_stretch.cpp +67 -0
  34. data/include/beeps/beeps.h +2 -1
  35. data/include/beeps/filter.h +179 -0
  36. data/include/beeps/generator.h +120 -0
  37. data/include/beeps/processor.h +37 -68
  38. data/include/beeps/ruby/filter.h +78 -0
  39. data/include/beeps/ruby/generator.h +60 -0
  40. data/include/beeps/ruby/processor.h +5 -45
  41. data/include/beeps/ruby/sound.h +14 -3
  42. data/include/beeps/signals.h +10 -4
  43. data/include/beeps/sound.h +67 -2
  44. data/lib/beeps/beeps.rb +6 -1
  45. data/lib/beeps/processor.rb +95 -15
  46. data/lib/beeps/sound.rb +29 -2
  47. data/src/adsr.cpp +245 -0
  48. data/src/analyser.cpp +254 -0
  49. data/src/beeps.cpp +11 -2
  50. data/src/file_in.cpp +94 -0
  51. data/src/gain.cpp +55 -0
  52. data/src/mic_in.cpp +262 -0
  53. data/src/mic_in.h +20 -0
  54. data/src/openal.cpp +2 -1
  55. data/src/oscillator.cpp +145 -0
  56. data/src/osx/signals.mm +83 -0
  57. data/src/pitch_shift.cpp +82 -0
  58. data/src/processor.cpp +202 -88
  59. data/src/processor.h +98 -0
  60. data/src/signals.cpp +326 -20
  61. data/src/signals.h +192 -2
  62. data/src/sound.cpp +735 -113
  63. data/src/sound.h +6 -1
  64. data/src/time_stretch.cpp +91 -0
  65. data/test/helper.rb +2 -1
  66. data/test/test_beeps.rb +10 -7
  67. data/test/test_beeps_init.rb +18 -0
  68. data/test/test_file_in.rb +15 -0
  69. data/test/test_processor.rb +50 -0
  70. data/test/test_sound.rb +87 -11
  71. data/test/test_sound_player.rb +134 -0
  72. metadata +54 -16
  73. data/.doc/ext/beeps/sawtooth_wave.cpp +0 -61
  74. data/.doc/ext/beeps/sine_wave.cpp +0 -61
  75. data/.doc/ext/beeps/square_wave.cpp +0 -61
  76. data/ext/beeps/sawtooth_wave.cpp +0 -64
  77. data/ext/beeps/sine_wave.cpp +0 -64
  78. data/ext/beeps/square_wave.cpp +0 -64
@@ -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
@@ -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::PitchShift)
9
+
10
+ #define THIS to<Beeps::PitchShift*>(self)
11
+
12
+ #define CHECK RUCY_CHECK_OBJ(Beeps::PitchShift, self)
13
+
14
+
15
+ static
16
+ RUCY_DEF_ALLOC(alloc, klass)
17
+ {
18
+ return value(new Beeps::RubyProcessor<Beeps::PitchShift>, klass);
19
+ }
20
+ RUCY_END
21
+
22
+ static
23
+ RUCY_DEF1(set_shift, shift)
24
+ {
25
+ CHECK;
26
+
27
+ THIS->set_shift(to<float>(shift));
28
+ return shift;
29
+ }
30
+ RUCY_END
31
+
32
+ static
33
+ RUCY_DEF0(get_shift)
34
+ {
35
+ CHECK;
36
+
37
+ return value(THIS->shift());
38
+ }
39
+ RUCY_END
40
+
41
+
42
+ static Class cPitchShift;
43
+
44
+ void
45
+ Init_beeps_pitch_shift ()
46
+ {
47
+ Module mBeeps = define_module("Beeps");
48
+
49
+ cPitchShift = mBeeps.define_class("PitchShift", Beeps::processor_class());
50
+ cPitchShift.define_alloc_func(alloc);
51
+ cPitchShift.define_method("shift=", set_shift);
52
+ cPitchShift.define_method("shift", get_shift);
53
+ }
54
+
55
+
56
+ namespace Beeps
57
+ {
58
+
59
+
60
+ Class
61
+ pitch_shift_class ()
62
+ {
63
+ return cPitchShift;
64
+ }
65
+
66
+
67
+ }// Beeps
@@ -5,11 +5,11 @@
5
5
  #include "defs.h"
6
6
 
7
7
 
8
- RUCY_DEFINE_VALUE_FROM_TO(Beeps::Processor)
8
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(Beeps::Processor)
9
9
 
10
10
  #define THIS to<Beeps::Processor*>(self)
11
11
 
12
- #define CHECK RUCY_CHECK_OBJECT(Beeps::Processor, self)
12
+ #define CHECK RUCY_CHECK_OBJ(Beeps::Processor, self)
13
13
 
14
14
 
15
15
  static
@@ -19,6 +19,35 @@ RUCY_DEF_ALLOC(alloc, klass)
19
19
  }
20
20
  RUCY_END
21
21
 
22
+ static
23
+ RUCY_DEF0(reset)
24
+ {
25
+ CHECK;
26
+
27
+ THIS->reset();
28
+ return self;
29
+ }
30
+ RUCY_END
31
+
32
+ static
33
+ RUCY_DEF1(set_input, input)
34
+ {
35
+ CHECK;
36
+
37
+ THIS->set_input(input ? to<Beeps::Processor*>(input) : NULL);
38
+ return input;
39
+ }
40
+ RUCY_END
41
+
42
+ static
43
+ RUCY_DEF0(get_input)
44
+ {
45
+ CHECK;
46
+
47
+ return value(THIS->input());
48
+ }
49
+ RUCY_END
50
+
22
51
 
23
52
  static Class cProcessor;
24
53
 
@@ -29,6 +58,9 @@ Init_beeps_processor ()
29
58
 
30
59
  cProcessor = mBeeps.define_class("Processor");
31
60
  cProcessor.define_alloc_func(alloc);
61
+ cProcessor.define_method("reset", reset);
62
+ cProcessor.define_method("input=", set_input);
63
+ cProcessor.define_method("input", get_input);
32
64
  }
33
65
 
34
66