beeps 0.1.32 → 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.
- checksums.yaml +4 -4
- data/.doc/ext/beeps/adsr.cpp +139 -0
- data/.doc/ext/beeps/analyser.cpp +128 -0
- data/.doc/ext/beeps/beeps.cpp +9 -1
- data/.doc/ext/beeps/file_in.cpp +55 -9
- data/.doc/ext/beeps/gain.cpp +64 -0
- data/.doc/ext/beeps/mic_in.cpp +83 -0
- data/.doc/ext/beeps/native.cpp +20 -8
- data/.doc/ext/beeps/oscillator.cpp +88 -0
- data/.doc/ext/beeps/pitch_shift.cpp +64 -0
- data/.doc/ext/beeps/processor.cpp +31 -2
- data/.doc/ext/beeps/sound.cpp +90 -7
- data/.doc/ext/beeps/sound_player.cpp +156 -0
- data/.doc/ext/beeps/time_stretch.cpp +64 -0
- data/.github/workflows/release-gem.yml +4 -1
- data/ChangeLog.md +8 -0
- data/Rakefile +26 -4
- data/VERSION +1 -1
- data/beeps.gemspec +2 -2
- data/ext/beeps/adsr.cpp +150 -0
- data/ext/beeps/analyser.cpp +134 -0
- data/ext/beeps/beeps.cpp +10 -1
- data/ext/beeps/extconf.rb +1 -2
- data/ext/beeps/file_in.cpp +60 -9
- data/ext/beeps/gain.cpp +67 -0
- data/ext/beeps/mic_in.cpp +88 -0
- data/ext/beeps/native.cpp +20 -8
- data/ext/beeps/oscillator.cpp +93 -0
- data/ext/beeps/pitch_shift.cpp +67 -0
- data/ext/beeps/processor.cpp +34 -2
- data/ext/beeps/sound.cpp +99 -7
- data/ext/beeps/sound_player.cpp +169 -0
- data/ext/beeps/time_stretch.cpp +67 -0
- data/include/beeps/beeps.h +2 -1
- data/include/beeps/filter.h +179 -0
- data/include/beeps/generator.h +120 -0
- data/include/beeps/processor.h +37 -68
- data/include/beeps/ruby/filter.h +78 -0
- data/include/beeps/ruby/generator.h +60 -0
- data/include/beeps/ruby/processor.h +5 -45
- data/include/beeps/ruby/sound.h +14 -3
- data/include/beeps/signals.h +10 -4
- data/include/beeps/sound.h +67 -2
- data/lib/beeps/beeps.rb +6 -1
- data/lib/beeps/processor.rb +95 -15
- data/lib/beeps/sound.rb +29 -2
- data/src/adsr.cpp +245 -0
- data/src/analyser.cpp +254 -0
- data/src/beeps.cpp +11 -2
- data/src/file_in.cpp +94 -0
- data/src/gain.cpp +55 -0
- data/src/mic_in.cpp +262 -0
- data/src/mic_in.h +20 -0
- data/src/openal.cpp +2 -1
- data/src/oscillator.cpp +145 -0
- data/src/osx/signals.mm +83 -0
- data/src/pitch_shift.cpp +82 -0
- data/src/processor.cpp +202 -88
- data/src/processor.h +98 -0
- data/src/signals.cpp +326 -20
- data/src/signals.h +192 -2
- data/src/sound.cpp +735 -113
- data/src/sound.h +6 -1
- data/src/time_stretch.cpp +91 -0
- data/test/helper.rb +2 -1
- data/test/test_beeps.rb +10 -7
- data/test/test_beeps_init.rb +18 -0
- data/test/test_file_in.rb +15 -0
- data/test/test_processor.rb +50 -0
- data/test/test_sound.rb +87 -11
- data/test/test_sound_player.rb +134 -0
- metadata +54 -16
- data/.doc/ext/beeps/sawtooth_wave.cpp +0 -61
- data/.doc/ext/beeps/sine_wave.cpp +0 -61
- data/.doc/ext/beeps/square_wave.cpp +0 -61
- data/ext/beeps/sawtooth_wave.cpp +0 -64
- data/ext/beeps/sine_wave.cpp +0 -64
- 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!",
|
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
|
-
|
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
|
|
data/ext/beeps/file_in.cpp
CHANGED
@@ -1,30 +1,76 @@
|
|
1
|
-
#include "beeps/ruby/
|
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
|
-
|
8
|
+
RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(Beeps::FileIn)
|
8
9
|
|
9
10
|
#define THIS to<Beeps::FileIn*>(self)
|
10
11
|
|
11
|
-
#define CHECK
|
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
|
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
|
-
|
69
|
+
RUCY_DEF0(get_seconds)
|
23
70
|
{
|
24
|
-
|
71
|
+
CHECK;
|
25
72
|
|
26
|
-
|
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.
|
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
|
|
data/ext/beeps/gain.cpp
ADDED
@@ -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
|
-
|
9
|
-
void
|
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
|
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
|
-
|
32
|
-
|
33
|
-
Init_beeps_sawtooth_wave();
|
39
|
+
|
40
|
+
Init_beeps_oscillator();
|
34
41
|
Init_beeps_file_in();
|
42
|
+
Init_beeps_mic_in();
|
35
43
|
|
36
|
-
|
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
|
data/ext/beeps/processor.cpp
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
#include "defs.h"
|
6
6
|
|
7
7
|
|
8
|
-
|
8
|
+
RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(Beeps::Processor)
|
9
9
|
|
10
10
|
#define THIS to<Beeps::Processor*>(self)
|
11
11
|
|
12
|
-
#define CHECK
|
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
|
|