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
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
|
@@ -0,0 +1,120 @@
|
|
1
|
+
// -*- c++ -*-
|
2
|
+
#pragma once
|
3
|
+
#ifndef __BEEPS_GENERATOR_H__
|
4
|
+
#define __BEEPS_GENERATOR_H__
|
5
|
+
|
6
|
+
|
7
|
+
#include <beeps/processor.h>
|
8
|
+
|
9
|
+
|
10
|
+
namespace Beeps
|
11
|
+
{
|
12
|
+
|
13
|
+
|
14
|
+
class Oscillator : public Generator
|
15
|
+
{
|
16
|
+
|
17
|
+
typedef Generator Super;
|
18
|
+
|
19
|
+
public:
|
20
|
+
|
21
|
+
enum Type {NONE = 0, SINE, TRIANGLE, SQUARE, SAWTOOTH};
|
22
|
+
|
23
|
+
Oscillator (Type type = SINE);
|
24
|
+
|
25
|
+
virtual ~Oscillator ();
|
26
|
+
|
27
|
+
virtual void reset () override;
|
28
|
+
|
29
|
+
virtual void set_type (Type type);
|
30
|
+
|
31
|
+
virtual Type type () const;
|
32
|
+
|
33
|
+
virtual void set_frequency (float frequency);
|
34
|
+
|
35
|
+
virtual float frequency () const;
|
36
|
+
|
37
|
+
virtual void generate (
|
38
|
+
Context* context, Signals* signals, uint* offset) override;
|
39
|
+
|
40
|
+
virtual operator bool () const override;
|
41
|
+
|
42
|
+
struct Data;
|
43
|
+
|
44
|
+
Xot::PImpl<Data> self;
|
45
|
+
|
46
|
+
};// Oscillator
|
47
|
+
|
48
|
+
|
49
|
+
class FileIn : public Generator
|
50
|
+
{
|
51
|
+
|
52
|
+
typedef Generator Super;
|
53
|
+
|
54
|
+
public:
|
55
|
+
|
56
|
+
FileIn (const char* path = NULL);
|
57
|
+
|
58
|
+
virtual ~FileIn ();
|
59
|
+
|
60
|
+
virtual void reset () override;
|
61
|
+
|
62
|
+
virtual void set_path(const char* path);
|
63
|
+
|
64
|
+
virtual const char* path () const;
|
65
|
+
|
66
|
+
virtual double sample_rate () const;
|
67
|
+
|
68
|
+
virtual uint nchannels () const;
|
69
|
+
|
70
|
+
virtual uint nsamples () const;
|
71
|
+
|
72
|
+
virtual float seconds () const;
|
73
|
+
|
74
|
+
virtual void generate (
|
75
|
+
Context* context, Signals* signals, uint* offset) override;
|
76
|
+
|
77
|
+
virtual operator bool () const override;
|
78
|
+
|
79
|
+
struct Data;
|
80
|
+
|
81
|
+
Xot::PImpl<Data> self;
|
82
|
+
|
83
|
+
};// FileIn
|
84
|
+
|
85
|
+
|
86
|
+
class MicIn : public Generator
|
87
|
+
{
|
88
|
+
|
89
|
+
typedef Generator Super;
|
90
|
+
|
91
|
+
public:
|
92
|
+
|
93
|
+
MicIn (uint nchannels = 1, double sample_rate = 0);
|
94
|
+
|
95
|
+
virtual ~MicIn ();
|
96
|
+
|
97
|
+
virtual void start ();
|
98
|
+
|
99
|
+
virtual void stop ();
|
100
|
+
|
101
|
+
virtual double sample_rate () const;
|
102
|
+
|
103
|
+
virtual uint nchannels () const;
|
104
|
+
|
105
|
+
virtual void generate (
|
106
|
+
Context* context, Signals* signals, uint* offset) override;
|
107
|
+
|
108
|
+
virtual operator bool () const override;
|
109
|
+
|
110
|
+
struct Data;
|
111
|
+
|
112
|
+
Xot::PImpl<Data> self;
|
113
|
+
|
114
|
+
};// MicIn
|
115
|
+
|
116
|
+
|
117
|
+
}// Beeps
|
118
|
+
|
119
|
+
|
120
|
+
#endif//EOH
|