beeps 0.1.31 → 0.1.33
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 +62 -0
- data/.github/workflows/test.yml +0 -6
- data/.github/workflows/utils.rb +13 -5
- data/ChangeLog.md +13 -0
- data/Rakefile +27 -6
- 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 +55 -17
- 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/.github/workflows/release.yml +0 -34
- 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,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
|
|
data/ext/beeps/sound.cpp
CHANGED
@@ -8,7 +8,7 @@ RUCY_DEFINE_VALUE_FROM_TO(Beeps::Sound)
|
|
8
8
|
|
9
9
|
#define THIS to<Beeps::Sound*>(self)
|
10
10
|
|
11
|
-
#define CHECK
|
11
|
+
#define CHECK RUCY_CHECK_OBJ(Beeps::Sound, self)
|
12
12
|
|
13
13
|
|
14
14
|
static
|
@@ -19,11 +19,13 @@ RUCY_DEF_ALLOC(alloc, klass)
|
|
19
19
|
RUCY_END
|
20
20
|
|
21
21
|
static
|
22
|
-
|
22
|
+
RUCY_DEF4(setup, processor, seconds, nchannels, sample_rate)
|
23
23
|
{
|
24
|
-
|
24
|
+
CHECK;
|
25
25
|
|
26
|
-
*THIS = Beeps::Sound(
|
26
|
+
*THIS = Beeps::Sound(
|
27
|
+
to<Beeps::Processor*>(processor),
|
28
|
+
to<float>(seconds), to<uint>(nchannels), to<double>(sample_rate));
|
27
29
|
return self;
|
28
30
|
}
|
29
31
|
RUCY_END
|
@@ -33,11 +35,92 @@ RUCY_DEF0(play)
|
|
33
35
|
{
|
34
36
|
CHECK;
|
35
37
|
|
36
|
-
THIS->play();
|
38
|
+
return value(THIS->play());
|
39
|
+
}
|
40
|
+
RUCY_END
|
41
|
+
|
42
|
+
static
|
43
|
+
RUCY_DEF1(save, path)
|
44
|
+
{
|
45
|
+
CHECK;
|
46
|
+
|
47
|
+
THIS->save(path.c_str());
|
37
48
|
return self;
|
38
49
|
}
|
39
50
|
RUCY_END
|
40
51
|
|
52
|
+
static
|
53
|
+
RUCY_DEF0(get_sample_rate)
|
54
|
+
{
|
55
|
+
CHECK;
|
56
|
+
|
57
|
+
return value(THIS->sample_rate());
|
58
|
+
}
|
59
|
+
RUCY_END
|
60
|
+
|
61
|
+
static
|
62
|
+
RUCY_DEF0(get_nchannels)
|
63
|
+
{
|
64
|
+
CHECK;
|
65
|
+
|
66
|
+
return value(THIS->nchannels());
|
67
|
+
}
|
68
|
+
RUCY_END
|
69
|
+
|
70
|
+
static
|
71
|
+
RUCY_DEF0(get_seconds)
|
72
|
+
{
|
73
|
+
CHECK;
|
74
|
+
|
75
|
+
return value(THIS->seconds());
|
76
|
+
}
|
77
|
+
RUCY_END
|
78
|
+
|
79
|
+
static
|
80
|
+
RUCY_DEF1(set_gain, gain)
|
81
|
+
{
|
82
|
+
CHECK;
|
83
|
+
|
84
|
+
THIS->set_gain(to<float>(gain));
|
85
|
+
return gain;
|
86
|
+
}
|
87
|
+
RUCY_END
|
88
|
+
|
89
|
+
static
|
90
|
+
RUCY_DEF0(get_gain)
|
91
|
+
{
|
92
|
+
CHECK;
|
93
|
+
|
94
|
+
return value(THIS->gain());
|
95
|
+
}
|
96
|
+
RUCY_END
|
97
|
+
|
98
|
+
static
|
99
|
+
RUCY_DEF1(set_loop, loop)
|
100
|
+
{
|
101
|
+
CHECK;
|
102
|
+
|
103
|
+
THIS->set_loop(to<bool>(loop));
|
104
|
+
return loop;
|
105
|
+
}
|
106
|
+
RUCY_END
|
107
|
+
|
108
|
+
static
|
109
|
+
RUCY_DEF0(get_loop)
|
110
|
+
{
|
111
|
+
CHECK;
|
112
|
+
|
113
|
+
return value(THIS->loop());
|
114
|
+
}
|
115
|
+
RUCY_END
|
116
|
+
|
117
|
+
static
|
118
|
+
RUCY_DEF1(load, path)
|
119
|
+
{
|
120
|
+
return value(Beeps::load_sound(to<const char*>(path)));
|
121
|
+
}
|
122
|
+
RUCY_END
|
123
|
+
|
41
124
|
|
42
125
|
static Class cSound;
|
43
126
|
|
@@ -48,8 +131,17 @@ Init_beeps_sound ()
|
|
48
131
|
|
49
132
|
cSound = mBeeps.define_class("Sound");
|
50
133
|
cSound.define_alloc_func(alloc);
|
51
|
-
cSound.define_private_method("
|
52
|
-
cSound.
|
134
|
+
cSound.define_private_method("setup", setup);
|
135
|
+
cSound.define_private_method("play!", play);
|
136
|
+
cSound.define_method("save", save);
|
137
|
+
cSound.define_method("sample_rate", get_sample_rate);
|
138
|
+
cSound.define_method("nchannels", get_nchannels);
|
139
|
+
cSound.define_method("seconds", get_seconds);
|
140
|
+
cSound.define_method("gain=", set_gain);
|
141
|
+
cSound.define_method("gain", get_gain);
|
142
|
+
cSound.define_method("loop=", set_loop);
|
143
|
+
cSound.define_method("loop", get_loop);
|
144
|
+
cSound.define_singleton_method("load", load);
|
53
145
|
}
|
54
146
|
|
55
147
|
|
@@ -0,0 +1,169 @@
|
|
1
|
+
#include "beeps/ruby/sound.h"
|
2
|
+
|
3
|
+
|
4
|
+
#include "defs.h"
|
5
|
+
|
6
|
+
|
7
|
+
RUCY_DEFINE_VALUE_FROM_TO(Beeps::SoundPlayer)
|
8
|
+
|
9
|
+
#define THIS to<Beeps::SoundPlayer*>(self)
|
10
|
+
|
11
|
+
#define CHECK RUCY_CHECK_OBJ(Beeps::SoundPlayer, self)
|
12
|
+
|
13
|
+
|
14
|
+
static
|
15
|
+
RUCY_DEF_ALLOC(alloc, klass)
|
16
|
+
{
|
17
|
+
return new_type<Beeps::SoundPlayer>(klass);
|
18
|
+
}
|
19
|
+
RUCY_END
|
20
|
+
|
21
|
+
static
|
22
|
+
RUCY_DEF0(play)
|
23
|
+
{
|
24
|
+
CHECK;
|
25
|
+
|
26
|
+
THIS->play();
|
27
|
+
return self;
|
28
|
+
}
|
29
|
+
RUCY_END
|
30
|
+
|
31
|
+
static
|
32
|
+
RUCY_DEF0(pause)
|
33
|
+
{
|
34
|
+
CHECK;
|
35
|
+
|
36
|
+
THIS->pause();
|
37
|
+
return self;
|
38
|
+
}
|
39
|
+
RUCY_END
|
40
|
+
|
41
|
+
static
|
42
|
+
RUCY_DEF0(rewind)
|
43
|
+
{
|
44
|
+
CHECK;
|
45
|
+
|
46
|
+
THIS->rewind();
|
47
|
+
return self;
|
48
|
+
}
|
49
|
+
RUCY_END
|
50
|
+
|
51
|
+
static
|
52
|
+
RUCY_DEF0(stop)
|
53
|
+
{
|
54
|
+
CHECK;
|
55
|
+
|
56
|
+
THIS->stop();
|
57
|
+
return self;
|
58
|
+
}
|
59
|
+
RUCY_END
|
60
|
+
|
61
|
+
static
|
62
|
+
RUCY_DEF0(is_playing)
|
63
|
+
{
|
64
|
+
CHECK;
|
65
|
+
|
66
|
+
return value(THIS->is_playing());
|
67
|
+
}
|
68
|
+
RUCY_END
|
69
|
+
|
70
|
+
static
|
71
|
+
RUCY_DEF0(is_paused)
|
72
|
+
{
|
73
|
+
CHECK;
|
74
|
+
|
75
|
+
return value(THIS->is_paused());
|
76
|
+
}
|
77
|
+
RUCY_END
|
78
|
+
|
79
|
+
static
|
80
|
+
RUCY_DEF0(is_stopped)
|
81
|
+
{
|
82
|
+
CHECK;
|
83
|
+
|
84
|
+
return value(THIS->is_stopped());
|
85
|
+
}
|
86
|
+
RUCY_END
|
87
|
+
|
88
|
+
static
|
89
|
+
RUCY_DEF1(set_gain, gain)
|
90
|
+
{
|
91
|
+
CHECK;
|
92
|
+
|
93
|
+
THIS->set_gain(to<float>(gain));
|
94
|
+
return gain;
|
95
|
+
}
|
96
|
+
RUCY_END
|
97
|
+
|
98
|
+
static
|
99
|
+
RUCY_DEF0(get_gain)
|
100
|
+
{
|
101
|
+
CHECK;
|
102
|
+
|
103
|
+
return value(THIS->gain());
|
104
|
+
}
|
105
|
+
RUCY_END
|
106
|
+
|
107
|
+
static
|
108
|
+
RUCY_DEF1(set_loop, loop)
|
109
|
+
{
|
110
|
+
CHECK;
|
111
|
+
|
112
|
+
THIS->set_loop(to<bool>(loop));
|
113
|
+
return loop;
|
114
|
+
}
|
115
|
+
RUCY_END
|
116
|
+
|
117
|
+
static
|
118
|
+
RUCY_DEF0(get_loop)
|
119
|
+
{
|
120
|
+
CHECK;
|
121
|
+
|
122
|
+
return value(THIS->loop());
|
123
|
+
}
|
124
|
+
RUCY_END
|
125
|
+
|
126
|
+
static
|
127
|
+
RUCY_DEF0(stop_all)
|
128
|
+
{
|
129
|
+
Beeps::stop_all_sound_players();
|
130
|
+
}
|
131
|
+
RUCY_END
|
132
|
+
|
133
|
+
|
134
|
+
static Class cSoundPlayer;
|
135
|
+
|
136
|
+
void
|
137
|
+
Init_beeps_sound_player ()
|
138
|
+
{
|
139
|
+
Module mBeeps = define_module("Beeps");
|
140
|
+
|
141
|
+
cSoundPlayer = mBeeps.define_class("SoundPlayer");
|
142
|
+
cSoundPlayer.define_alloc_func(alloc);
|
143
|
+
cSoundPlayer.define_method("play", play);
|
144
|
+
cSoundPlayer.define_method("pause", pause);
|
145
|
+
cSoundPlayer.define_method("rewind", rewind);
|
146
|
+
cSoundPlayer.define_method("stop", stop);
|
147
|
+
cSoundPlayer.define_method("playing?", is_playing);
|
148
|
+
cSoundPlayer.define_method("paused?", is_paused);
|
149
|
+
cSoundPlayer.define_method("stopped?", is_stopped);
|
150
|
+
cSoundPlayer.define_method("gain=", set_gain);
|
151
|
+
cSoundPlayer.define_method("gain", get_gain);
|
152
|
+
cSoundPlayer.define_method("loop=", set_loop);
|
153
|
+
cSoundPlayer.define_method("loop", get_loop);
|
154
|
+
cSoundPlayer.define_singleton_method("stop_all", stop_all);
|
155
|
+
}
|
156
|
+
|
157
|
+
|
158
|
+
namespace Beeps
|
159
|
+
{
|
160
|
+
|
161
|
+
|
162
|
+
Class
|
163
|
+
sound_player_class ()
|
164
|
+
{
|
165
|
+
return cSoundPlayer;
|
166
|
+
}
|
167
|
+
|
168
|
+
|
169
|
+
}// 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::TimeStretch)
|
9
|
+
|
10
|
+
#define THIS to<Beeps::TimeStretch*>(self)
|
11
|
+
|
12
|
+
#define CHECK RUCY_CHECK_OBJ(Beeps::TimeStretch, self)
|
13
|
+
|
14
|
+
|
15
|
+
static
|
16
|
+
RUCY_DEF_ALLOC(alloc, klass)
|
17
|
+
{
|
18
|
+
return value(new Beeps::RubyProcessor<Beeps::TimeStretch>, klass);
|
19
|
+
}
|
20
|
+
RUCY_END
|
21
|
+
|
22
|
+
static
|
23
|
+
RUCY_DEF1(set_scale, scale)
|
24
|
+
{
|
25
|
+
CHECK;
|
26
|
+
|
27
|
+
THIS->set_scale(to<float>(scale));
|
28
|
+
return scale;
|
29
|
+
}
|
30
|
+
RUCY_END
|
31
|
+
|
32
|
+
static
|
33
|
+
RUCY_DEF0(get_scale)
|
34
|
+
{
|
35
|
+
CHECK;
|
36
|
+
|
37
|
+
return value(THIS->scale());
|
38
|
+
}
|
39
|
+
RUCY_END
|
40
|
+
|
41
|
+
|
42
|
+
static Class cTimeStretch;
|
43
|
+
|
44
|
+
void
|
45
|
+
Init_beeps_time_stretch ()
|
46
|
+
{
|
47
|
+
Module mBeeps = define_module("Beeps");
|
48
|
+
|
49
|
+
cTimeStretch = mBeeps.define_class("TimeStretch", Beeps::processor_class());
|
50
|
+
cTimeStretch.define_alloc_func(alloc);
|
51
|
+
cTimeStretch.define_method("scale=", set_scale);
|
52
|
+
cTimeStretch.define_method("scale", get_scale);
|
53
|
+
}
|
54
|
+
|
55
|
+
|
56
|
+
namespace Beeps
|
57
|
+
{
|
58
|
+
|
59
|
+
|
60
|
+
Class
|
61
|
+
time_stretch_class ()
|
62
|
+
{
|
63
|
+
return cTimeStretch;
|
64
|
+
}
|
65
|
+
|
66
|
+
|
67
|
+
}// Beeps
|
data/include/beeps/beeps.h
CHANGED
@@ -0,0 +1,179 @@
|
|
1
|
+
// -*- c++ -*-
|
2
|
+
#pragma once
|
3
|
+
#ifndef __BEEPS_FILTER_H__
|
4
|
+
#define __BEEPS_FILTER_H__
|
5
|
+
|
6
|
+
|
7
|
+
#include <vector>
|
8
|
+
#include <beeps/processor.h>
|
9
|
+
|
10
|
+
|
11
|
+
namespace Beeps
|
12
|
+
{
|
13
|
+
|
14
|
+
|
15
|
+
class Gain : public Filter
|
16
|
+
{
|
17
|
+
|
18
|
+
typedef Filter Super;
|
19
|
+
|
20
|
+
public:
|
21
|
+
|
22
|
+
Gain (Processor* input = NULL);
|
23
|
+
|
24
|
+
virtual ~Gain ();
|
25
|
+
|
26
|
+
virtual void set_gain (float gain);
|
27
|
+
|
28
|
+
virtual float gain () const;
|
29
|
+
|
30
|
+
virtual void filter (
|
31
|
+
Context* context, Signals* signals, uint* offset) override;
|
32
|
+
|
33
|
+
struct Data;
|
34
|
+
|
35
|
+
Xot::PImpl<Data> self;
|
36
|
+
|
37
|
+
};// Gain
|
38
|
+
|
39
|
+
|
40
|
+
class ADSR : public Filter
|
41
|
+
{
|
42
|
+
|
43
|
+
typedef Filter Super;
|
44
|
+
|
45
|
+
public:
|
46
|
+
|
47
|
+
ADSR (Processor* input = NULL);
|
48
|
+
|
49
|
+
virtual ~ADSR ();
|
50
|
+
|
51
|
+
virtual void note_on (float delay = 0);
|
52
|
+
|
53
|
+
virtual void note_off (float delay = 0);
|
54
|
+
|
55
|
+
virtual void set_attack_time (float time);
|
56
|
+
|
57
|
+
virtual float attack_time () const;
|
58
|
+
|
59
|
+
virtual void set_decay_time (float time);
|
60
|
+
|
61
|
+
virtual float decay_time () const;
|
62
|
+
|
63
|
+
virtual void set_sustain_level (float level);
|
64
|
+
|
65
|
+
virtual float sustain_level () const;
|
66
|
+
|
67
|
+
virtual void set_release_time (float time);
|
68
|
+
|
69
|
+
virtual float release_time () const;
|
70
|
+
|
71
|
+
virtual void filter (
|
72
|
+
Context* context, Signals* signals, uint* offset) override;
|
73
|
+
|
74
|
+
virtual operator bool () const override;
|
75
|
+
|
76
|
+
struct Data;
|
77
|
+
|
78
|
+
Xot::PImpl<Data> self;
|
79
|
+
|
80
|
+
};// ADSR
|
81
|
+
|
82
|
+
|
83
|
+
class TimeStretch : public Filter
|
84
|
+
{
|
85
|
+
|
86
|
+
typedef Filter Super;
|
87
|
+
|
88
|
+
public:
|
89
|
+
|
90
|
+
TimeStretch (Processor* input = NULL);
|
91
|
+
|
92
|
+
virtual ~TimeStretch ();
|
93
|
+
|
94
|
+
virtual void reset () override;
|
95
|
+
|
96
|
+
virtual void set_scale (float scale);
|
97
|
+
|
98
|
+
virtual float scale () const;
|
99
|
+
|
100
|
+
virtual void filter (
|
101
|
+
Context* context, Signals* signals, uint* offset) override;
|
102
|
+
|
103
|
+
virtual operator bool () const override;
|
104
|
+
|
105
|
+
struct Data;
|
106
|
+
|
107
|
+
Xot::PImpl<Data> self;
|
108
|
+
|
109
|
+
};// TimeStretch
|
110
|
+
|
111
|
+
|
112
|
+
class PitchShift : public Filter
|
113
|
+
{
|
114
|
+
|
115
|
+
typedef Filter Super;
|
116
|
+
|
117
|
+
public:
|
118
|
+
|
119
|
+
PitchShift (Processor* input = NULL);
|
120
|
+
|
121
|
+
virtual ~PitchShift ();
|
122
|
+
|
123
|
+
virtual void reset () override;
|
124
|
+
|
125
|
+
virtual void set_shift (float shift);
|
126
|
+
|
127
|
+
virtual float shift () const;
|
128
|
+
|
129
|
+
virtual void filter (
|
130
|
+
Context* context, Signals* signals, uint* offset) override;
|
131
|
+
|
132
|
+
virtual operator bool () const override;
|
133
|
+
|
134
|
+
struct Data;
|
135
|
+
|
136
|
+
Xot::PImpl<Data> self;
|
137
|
+
|
138
|
+
};// PitchShift
|
139
|
+
|
140
|
+
|
141
|
+
class Analyser : public Filter
|
142
|
+
{
|
143
|
+
|
144
|
+
typedef Filter Super;
|
145
|
+
|
146
|
+
public:
|
147
|
+
|
148
|
+
typedef std::vector<float> Spectrum;
|
149
|
+
|
150
|
+
Analyser (uint fft_size = 1024, Processor* input = NULL);
|
151
|
+
|
152
|
+
virtual ~Analyser ();
|
153
|
+
|
154
|
+
virtual void set_fft_size (uint size);
|
155
|
+
|
156
|
+
virtual uint fft_size () const;
|
157
|
+
|
158
|
+
virtual float resolution () const;
|
159
|
+
|
160
|
+
virtual const Signals& signals () const;
|
161
|
+
|
162
|
+
virtual const Spectrum& spectrum () const;
|
163
|
+
|
164
|
+
virtual void filter (
|
165
|
+
Context* context, Signals* signals, uint* offset) override;
|
166
|
+
|
167
|
+
virtual operator bool () const override;
|
168
|
+
|
169
|
+
struct Data;
|
170
|
+
|
171
|
+
Xot::PImpl<Data> self;
|
172
|
+
|
173
|
+
};// Analyser
|
174
|
+
|
175
|
+
|
176
|
+
}// Beeps
|
177
|
+
|
178
|
+
|
179
|
+
#endif//EOH
|