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
data/src/sound.h
CHANGED
@@ -0,0 +1,91 @@
|
|
1
|
+
#include "beeps/filter.h"
|
2
|
+
|
3
|
+
|
4
|
+
#include "signalsmith-stretch.h"
|
5
|
+
#include "signals.h"
|
6
|
+
|
7
|
+
|
8
|
+
namespace Beeps
|
9
|
+
{
|
10
|
+
|
11
|
+
|
12
|
+
struct TimeStretch::Data
|
13
|
+
{
|
14
|
+
|
15
|
+
signalsmith::stretch::SignalsmithStretch<float> stretch;
|
16
|
+
|
17
|
+
float scale = 1;
|
18
|
+
|
19
|
+
};// TimeStretch::Data
|
20
|
+
|
21
|
+
|
22
|
+
TimeStretch::TimeStretch (Processor* input)
|
23
|
+
: Super(input)
|
24
|
+
{
|
25
|
+
set_buffering_seconds(1);
|
26
|
+
}
|
27
|
+
|
28
|
+
TimeStretch::~TimeStretch ()
|
29
|
+
{
|
30
|
+
}
|
31
|
+
|
32
|
+
void
|
33
|
+
TimeStretch::reset ()
|
34
|
+
{
|
35
|
+
Super::reset();
|
36
|
+
|
37
|
+
self->stretch.reset();
|
38
|
+
}
|
39
|
+
|
40
|
+
void
|
41
|
+
TimeStretch::set_scale (float scale)
|
42
|
+
{
|
43
|
+
if (scale <= 0)
|
44
|
+
argument_error(__FILE__, __LINE__, "'scale' must be greater than 0");
|
45
|
+
|
46
|
+
self->scale = scale;
|
47
|
+
|
48
|
+
set_updated();
|
49
|
+
}
|
50
|
+
|
51
|
+
float
|
52
|
+
TimeStretch::scale () const
|
53
|
+
{
|
54
|
+
return self->scale;
|
55
|
+
}
|
56
|
+
|
57
|
+
void
|
58
|
+
TimeStretch::filter (Context* context, Signals* signals, uint* offset)
|
59
|
+
{
|
60
|
+
if (self->scale == 1)
|
61
|
+
return Super::filter(context, signals, offset);
|
62
|
+
|
63
|
+
uint nsamples = signals->capacity();
|
64
|
+
Signals source = Signals_create(
|
65
|
+
nsamples / self->scale, signals->nchannels(), signals->sample_rate());
|
66
|
+
|
67
|
+
Super::filter(context, &source, offset);
|
68
|
+
|
69
|
+
SignalSamples<float> input(source);
|
70
|
+
SignalSamples<float> output(
|
71
|
+
source.nsamples() < source.capacity()
|
72
|
+
? source.nsamples() * self->scale
|
73
|
+
: nsamples,
|
74
|
+
signals->nchannels());
|
75
|
+
|
76
|
+
self->stretch.presetDefault(signals->nchannels(), signals->sample_rate());
|
77
|
+
self->stretch.process(
|
78
|
+
input.channels(), input.nsamples(),
|
79
|
+
output.channels(), output.nsamples());
|
80
|
+
|
81
|
+
Signals_write_samples(signals, output);
|
82
|
+
}
|
83
|
+
|
84
|
+
TimeStretch::operator bool () const
|
85
|
+
{
|
86
|
+
if (!Super::operator bool()) return false;
|
87
|
+
return self->scale > 0;
|
88
|
+
}
|
89
|
+
|
90
|
+
|
91
|
+
}// Beeps
|
data/test/helper.rb
CHANGED
data/test/test_beeps.rb
CHANGED
@@ -1,18 +1,21 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
|
4
|
-
$BEEPS_NOAUTOINIT = true
|
5
|
-
|
6
4
|
require_relative 'helper'
|
7
5
|
|
8
6
|
|
9
7
|
class TestBeeps < Test::Unit::TestCase
|
10
8
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
B = Beeps
|
10
|
+
|
11
|
+
def test_beep()
|
12
|
+
B.beep_processor = B::Oscillator.new >> B::Gain.new(gain: 0)
|
13
|
+
assert_nothing_raised {B.be}
|
14
|
+
assert_nothing_raised {B.bee}
|
15
|
+
assert_nothing_raised {B.beep}
|
16
|
+
assert_nothing_raised {B.beeep}
|
17
|
+
assert_nothing_raised {B.beeeep}
|
18
|
+
assert_nothing_raised {B.beeeeep}
|
16
19
|
end
|
17
20
|
|
18
21
|
end# TestBeeps
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
$BEEPS_NOAUTOINIT = true
|
5
|
+
|
6
|
+
require_relative 'helper'
|
7
|
+
|
8
|
+
|
9
|
+
class TestBeepsInit < Test::Unit::TestCase
|
10
|
+
|
11
|
+
def test_init!()
|
12
|
+
assert_raise(Beeps::BeepsError) {Beeps.fin!}
|
13
|
+
assert Beeps.init!
|
14
|
+
assert_raise(Beeps::BeepsError) {Beeps.init!}
|
15
|
+
assert Beeps.fin!
|
16
|
+
end
|
17
|
+
|
18
|
+
end# TestBeepsInit
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
require_relative 'helper'
|
5
|
+
|
6
|
+
|
7
|
+
class TestProcessor < Test::Unit::TestCase
|
8
|
+
|
9
|
+
B = Beeps
|
10
|
+
|
11
|
+
def processor()
|
12
|
+
B::Gain.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_initialize()
|
16
|
+
assert_raise(Beeps::BeepsError) {B::Processor.new}
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_input()
|
20
|
+
p = processor
|
21
|
+
assert_nil p.input
|
22
|
+
|
23
|
+
p.input = B::Oscillator.new
|
24
|
+
assert_equal B::Oscillator, p.input.class
|
25
|
+
|
26
|
+
p.input nil
|
27
|
+
assert_nil p.input
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_shift_right()
|
31
|
+
osc = B::Oscillator.new
|
32
|
+
gain1 = B::Gain.new
|
33
|
+
gain2 = B::Gain.new
|
34
|
+
assert_equal gain2, (osc >> gain1 >> gain2)
|
35
|
+
assert_equal nil, osc.input
|
36
|
+
assert_equal osc, gain1.input
|
37
|
+
assert_equal gain1, gain2.input
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_shift_left()
|
41
|
+
osc = B::Oscillator.new
|
42
|
+
gain1 = B::Gain.new
|
43
|
+
gain2 = B::Gain.new
|
44
|
+
assert_equal osc, (gain2 << gain1 << osc)
|
45
|
+
assert_equal nil, osc.input
|
46
|
+
assert_equal osc, gain1.input
|
47
|
+
assert_equal gain1, gain2.input
|
48
|
+
end
|
49
|
+
|
50
|
+
end# TestProcessor
|
data/test/test_sound.rb
CHANGED
@@ -6,21 +6,97 @@ require_relative 'helper'
|
|
6
6
|
|
7
7
|
class TestSound < Test::Unit::TestCase
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
B = Beeps
|
10
|
+
|
11
|
+
PATH = 'test.wav'
|
12
|
+
|
13
|
+
def sound(seconds = 0.1, processor: B::Oscillator.new, **kwargs, &block)
|
14
|
+
B::Sound.new processor >> B::Gain.new(gain: 0), seconds, **kwargs, &block
|
15
|
+
end
|
16
|
+
|
17
|
+
def teardown()
|
18
|
+
B::SoundPlayer.stop_all
|
19
|
+
File.delete PATH if File.exist?(PATH)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_initialize()
|
23
|
+
assert_in_epsilon 1, sound.gain
|
24
|
+
assert_false sound.loop
|
25
|
+
|
26
|
+
assert_true sound(loop: true).loop
|
27
|
+
assert_true sound {loop true}.loop
|
11
28
|
end
|
12
29
|
|
13
30
|
def test_play()
|
14
|
-
assert_nothing_raised {
|
31
|
+
assert_nothing_raised {sound.play}
|
32
|
+
|
33
|
+
assert_true sound.play(loop: true).loop
|
34
|
+
assert_true sound.play {loop true}.loop
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_save()
|
38
|
+
assert_false File.exist?(PATH)
|
39
|
+
assert_nothing_raised {sound.save PATH}
|
40
|
+
assert_true File.exist?(PATH)
|
41
|
+
assert_nothing_raised {B::Sound.load PATH}
|
15
42
|
end
|
16
43
|
|
17
|
-
def
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
44
|
+
def test_sample_rate()
|
45
|
+
assert_in_epsilon 44100, sound .sample_rate
|
46
|
+
assert_in_epsilon 48000, sound(sample_rate: 48000).sample_rate
|
47
|
+
assert_in_epsilon 96000, sound(sample_rate: 96000).sample_rate
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_nchannels()
|
51
|
+
assert_equal 1, sound .nchannels
|
52
|
+
assert_equal 2, sound(nchannels: 2).nchannels
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_seconds()
|
56
|
+
assert_in_epsilon 0.2, sound(0.2).seconds
|
57
|
+
assert_in_epsilon (-1), sound(0) .seconds
|
58
|
+
assert_in_epsilon (-1), sound(-1) .seconds
|
59
|
+
assert_in_epsilon (-1), sound(-2) .seconds
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_gain()
|
63
|
+
s = sound
|
64
|
+
assert_in_epsilon 1, s .gain
|
65
|
+
assert_in_epsilon 1, s.play.gain
|
66
|
+
|
67
|
+
s.gain = 0.1
|
68
|
+
assert_in_epsilon 0.1, s .gain
|
69
|
+
assert_in_epsilon 0.1, s.play.gain
|
70
|
+
|
71
|
+
s.gain 0.2
|
72
|
+
assert_in_epsilon 0.2, s .gain
|
73
|
+
assert_in_epsilon 0.2, s.play.gain
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_loop()
|
77
|
+
s = sound
|
78
|
+
assert_false s .loop
|
79
|
+
assert_false s.play.loop
|
80
|
+
|
81
|
+
s.loop = true
|
82
|
+
assert_true s .loop
|
83
|
+
assert_true s.play.loop
|
84
|
+
|
85
|
+
s.loop false
|
86
|
+
assert_false s .loop
|
87
|
+
assert_false s.play.loop
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_load()
|
91
|
+
assert_nothing_raised {
|
92
|
+
sound(0.1, nchannels: 2, sample_rate: 96000).save PATH
|
93
|
+
}
|
94
|
+
|
95
|
+
s = B::Sound.load PATH
|
96
|
+
assert_in_epsilon 96000, s.sample_rate
|
97
|
+
assert_equal 2, s.nchannels
|
98
|
+
assert_in_epsilon 0.1, s.seconds
|
99
|
+
assert_nothing_raised {s.play}
|
24
100
|
end
|
25
101
|
|
26
|
-
end#
|
102
|
+
end# TestSound
|
@@ -0,0 +1,134 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
require_relative 'helper'
|
5
|
+
|
6
|
+
|
7
|
+
class TestSoundPlayer < Test::Unit::TestCase
|
8
|
+
|
9
|
+
B = Beeps
|
10
|
+
|
11
|
+
PATH = 'test.wav'
|
12
|
+
|
13
|
+
def sound(seconds = 0.1, processor: B::Oscillator.new, **kwargs)
|
14
|
+
B::Sound.new processor >> B::Gain.new(gain: 0), seconds, **kwargs
|
15
|
+
end
|
16
|
+
|
17
|
+
def stream_sound(**kwargs)
|
18
|
+
sound 0, processor: B::FileIn.new(PATH), **kwargs
|
19
|
+
end
|
20
|
+
|
21
|
+
def setup()
|
22
|
+
sound.save PATH
|
23
|
+
end
|
24
|
+
|
25
|
+
def teardown()
|
26
|
+
B::SoundPlayer.stop_all
|
27
|
+
File.delete PATH if File.exist?(PATH)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_initialize()
|
31
|
+
assert_in_epsilon 1, sound.play.gain
|
32
|
+
assert_false sound.play.loop
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_pause()
|
36
|
+
p = sound.play
|
37
|
+
assert_equal [true, false, false], [p.playing?, p.paused?, p.stopped?]
|
38
|
+
p.pause
|
39
|
+
assert_equal [false, true, false], [p.playing?, p.paused?, p.stopped?]
|
40
|
+
|
41
|
+
p = stream_sound.play
|
42
|
+
assert_equal [true, false, false], [p.playing?, p.paused?, p.stopped?]
|
43
|
+
p.pause
|
44
|
+
assert_equal [false, true, false], [p.playing?, p.paused?, p.stopped?]
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_stop()
|
48
|
+
p = sound.play
|
49
|
+
assert_equal [true, false, false], [p.playing?, p.paused?, p.stopped?]
|
50
|
+
p.stop
|
51
|
+
assert_equal [false, false, true], [p.playing?, p.paused?, p.stopped?]
|
52
|
+
|
53
|
+
p = stream_sound.play
|
54
|
+
assert_equal [true, false, false], [p.playing?, p.paused?, p.stopped?]
|
55
|
+
p.stop
|
56
|
+
assert_equal [false, false, true], [p.playing?, p.paused?, p.stopped?]
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_play_end_then_stop()
|
60
|
+
s = sound
|
61
|
+
sec = s.seconds
|
62
|
+
|
63
|
+
p = s.play
|
64
|
+
assert_equal [true, false, false], [p.playing?, p.paused?, p.stopped?]
|
65
|
+
sleep sec * 2
|
66
|
+
assert_equal [false, false, true], [p.playing?, p.paused?, p.stopped?]
|
67
|
+
|
68
|
+
s = stream_sound
|
69
|
+
p = s.play
|
70
|
+
assert_equal [true, false, false], [p.playing?, p.paused?, p.stopped?]
|
71
|
+
sleep sec * 2
|
72
|
+
assert_equal [false, false, true], [p.playing?, p.paused?, p.stopped?]
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_play_after_pause()
|
76
|
+
p = sound.play
|
77
|
+
p.pause
|
78
|
+
assert_equal [false, true, false], [p.playing?, p.paused?, p.stopped?]
|
79
|
+
p.play
|
80
|
+
assert_equal [true, false, false], [p.playing?, p.paused?, p.stopped?]
|
81
|
+
|
82
|
+
p = stream_sound.play
|
83
|
+
p.pause
|
84
|
+
assert_equal [false, true, false], [p.playing?, p.paused?, p.stopped?]
|
85
|
+
p.play
|
86
|
+
assert_equal [true, false, false], [p.playing?, p.paused?, p.stopped?]
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_stop_after_pause()
|
90
|
+
p = sound.play
|
91
|
+
p.pause
|
92
|
+
assert_equal [false, true, false], [p.playing?, p.paused?, p.stopped?]
|
93
|
+
p.stop
|
94
|
+
assert_equal [false, false, true], [p.playing?, p.paused?, p.stopped?]
|
95
|
+
|
96
|
+
p = stream_sound.play
|
97
|
+
p.pause
|
98
|
+
assert_equal [false, true, false], [p.playing?, p.paused?, p.stopped?]
|
99
|
+
p.stop
|
100
|
+
assert_equal [false, false, true], [p.playing?, p.paused?, p.stopped?]
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_gain()
|
104
|
+
p = sound.play
|
105
|
+
assert_in_epsilon 1, p.gain
|
106
|
+
|
107
|
+
p.gain = 0.1
|
108
|
+
assert_in_epsilon 0.1, p.gain
|
109
|
+
|
110
|
+
p.gain 0.2
|
111
|
+
assert_in_epsilon 0.2, p.gain
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_loop()
|
115
|
+
p = sound.play
|
116
|
+
assert_false p.loop
|
117
|
+
|
118
|
+
p.loop = true
|
119
|
+
assert_true p.loop
|
120
|
+
|
121
|
+
p.loop false
|
122
|
+
assert_false p.loop
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_stop_all()
|
126
|
+
s = sound
|
127
|
+
players = 10.times.map {s.play}
|
128
|
+
assert_true players.all? {|p| p.playing?}
|
129
|
+
|
130
|
+
B::SoundPlayer.stop_all
|
131
|
+
assert_true players.all? {|p| p.stopped?}
|
132
|
+
end
|
133
|
+
|
134
|
+
end# TestSoundPlayer
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beeps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.33
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- xordog
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: xot
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.1.
|
19
|
+
version: 0.1.33
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.1.
|
26
|
+
version: 0.1.33
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rucy
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.1.
|
33
|
+
version: 0.1.33
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.1.
|
40
|
+
version: 0.1.33
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,26 +72,36 @@ executables: []
|
|
72
72
|
extensions:
|
73
73
|
- Rakefile
|
74
74
|
extra_rdoc_files:
|
75
|
+
- ".doc/ext/beeps/adsr.cpp"
|
76
|
+
- ".doc/ext/beeps/analyser.cpp"
|
75
77
|
- ".doc/ext/beeps/beeps.cpp"
|
76
78
|
- ".doc/ext/beeps/exception.cpp"
|
77
79
|
- ".doc/ext/beeps/file_in.cpp"
|
80
|
+
- ".doc/ext/beeps/gain.cpp"
|
81
|
+
- ".doc/ext/beeps/mic_in.cpp"
|
78
82
|
- ".doc/ext/beeps/native.cpp"
|
83
|
+
- ".doc/ext/beeps/oscillator.cpp"
|
84
|
+
- ".doc/ext/beeps/pitch_shift.cpp"
|
79
85
|
- ".doc/ext/beeps/processor.cpp"
|
80
|
-
- ".doc/ext/beeps/sawtooth_wave.cpp"
|
81
|
-
- ".doc/ext/beeps/sine_wave.cpp"
|
82
86
|
- ".doc/ext/beeps/sound.cpp"
|
83
|
-
- ".doc/ext/beeps/
|
87
|
+
- ".doc/ext/beeps/sound_player.cpp"
|
88
|
+
- ".doc/ext/beeps/time_stretch.cpp"
|
84
89
|
files:
|
90
|
+
- ".doc/ext/beeps/adsr.cpp"
|
91
|
+
- ".doc/ext/beeps/analyser.cpp"
|
85
92
|
- ".doc/ext/beeps/beeps.cpp"
|
86
93
|
- ".doc/ext/beeps/exception.cpp"
|
87
94
|
- ".doc/ext/beeps/file_in.cpp"
|
95
|
+
- ".doc/ext/beeps/gain.cpp"
|
96
|
+
- ".doc/ext/beeps/mic_in.cpp"
|
88
97
|
- ".doc/ext/beeps/native.cpp"
|
98
|
+
- ".doc/ext/beeps/oscillator.cpp"
|
99
|
+
- ".doc/ext/beeps/pitch_shift.cpp"
|
89
100
|
- ".doc/ext/beeps/processor.cpp"
|
90
|
-
- ".doc/ext/beeps/sawtooth_wave.cpp"
|
91
|
-
- ".doc/ext/beeps/sine_wave.cpp"
|
92
101
|
- ".doc/ext/beeps/sound.cpp"
|
93
|
-
- ".doc/ext/beeps/
|
94
|
-
- ".
|
102
|
+
- ".doc/ext/beeps/sound_player.cpp"
|
103
|
+
- ".doc/ext/beeps/time_stretch.cpp"
|
104
|
+
- ".github/workflows/release-gem.yml"
|
95
105
|
- ".github/workflows/tag.yml"
|
96
106
|
- ".github/workflows/test.yml"
|
97
107
|
- ".github/workflows/utils.rb"
|
@@ -100,27 +110,36 @@ files:
|
|
100
110
|
- Rakefile
|
101
111
|
- VERSION
|
102
112
|
- beeps.gemspec
|
113
|
+
- ext/beeps/adsr.cpp
|
114
|
+
- ext/beeps/analyser.cpp
|
103
115
|
- ext/beeps/beeps.cpp
|
104
116
|
- ext/beeps/defs.h
|
105
117
|
- ext/beeps/exception.cpp
|
106
118
|
- ext/beeps/extconf.rb
|
107
119
|
- ext/beeps/file_in.cpp
|
120
|
+
- ext/beeps/gain.cpp
|
121
|
+
- ext/beeps/mic_in.cpp
|
108
122
|
- ext/beeps/native.cpp
|
123
|
+
- ext/beeps/oscillator.cpp
|
124
|
+
- ext/beeps/pitch_shift.cpp
|
109
125
|
- ext/beeps/processor.cpp
|
110
|
-
- ext/beeps/sawtooth_wave.cpp
|
111
|
-
- ext/beeps/sine_wave.cpp
|
112
126
|
- ext/beeps/sound.cpp
|
113
|
-
- ext/beeps/
|
127
|
+
- ext/beeps/sound_player.cpp
|
128
|
+
- ext/beeps/time_stretch.cpp
|
114
129
|
- include/beeps.h
|
115
130
|
- include/beeps/beeps.h
|
116
131
|
- include/beeps/debug.h
|
117
132
|
- include/beeps/defs.h
|
118
133
|
- include/beeps/exception.h
|
134
|
+
- include/beeps/filter.h
|
135
|
+
- include/beeps/generator.h
|
119
136
|
- include/beeps/processor.h
|
120
137
|
- include/beeps/ruby.h
|
121
138
|
- include/beeps/ruby/beeps.h
|
122
139
|
- include/beeps/ruby/defs.h
|
123
140
|
- include/beeps/ruby/exception.h
|
141
|
+
- include/beeps/ruby/filter.h
|
142
|
+
- include/beeps/ruby/generator.h
|
124
143
|
- include/beeps/ruby/processor.h
|
125
144
|
- include/beeps/ruby/sound.h
|
126
145
|
- include/beeps/signals.h
|
@@ -132,18 +151,33 @@ files:
|
|
132
151
|
- lib/beeps/extension.rb
|
133
152
|
- lib/beeps/processor.rb
|
134
153
|
- lib/beeps/sound.rb
|
154
|
+
- src/adsr.cpp
|
155
|
+
- src/analyser.cpp
|
135
156
|
- src/beeps.cpp
|
136
157
|
- src/exception.cpp
|
158
|
+
- src/file_in.cpp
|
159
|
+
- src/gain.cpp
|
160
|
+
- src/mic_in.cpp
|
161
|
+
- src/mic_in.h
|
137
162
|
- src/openal.cpp
|
138
163
|
- src/openal.h
|
164
|
+
- src/oscillator.cpp
|
165
|
+
- src/osx/signals.mm
|
166
|
+
- src/pitch_shift.cpp
|
139
167
|
- src/processor.cpp
|
168
|
+
- src/processor.h
|
140
169
|
- src/signals.cpp
|
141
170
|
- src/signals.h
|
142
171
|
- src/sound.cpp
|
143
172
|
- src/sound.h
|
173
|
+
- src/time_stretch.cpp
|
144
174
|
- test/helper.rb
|
145
175
|
- test/test_beeps.rb
|
176
|
+
- test/test_beeps_init.rb
|
177
|
+
- test/test_file_in.rb
|
178
|
+
- test/test_processor.rb
|
146
179
|
- test/test_sound.rb
|
180
|
+
- test/test_sound_player.rb
|
147
181
|
homepage: https://github.com/xord/beeps
|
148
182
|
licenses: []
|
149
183
|
metadata: {}
|
@@ -162,11 +196,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
196
|
- !ruby/object:Gem::Version
|
163
197
|
version: '0'
|
164
198
|
requirements: []
|
165
|
-
rubygems_version: 3.4.
|
199
|
+
rubygems_version: 3.4.10
|
166
200
|
signing_key:
|
167
201
|
specification_version: 4
|
168
202
|
summary: Plays beep sound.
|
169
203
|
test_files:
|
170
204
|
- test/helper.rb
|
171
205
|
- test/test_beeps.rb
|
206
|
+
- test/test_beeps_init.rb
|
207
|
+
- test/test_file_in.rb
|
208
|
+
- test/test_processor.rb
|
172
209
|
- test/test_sound.rb
|
210
|
+
- test/test_sound_player.rb
|