beeps 0.1.12 → 0.1.13
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 +5 -5
- data/.doc/ext/beeps/beeps.cpp +0 -5
- data/.doc/ext/beeps/file_in.cpp +0 -5
- data/.doc/ext/beeps/native.cpp +0 -4
- data/.doc/ext/beeps/processor.cpp +1 -5
- data/.doc/ext/beeps/sawtooth_wave.cpp +0 -5
- data/.doc/ext/beeps/sine_wave.cpp +0 -5
- data/.doc/ext/beeps/sound.cpp +0 -5
- data/.doc/ext/beeps/square_wave.cpp +0 -5
- data/README.md +1 -1
- data/Rakefile +15 -12
- data/VERSION +1 -1
- data/beeps.gemspec +5 -7
- data/ext/beeps/beeps.cpp +0 -5
- data/ext/beeps/defs.h +3 -2
- data/ext/beeps/extconf.rb +2 -3
- data/ext/beeps/file_in.cpp +0 -5
- data/ext/beeps/native.cpp +0 -4
- data/ext/beeps/processor.cpp +1 -5
- data/ext/beeps/sawtooth_wave.cpp +0 -5
- data/ext/beeps/sine_wave.cpp +0 -5
- data/ext/beeps/sound.cpp +0 -5
- data/ext/beeps/square_wave.cpp +0 -5
- data/include/beeps.h +5 -0
- data/include/beeps/debug.h +23 -0
- data/include/beeps/processor.h +9 -6
- data/include/beeps/signals.h +2 -9
- data/include/beeps/sound.h +2 -1
- data/lib/beeps/module.rb +4 -19
- data/lib/beeps/processor.rb +16 -20
- data/src/beeps.cpp +3 -64
- data/src/exception.cpp +0 -3
- data/src/openal.cpp +63 -174
- data/src/openal.h +15 -4
- data/src/processor.cpp +5 -5
- data/src/signals.cpp +21 -19
- data/src/signals.h +23 -0
- data/src/sound.cpp +173 -14
- data/src/sound.h +17 -0
- metadata +27 -70
- data/include/beeps/openal.h +0 -34
- data/src/stk/include/Blit.h +0 -151
- data/src/stk/include/BlitSaw.h +0 -148
- data/src/stk/include/BlitSquare.h +0 -170
- data/src/stk/include/FileRead.h +0 -141
- data/src/stk/include/FileWvIn.h +0 -195
- data/src/stk/include/Generator.h +0 -50
- data/src/stk/include/SineWave.h +0 -159
- data/src/stk/include/Stk.h +0 -589
- data/src/stk/include/WvIn.h +0 -46
- data/src/stk/src/Blit.cpp +0 -78
- data/src/stk/src/BlitSaw.cpp +0 -91
- data/src/stk/src/BlitSquare.cpp +0 -95
- data/src/stk/src/FileRead.cpp +0 -903
- data/src/stk/src/FileWvIn.cpp +0 -260
- data/src/stk/src/SineWave.cpp +0 -78
- data/src/stk/src/Stk.cpp +0 -395
data/include/beeps/signals.h
CHANGED
@@ -8,9 +8,6 @@
|
|
8
8
|
#include <beeps/defs.h>
|
9
9
|
|
10
10
|
|
11
|
-
namespace stk {class StkFrames;};
|
12
|
-
|
13
|
-
|
14
11
|
namespace Beeps
|
15
12
|
{
|
16
13
|
|
@@ -24,7 +21,7 @@ namespace Beeps
|
|
24
21
|
|
25
22
|
~Signals ();
|
26
23
|
|
27
|
-
Signals
|
24
|
+
Signals dup () const;
|
28
25
|
|
29
26
|
float seconds () const;
|
30
27
|
|
@@ -32,17 +29,13 @@ namespace Beeps
|
|
32
29
|
|
33
30
|
uint channels () const;
|
34
31
|
|
35
|
-
stk::StkFrames* frames ();
|
36
|
-
|
37
|
-
const stk::StkFrames* frames () const;
|
38
|
-
|
39
32
|
operator bool () const;
|
40
33
|
|
41
34
|
bool operator ! () const;
|
42
35
|
|
43
36
|
struct Data;
|
44
37
|
|
45
|
-
Xot::
|
38
|
+
Xot::PSharedImpl<Data> self;
|
46
39
|
|
47
40
|
};// Signals
|
48
41
|
|
data/include/beeps/sound.h
CHANGED
data/lib/beeps/module.rb
CHANGED
@@ -6,6 +6,8 @@ module Beeps
|
|
6
6
|
|
7
7
|
module Module
|
8
8
|
|
9
|
+
module_function
|
10
|
+
|
9
11
|
def name ()
|
10
12
|
super.split('::')[-2]
|
11
13
|
end
|
@@ -15,10 +17,10 @@ module Beeps
|
|
15
17
|
end
|
16
18
|
|
17
19
|
def root_dir (path = '')
|
18
|
-
File.expand_path "
|
20
|
+
File.expand_path "../../#{path}", __dir__
|
19
21
|
end
|
20
22
|
|
21
|
-
def
|
23
|
+
def inc_dir ()
|
22
24
|
root_dir 'include'
|
23
25
|
end
|
24
26
|
|
@@ -26,23 +28,6 @@ module Beeps
|
|
26
28
|
root_dir 'lib'
|
27
29
|
end
|
28
30
|
|
29
|
-
def task_dir ()
|
30
|
-
root_dir 'task'
|
31
|
-
end
|
32
|
-
|
33
|
-
def load_tasks (*names)
|
34
|
-
if names.empty?
|
35
|
-
Dir["#{task_dir}/**/*.rake"].each {|path| load path}
|
36
|
-
else
|
37
|
-
names.each do |name|
|
38
|
-
path = "#{task_dir}/#{name}.rake"
|
39
|
-
load path if File.exist? path
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
extend self
|
45
|
-
|
46
31
|
end# Module
|
47
32
|
|
48
33
|
|
data/lib/beeps/processor.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
require 'xot/setter'
|
5
|
+
require 'xot/universal_accessor'
|
5
6
|
require 'xot/block_util'
|
6
7
|
require 'beeps/ext'
|
7
8
|
|
@@ -9,50 +10,45 @@ require 'beeps/ext'
|
|
9
10
|
module Beeps
|
10
11
|
|
11
12
|
|
12
|
-
class
|
13
|
+
class Processor
|
13
14
|
|
14
15
|
include Xot::Setter
|
15
16
|
|
16
|
-
|
17
|
-
alias freq frequency
|
18
|
-
|
19
|
-
def initialize (opts = {}, &block)
|
17
|
+
def initialize (options = nil, &block)
|
20
18
|
super()
|
21
|
-
set
|
19
|
+
set options if options
|
22
20
|
Xot::BlockUtil.instance_eval_or_block_call self, &block if block
|
23
21
|
end
|
24
22
|
|
23
|
+
end# Processor
|
24
|
+
|
25
|
+
|
26
|
+
class SineWave
|
27
|
+
|
28
|
+
alias freq= frequency=
|
29
|
+
alias freq frequency
|
30
|
+
|
31
|
+
universal_accessor :frequency, :freq
|
32
|
+
|
25
33
|
end# SineWave
|
26
34
|
|
27
35
|
|
28
36
|
class SquareWave
|
29
37
|
|
30
|
-
include Xot::Setter
|
31
|
-
|
32
38
|
alias freq= frequency=
|
33
39
|
alias freq frequency
|
34
40
|
|
35
|
-
|
36
|
-
super()
|
37
|
-
set opts
|
38
|
-
Xot::BlockUtil.instance_eval_or_block_call self, &block if block
|
39
|
-
end
|
41
|
+
universal_accessor :frequency, :freq
|
40
42
|
|
41
43
|
end# SquareWave
|
42
44
|
|
43
45
|
|
44
46
|
class SawtoothWave
|
45
47
|
|
46
|
-
include Xot::Setter
|
47
|
-
|
48
48
|
alias freq= frequency=
|
49
49
|
alias freq frequency
|
50
50
|
|
51
|
-
|
52
|
-
super()
|
53
|
-
set opts
|
54
|
-
Xot::BlockUtil.instance_eval_or_block_call self, &block if block
|
55
|
-
end
|
51
|
+
universal_accessor :frequency, :freq
|
56
52
|
|
57
53
|
end# SawtoothWave
|
58
54
|
|
data/src/beeps.cpp
CHANGED
@@ -2,90 +2,29 @@
|
|
2
2
|
#include "beeps/beeps.h"
|
3
3
|
|
4
4
|
|
5
|
-
#include <stdlib.h>
|
6
5
|
#include "Stk.h"
|
7
|
-
#include "beeps/openal.h"
|
8
6
|
#include "beeps/exception.h"
|
7
|
+
#include "openal.h"
|
9
8
|
|
10
9
|
|
11
10
|
namespace Beeps
|
12
11
|
{
|
13
12
|
|
14
13
|
|
15
|
-
namespace global
|
16
|
-
{
|
17
|
-
|
18
|
-
static ALCdevice* device = NULL;
|
19
|
-
|
20
|
-
static ALCcontext* context = NULL;
|
21
|
-
|
22
|
-
}// global
|
23
|
-
|
24
|
-
|
25
|
-
namespace g = global;
|
26
|
-
|
27
|
-
|
28
|
-
static void
|
29
|
-
cleanup ()
|
30
|
-
{
|
31
|
-
void cleanup_sources ();
|
32
|
-
cleanup_sources();
|
33
|
-
|
34
|
-
alcMakeContextCurrent(NULL);
|
35
|
-
|
36
|
-
if (g::context)
|
37
|
-
{
|
38
|
-
alcDestroyContext(g::context);
|
39
|
-
g::context = NULL;
|
40
|
-
}
|
41
|
-
|
42
|
-
if (g::device)
|
43
|
-
{
|
44
|
-
alcCloseDevice(g::device);
|
45
|
-
g::device = NULL;
|
46
|
-
}
|
47
|
-
}
|
48
|
-
|
49
14
|
void
|
50
15
|
init ()
|
51
16
|
{
|
52
|
-
|
53
|
-
beeps_error(__FILE__, __LINE__, "Beeps::init(): already initialized.");
|
17
|
+
OpenAL_init();
|
54
18
|
|
55
19
|
stk::Stk::setSampleRate(44100);
|
56
|
-
|
57
|
-
g::device = alcOpenDevice(NULL);
|
58
|
-
if (!g::device) goto FAILED;
|
59
|
-
|
60
|
-
g::context = alcCreateContext(g::device, NULL);
|
61
|
-
if (!g::context) goto FAILED;
|
62
|
-
|
63
|
-
if (!alcMakeContextCurrent(g::context))
|
64
|
-
goto FAILED;
|
65
|
-
|
66
|
-
return;
|
67
|
-
|
68
|
-
FAILED:
|
69
|
-
cleanup();
|
70
|
-
openal_error(__FILE__, __LINE__, "failed to setup OpenAL.");
|
71
20
|
}
|
72
21
|
|
73
22
|
void
|
74
23
|
fin ()
|
75
24
|
{
|
76
|
-
|
77
|
-
beeps_error(__FILE__, __LINE__, "Beeps::fin(): not initialized.");
|
78
|
-
|
79
|
-
cleanup();
|
80
|
-
}
|
81
|
-
|
82
|
-
ALCdevice*
|
83
|
-
get_device ()
|
84
|
-
{
|
85
|
-
return g::device;
|
25
|
+
OpenAL_fin();
|
86
26
|
}
|
87
27
|
|
88
|
-
|
89
28
|
uint
|
90
29
|
sampling_rate ()
|
91
30
|
{
|
data/src/exception.cpp
CHANGED
data/src/openal.cpp
CHANGED
@@ -1,221 +1,110 @@
|
|
1
|
-
#include "beeps/openal.h"
|
2
|
-
|
3
|
-
|
4
|
-
#include <vector>
|
5
|
-
#include <xot/debug.h>
|
6
|
-
#include "beeps/defs.h"
|
7
|
-
#include "beeps/sound.h"
|
8
|
-
#include "beeps/exception.h"
|
9
1
|
#include "openal.h"
|
10
2
|
|
11
3
|
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#define LOG(...)
|
16
|
-
#endif
|
4
|
+
#include "beeps/exception.h"
|
5
|
+
#include "beeps/debug.h"
|
6
|
+
#include "sound.h"
|
17
7
|
|
18
8
|
|
19
9
|
namespace Beeps
|
20
10
|
{
|
21
11
|
|
22
12
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
ALCenum
|
27
|
-
get_error ()
|
28
|
-
{
|
29
|
-
return alcGetError(get_device());
|
30
|
-
}
|
31
|
-
|
32
|
-
bool
|
33
|
-
no_error ()
|
13
|
+
namespace global
|
34
14
|
{
|
35
|
-
return get_error() == ALC_NO_ERROR;
|
36
|
-
}
|
37
15
|
|
38
|
-
|
39
|
-
is_error (ALCenum err)
|
40
|
-
{
|
41
|
-
return get_error() == err;
|
42
|
-
}
|
43
|
-
|
44
|
-
static String
|
45
|
-
get_error_name (ALenum error)
|
46
|
-
{
|
47
|
-
switch (error)
|
48
|
-
{
|
49
|
-
case ALC_NO_ERROR: return "ALC_NO_ERROR";
|
50
|
-
case ALC_INVALID_DEVICE: return "ALC_INVALID_DEVICE";
|
51
|
-
case ALC_INVALID_CONTEXT: return "ALC_INVALID_CONTEXT";
|
52
|
-
case ALC_INVALID_ENUM: return "ALC_INVALID_ENUM";
|
53
|
-
case ALC_OUT_OF_MEMORY: return "ALC_OUT_OF_MEMORY";
|
54
|
-
}
|
55
|
-
return "UNKNOWN ERROR";
|
56
|
-
}
|
16
|
+
static ALCdevice* device = NULL;
|
57
17
|
|
58
|
-
|
59
|
-
check_error (const char* file, int line)
|
60
|
-
{
|
61
|
-
ALCenum e = get_error();
|
62
|
-
if (e != ALC_NO_ERROR)
|
63
|
-
openal_error(file, line, "OpenAL error %s", get_error_name(e).c_str());
|
64
|
-
}
|
18
|
+
static ALCcontext* context = NULL;
|
65
19
|
|
66
|
-
|
67
|
-
clear_error ()
|
68
|
-
{
|
69
|
-
get_error();
|
70
|
-
}
|
20
|
+
}// global
|
71
21
|
|
72
22
|
|
73
|
-
|
23
|
+
static void
|
24
|
+
cleanup ()
|
74
25
|
{
|
26
|
+
Sound_cleanup_sources();
|
75
27
|
|
76
|
-
|
77
|
-
|
78
|
-
typedef boost::shared_ptr<This> Ptr;
|
79
|
-
|
80
|
-
ALint id;
|
28
|
+
alcMakeContextCurrent(NULL);
|
81
29
|
|
82
|
-
|
30
|
+
if (global::context)
|
83
31
|
{
|
84
|
-
|
85
|
-
|
86
|
-
if (!no_error()) return Ptr();
|
87
|
-
|
88
|
-
This* p = new This;
|
89
|
-
p->id = id_;
|
90
|
-
return Ptr(p);
|
32
|
+
alcDestroyContext(global::context);
|
33
|
+
global::context = NULL;
|
91
34
|
}
|
92
35
|
|
93
|
-
|
94
|
-
: id(-1)
|
36
|
+
if (global::device)
|
95
37
|
{
|
38
|
+
alcCloseDevice(global::device);
|
39
|
+
global::device = NULL;
|
96
40
|
}
|
41
|
+
}
|
97
42
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
alDeleteSources(1, &id_);
|
104
|
-
check_error(__FILE__, __LINE__);
|
105
|
-
}
|
106
|
-
|
107
|
-
void play (const Sound& sound)
|
108
|
-
{
|
109
|
-
if (!sound)
|
110
|
-
argument_error(__FILE__, __LINE__);
|
111
|
-
|
112
|
-
if (!*this)
|
113
|
-
invalid_state_error(__FILE__, __LINE__);
|
114
|
-
|
115
|
-
alSourcei(id, AL_BUFFER, get_sound_buffer_id(sound));
|
116
|
-
alSourcePlay(id);
|
117
|
-
check_error(__FILE__, __LINE__);
|
118
|
-
}
|
119
|
-
|
120
|
-
void stop ()
|
121
|
-
{
|
122
|
-
if (!*this)
|
123
|
-
invalid_state_error(__FILE__, __LINE__);
|
124
|
-
|
125
|
-
alSourceStop(id);
|
126
|
-
check_error(__FILE__, __LINE__);
|
127
|
-
}
|
43
|
+
void
|
44
|
+
OpenAL_init ()
|
45
|
+
{
|
46
|
+
if (global::device || global::context)
|
47
|
+
beeps_error(__FILE__, __LINE__, "already initialized.");
|
128
48
|
|
129
|
-
|
130
|
-
|
131
|
-
if (!*this) return false;
|
49
|
+
global::device = alcOpenDevice(NULL);
|
50
|
+
if (!global::device) goto FAILED;
|
132
51
|
|
133
|
-
|
134
|
-
|
135
|
-
check_error(__FILE__, __LINE__);
|
52
|
+
global::context = alcCreateContext(global::device, NULL);
|
53
|
+
if (!global::context) goto FAILED;
|
136
54
|
|
137
|
-
|
138
|
-
|
55
|
+
if (!alcMakeContextCurrent(global::context))
|
56
|
+
goto FAILED;
|
139
57
|
|
140
|
-
|
141
|
-
{
|
142
|
-
return id >= 0;
|
143
|
-
}
|
58
|
+
return;
|
144
59
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
};// SoundSource
|
60
|
+
FAILED:
|
61
|
+
cleanup();
|
62
|
+
openal_error(__FILE__, __LINE__, "failed to initialize OpenAL.");
|
63
|
+
}
|
151
64
|
|
65
|
+
void
|
66
|
+
OpenAL_fin ()
|
67
|
+
{
|
68
|
+
if (!global::context)
|
69
|
+
beeps_error(__FILE__, __LINE__, "not initialized.");
|
152
70
|
|
153
|
-
|
71
|
+
cleanup();
|
72
|
+
}
|
154
73
|
|
155
|
-
|
74
|
+
ALCenum
|
75
|
+
OpenAL_get_error ()
|
76
|
+
{
|
77
|
+
assert(global::device);
|
156
78
|
|
79
|
+
return alcGetError(global::device);
|
80
|
+
}
|
157
81
|
|
158
|
-
|
159
|
-
|
82
|
+
bool
|
83
|
+
OpenAL_no_error ()
|
160
84
|
{
|
161
|
-
|
85
|
+
return OpenAL_get_error() == ALC_NO_ERROR;
|
162
86
|
}
|
163
87
|
|
164
|
-
static
|
165
|
-
|
88
|
+
static String
|
89
|
+
get_error_name (ALenum error)
|
166
90
|
{
|
167
|
-
|
168
|
-
for (SoundSourceList::iterator it = sources.begin(); it != sources.end(); ++it)
|
169
|
-
{
|
170
|
-
const SoundSource::Ptr& p = *it;
|
171
|
-
if (p && *p && !p->is_playing())
|
172
|
-
{
|
173
|
-
source = p;
|
174
|
-
sources.erase(it);
|
175
|
-
LOG("reuse source");
|
176
|
-
break;
|
177
|
-
}
|
178
|
-
}
|
179
|
-
|
180
|
-
if (!source)
|
181
|
-
{
|
182
|
-
source = SoundSource::create();
|
183
|
-
LOG("new source");
|
184
|
-
}
|
185
|
-
|
186
|
-
if (!source)
|
91
|
+
switch (error)
|
187
92
|
{
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
93
|
+
case ALC_NO_ERROR: return "ALC_NO_ERROR";
|
94
|
+
case ALC_INVALID_DEVICE: return "ALC_INVALID_DEVICE";
|
95
|
+
case ALC_INVALID_CONTEXT: return "ALC_INVALID_CONTEXT";
|
96
|
+
case ALC_INVALID_ENUM: return "ALC_INVALID_ENUM";
|
97
|
+
case ALC_OUT_OF_MEMORY: return "ALC_OUT_OF_MEMORY";
|
98
|
+
default: return "UNKNOWN ERROR";
|
192
99
|
}
|
193
|
-
|
194
|
-
if (!source)
|
195
|
-
return NULL;
|
196
|
-
|
197
|
-
sources.push_back(source);
|
198
|
-
return source.get();
|
199
100
|
}
|
200
101
|
|
201
102
|
void
|
202
|
-
|
103
|
+
OpenAL_check_error (const char* file, int line)
|
203
104
|
{
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
SoundSource* source = next_source();
|
208
|
-
if (!source || !*source)
|
209
|
-
invalid_state_error(__FILE__, __LINE__);
|
210
|
-
|
211
|
-
source->play(sound);
|
212
|
-
|
213
|
-
#if 0
|
214
|
-
std::string ox = "";
|
215
|
-
for (size_t i = 0; i < sources.size(); ++i)
|
216
|
-
ox += sources[i]->is_playing() ? 'o' : 'x';
|
217
|
-
LOG("playing with %d sources. (%s)", sources.size(), ox.c_str());
|
218
|
-
#endif
|
105
|
+
ALCenum e = OpenAL_get_error();
|
106
|
+
if (e != ALC_NO_ERROR)
|
107
|
+
openal_error(file, line, "OpenAL error %s", get_error_name(e).c_str());
|
219
108
|
}
|
220
109
|
|
221
110
|
|