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.
- 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
|