beeps 0.1.32 → 0.1.34
Sign up to get free protection for your applications and to get access to all the features.
- 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 +14 -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 +14 -2
- data/src/file_in.cpp +94 -0
- data/src/gain.cpp +55 -0
- data/src/mic_in.cpp +271 -0
- data/src/mic_in.h +22 -0
- data/src/openal.cpp +1 -2
- 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
|
|