beeps 0.1.32 → 0.1.34

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/beeps/adsr.cpp +139 -0
  3. data/.doc/ext/beeps/analyser.cpp +128 -0
  4. data/.doc/ext/beeps/beeps.cpp +9 -1
  5. data/.doc/ext/beeps/file_in.cpp +55 -9
  6. data/.doc/ext/beeps/gain.cpp +64 -0
  7. data/.doc/ext/beeps/mic_in.cpp +83 -0
  8. data/.doc/ext/beeps/native.cpp +20 -8
  9. data/.doc/ext/beeps/oscillator.cpp +88 -0
  10. data/.doc/ext/beeps/pitch_shift.cpp +64 -0
  11. data/.doc/ext/beeps/processor.cpp +31 -2
  12. data/.doc/ext/beeps/sound.cpp +90 -7
  13. data/.doc/ext/beeps/sound_player.cpp +156 -0
  14. data/.doc/ext/beeps/time_stretch.cpp +64 -0
  15. data/.github/workflows/release-gem.yml +4 -1
  16. data/ChangeLog.md +14 -0
  17. data/Rakefile +26 -4
  18. data/VERSION +1 -1
  19. data/beeps.gemspec +2 -2
  20. data/ext/beeps/adsr.cpp +150 -0
  21. data/ext/beeps/analyser.cpp +134 -0
  22. data/ext/beeps/beeps.cpp +10 -1
  23. data/ext/beeps/extconf.rb +1 -2
  24. data/ext/beeps/file_in.cpp +60 -9
  25. data/ext/beeps/gain.cpp +67 -0
  26. data/ext/beeps/mic_in.cpp +88 -0
  27. data/ext/beeps/native.cpp +20 -8
  28. data/ext/beeps/oscillator.cpp +93 -0
  29. data/ext/beeps/pitch_shift.cpp +67 -0
  30. data/ext/beeps/processor.cpp +34 -2
  31. data/ext/beeps/sound.cpp +99 -7
  32. data/ext/beeps/sound_player.cpp +169 -0
  33. data/ext/beeps/time_stretch.cpp +67 -0
  34. data/include/beeps/beeps.h +2 -1
  35. data/include/beeps/filter.h +179 -0
  36. data/include/beeps/generator.h +120 -0
  37. data/include/beeps/processor.h +37 -68
  38. data/include/beeps/ruby/filter.h +78 -0
  39. data/include/beeps/ruby/generator.h +60 -0
  40. data/include/beeps/ruby/processor.h +5 -45
  41. data/include/beeps/ruby/sound.h +14 -3
  42. data/include/beeps/signals.h +10 -4
  43. data/include/beeps/sound.h +67 -2
  44. data/lib/beeps/beeps.rb +6 -1
  45. data/lib/beeps/processor.rb +95 -15
  46. data/lib/beeps/sound.rb +29 -2
  47. data/src/adsr.cpp +245 -0
  48. data/src/analyser.cpp +254 -0
  49. data/src/beeps.cpp +14 -2
  50. data/src/file_in.cpp +94 -0
  51. data/src/gain.cpp +55 -0
  52. data/src/mic_in.cpp +271 -0
  53. data/src/mic_in.h +22 -0
  54. data/src/openal.cpp +1 -2
  55. data/src/oscillator.cpp +145 -0
  56. data/src/osx/signals.mm +83 -0
  57. data/src/pitch_shift.cpp +82 -0
  58. data/src/processor.cpp +202 -88
  59. data/src/processor.h +98 -0
  60. data/src/signals.cpp +326 -20
  61. data/src/signals.h +192 -2
  62. data/src/sound.cpp +735 -113
  63. data/src/sound.h +6 -1
  64. data/src/time_stretch.cpp +91 -0
  65. data/test/helper.rb +2 -1
  66. data/test/test_beeps.rb +10 -7
  67. data/test/test_beeps_init.rb +18 -0
  68. data/test/test_file_in.rb +15 -0
  69. data/test/test_processor.rb +50 -0
  70. data/test/test_sound.rb +87 -11
  71. data/test/test_sound_player.rb +134 -0
  72. metadata +54 -16
  73. data/.doc/ext/beeps/sawtooth_wave.cpp +0 -61
  74. data/.doc/ext/beeps/sine_wave.cpp +0 -61
  75. data/.doc/ext/beeps/square_wave.cpp +0 -61
  76. data/ext/beeps/sawtooth_wave.cpp +0 -64
  77. data/ext/beeps/sine_wave.cpp +0 -64
  78. data/ext/beeps/square_wave.cpp +0 -64
data/src/sound.h CHANGED
@@ -4,11 +4,16 @@
4
4
  #define __BEEPS_SRC_SOUND_H__
5
5
 
6
6
 
7
+ #include <beeps/sound.h>
8
+
9
+
7
10
  namespace Beeps
8
11
  {
9
12
 
10
13
 
11
- void Sound_cleanup_sources ();
14
+ void SoundPlayer_process_streams ();
15
+
16
+ void SoundPlayer_clear_streams ();
12
17
 
13
18
 
14
19
  }// Beeps
@@ -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
@@ -5,10 +5,11 @@
5
5
  .map {|s| File.expand_path "../#{s}/lib", __dir__}
6
6
  .each {|s| $:.unshift s if !$:.include?(s) && File.directory?(s)}
7
7
 
8
- require 'test/unit'
9
8
  require 'xot/test'
10
9
  require 'beeps'
11
10
 
11
+ require 'test/unit'
12
+
12
13
  include Xot::Test
13
14
 
14
15
 
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
- 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!
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,15 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require_relative 'helper'
5
+
6
+
7
+ class TestFileIn < Test::Unit::TestCase
8
+
9
+ B = Beeps
10
+
11
+ def test_initialize()
12
+ assert_raise(B::BeepsError) {B::FileIn.new 'nofile.wav'}
13
+ end
14
+
15
+ end# TestFileIn
@@ -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
- def s()
10
- Beeps::Sound.new Beeps::SineWave.new, 0.1
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 {s.play}
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 test_beep()
18
- assert_nothing_raised {Beeps.be}
19
- assert_nothing_raised {Beeps.bee}
20
- assert_nothing_raised {Beeps.beep}
21
- assert_nothing_raised {Beeps.beeep}
22
- assert_nothing_raised {Beeps.beeeep}
23
- assert_nothing_raised {Beeps.beeeeep}
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# TestBeeps
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.32
4
+ version: 0.1.34
5
5
  platform: ruby
6
6
  authors:
7
7
  - xordog
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-01 00:00:00.000000000 Z
11
+ date: 2023-04-24 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.32
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.32
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.32
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.32
40
+ version: 0.1.33
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -72,25 +72,35 @@ 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/square_wave.cpp"
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/square_wave.cpp"
102
+ - ".doc/ext/beeps/sound_player.cpp"
103
+ - ".doc/ext/beeps/time_stretch.cpp"
94
104
  - ".github/workflows/release-gem.yml"
95
105
  - ".github/workflows/tag.yml"
96
106
  - ".github/workflows/test.yml"
@@ -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/square_wave.cpp
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.6
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