beeps 0.1.31 → 0.1.33

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) 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 +62 -0
  16. data/.github/workflows/test.yml +0 -6
  17. data/.github/workflows/utils.rb +13 -5
  18. data/ChangeLog.md +13 -0
  19. data/Rakefile +27 -6
  20. data/VERSION +1 -1
  21. data/beeps.gemspec +2 -2
  22. data/ext/beeps/adsr.cpp +150 -0
  23. data/ext/beeps/analyser.cpp +134 -0
  24. data/ext/beeps/beeps.cpp +10 -1
  25. data/ext/beeps/extconf.rb +1 -2
  26. data/ext/beeps/file_in.cpp +60 -9
  27. data/ext/beeps/gain.cpp +67 -0
  28. data/ext/beeps/mic_in.cpp +88 -0
  29. data/ext/beeps/native.cpp +20 -8
  30. data/ext/beeps/oscillator.cpp +93 -0
  31. data/ext/beeps/pitch_shift.cpp +67 -0
  32. data/ext/beeps/processor.cpp +34 -2
  33. data/ext/beeps/sound.cpp +99 -7
  34. data/ext/beeps/sound_player.cpp +169 -0
  35. data/ext/beeps/time_stretch.cpp +67 -0
  36. data/include/beeps/beeps.h +2 -1
  37. data/include/beeps/filter.h +179 -0
  38. data/include/beeps/generator.h +120 -0
  39. data/include/beeps/processor.h +37 -68
  40. data/include/beeps/ruby/filter.h +78 -0
  41. data/include/beeps/ruby/generator.h +60 -0
  42. data/include/beeps/ruby/processor.h +5 -45
  43. data/include/beeps/ruby/sound.h +14 -3
  44. data/include/beeps/signals.h +10 -4
  45. data/include/beeps/sound.h +67 -2
  46. data/lib/beeps/beeps.rb +6 -1
  47. data/lib/beeps/processor.rb +95 -15
  48. data/lib/beeps/sound.rb +29 -2
  49. data/src/adsr.cpp +245 -0
  50. data/src/analyser.cpp +254 -0
  51. data/src/beeps.cpp +11 -2
  52. data/src/file_in.cpp +94 -0
  53. data/src/gain.cpp +55 -0
  54. data/src/mic_in.cpp +262 -0
  55. data/src/mic_in.h +20 -0
  56. data/src/openal.cpp +2 -1
  57. data/src/oscillator.cpp +145 -0
  58. data/src/osx/signals.mm +83 -0
  59. data/src/pitch_shift.cpp +82 -0
  60. data/src/processor.cpp +202 -88
  61. data/src/processor.h +98 -0
  62. data/src/signals.cpp +326 -20
  63. data/src/signals.h +192 -2
  64. data/src/sound.cpp +735 -113
  65. data/src/sound.h +6 -1
  66. data/src/time_stretch.cpp +91 -0
  67. data/test/helper.rb +2 -1
  68. data/test/test_beeps.rb +10 -7
  69. data/test/test_beeps_init.rb +18 -0
  70. data/test/test_file_in.rb +15 -0
  71. data/test/test_processor.rb +50 -0
  72. data/test/test_sound.rb +87 -11
  73. data/test/test_sound_player.rb +134 -0
  74. metadata +55 -17
  75. data/.doc/ext/beeps/sawtooth_wave.cpp +0 -61
  76. data/.doc/ext/beeps/sine_wave.cpp +0 -61
  77. data/.doc/ext/beeps/square_wave.cpp +0 -61
  78. data/.github/workflows/release.yml +0 -34
  79. data/ext/beeps/sawtooth_wave.cpp +0 -64
  80. data/ext/beeps/sine_wave.cpp +0 -64
  81. data/ext/beeps/square_wave.cpp +0 -64
@@ -0,0 +1,64 @@
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
+ VALUE alloc(VALUE klass)
17
+ {
18
+ return value(new Beeps::RubyProcessor<Beeps::PitchShift>, klass);
19
+ }
20
+
21
+ static
22
+ VALUE set_shift(VALUE self, VALUE shift)
23
+ {
24
+ CHECK;
25
+
26
+ THIS->set_shift(to<float>(shift));
27
+ return shift;
28
+ }
29
+
30
+ static
31
+ VALUE get_shift(VALUE self)
32
+ {
33
+ CHECK;
34
+
35
+ return value(THIS->shift());
36
+ }
37
+
38
+
39
+ static Class cPitchShift;
40
+
41
+ void
42
+ Init_beeps_pitch_shift ()
43
+ {
44
+ Module mBeeps = rb_define_module("Beeps");
45
+
46
+ cPitchShift = mBeeps.define_class("PitchShift", Beeps::processor_class());
47
+ rb_define_alloc_func(cPitchShift, alloc);
48
+ rb_define_method(cPitchShift, "shift=", RUBY_METHOD_FUNC(set_shift), 1);
49
+ rb_define_method(cPitchShift, "shift", RUBY_METHOD_FUNC(get_shift), 0);
50
+ }
51
+
52
+
53
+ namespace Beeps
54
+ {
55
+
56
+
57
+ Class
58
+ pitch_shift_class ()
59
+ {
60
+ return cPitchShift;
61
+ }
62
+
63
+
64
+ }// Beeps
@@ -5,11 +5,11 @@
5
5
  #include "defs.h"
6
6
 
7
7
 
8
- RUCY_DEFINE_VALUE_FROM_TO(Beeps::Processor)
8
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(Beeps::Processor)
9
9
 
10
10
  #define THIS to<Beeps::Processor*>(self)
11
11
 
12
- #define CHECK RUCY_CHECK_OBJECT(Beeps::Processor, self)
12
+ #define CHECK RUCY_CHECK_OBJ(Beeps::Processor, self)
13
13
 
14
14
 
15
15
  static
@@ -18,6 +18,32 @@ VALUE alloc(VALUE klass)
18
18
  Beeps::beeps_error(__FILE__, __LINE__);
19
19
  }
20
20
 
21
+ static
22
+ VALUE reset(VALUE self)
23
+ {
24
+ CHECK;
25
+
26
+ THIS->reset();
27
+ return self;
28
+ }
29
+
30
+ static
31
+ VALUE set_input(VALUE self, VALUE input)
32
+ {
33
+ CHECK;
34
+
35
+ THIS->set_input(input ? to<Beeps::Processor*>(input) : NULL);
36
+ return input;
37
+ }
38
+
39
+ static
40
+ VALUE get_input(VALUE self)
41
+ {
42
+ CHECK;
43
+
44
+ return value(THIS->input());
45
+ }
46
+
21
47
 
22
48
  static Class cProcessor;
23
49
 
@@ -28,6 +54,9 @@ Init_beeps_processor ()
28
54
 
29
55
  cProcessor = rb_define_class_under(mBeeps, "Processor", rb_cObject);
30
56
  rb_define_alloc_func(cProcessor, alloc);
57
+ rb_define_method(cProcessor, "reset", RUBY_METHOD_FUNC(reset), 0);
58
+ rb_define_method(cProcessor, "input=", RUBY_METHOD_FUNC(set_input), 1);
59
+ rb_define_method(cProcessor, "input", RUBY_METHOD_FUNC(get_input), 0);
31
60
  }
32
61
 
33
62
 
@@ -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 RUCY_CHECK_OBJECT(Beeps::Sound, self)
11
+ #define CHECK RUCY_CHECK_OBJ(Beeps::Sound, self)
12
12
 
13
13
 
14
14
  static
@@ -18,11 +18,13 @@ VALUE alloc(VALUE klass)
18
18
  }
19
19
 
20
20
  static
21
- VALUE initialize(VALUE self, VALUE processor, VALUE seconds)
21
+ VALUE setup(VALUE self, VALUE processor, VALUE seconds, VALUE nchannels, VALUE sample_rate)
22
22
  {
23
- RUCY_CHECK_OBJ(Beeps::Sound, self);
23
+ CHECK;
24
24
 
25
- *THIS = Beeps::Sound(to<Beeps::Processor*>(processor), to<float>(seconds));
25
+ *THIS = Beeps::Sound(
26
+ to<Beeps::Processor*>(processor),
27
+ to<float>(seconds), to<uint>(nchannels), to<double>(sample_rate));
26
28
  return self;
27
29
  }
28
30
 
@@ -31,10 +33,82 @@ VALUE play(VALUE self)
31
33
  {
32
34
  CHECK;
33
35
 
34
- THIS->play();
36
+ return value(THIS->play());
37
+ }
38
+
39
+ static
40
+ VALUE save(VALUE self, VALUE path)
41
+ {
42
+ CHECK;
43
+
44
+ THIS->save(path.c_str());
35
45
  return self;
36
46
  }
37
47
 
48
+ static
49
+ VALUE get_sample_rate(VALUE self)
50
+ {
51
+ CHECK;
52
+
53
+ return value(THIS->sample_rate());
54
+ }
55
+
56
+ static
57
+ VALUE get_nchannels(VALUE self)
58
+ {
59
+ CHECK;
60
+
61
+ return value(THIS->nchannels());
62
+ }
63
+
64
+ static
65
+ VALUE get_seconds(VALUE self)
66
+ {
67
+ CHECK;
68
+
69
+ return value(THIS->seconds());
70
+ }
71
+
72
+ static
73
+ VALUE set_gain(VALUE self, VALUE gain)
74
+ {
75
+ CHECK;
76
+
77
+ THIS->set_gain(to<float>(gain));
78
+ return gain;
79
+ }
80
+
81
+ static
82
+ VALUE get_gain(VALUE self)
83
+ {
84
+ CHECK;
85
+
86
+ return value(THIS->gain());
87
+ }
88
+
89
+ static
90
+ VALUE set_loop(VALUE self, VALUE loop)
91
+ {
92
+ CHECK;
93
+
94
+ THIS->set_loop(to<bool>(loop));
95
+ return loop;
96
+ }
97
+
98
+ static
99
+ VALUE get_loop(VALUE self)
100
+ {
101
+ CHECK;
102
+
103
+ return value(THIS->loop());
104
+ }
105
+
106
+ static
107
+ VALUE load(VALUE self, VALUE path)
108
+ {
109
+ return value(Beeps::load_sound(to<const char*>(path)));
110
+ }
111
+
38
112
 
39
113
  static Class cSound;
40
114
 
@@ -45,8 +119,17 @@ Init_beeps_sound ()
45
119
 
46
120
  cSound = rb_define_class_under(mBeeps, "Sound", rb_cObject);
47
121
  rb_define_alloc_func(cSound, alloc);
48
- rb_define_private_method(cSound, "initialize", RUBY_METHOD_FUNC(initialize), 2);
49
- rb_define_method(cSound, "play", RUBY_METHOD_FUNC(play), 0);
122
+ rb_define_private_method(cSound, "setup", RUBY_METHOD_FUNC(setup), 4);
123
+ cSound.define_private_method("play!", play);
124
+ rb_define_method(cSound, "save", RUBY_METHOD_FUNC(save), 1);
125
+ rb_define_method(cSound, "sample_rate", RUBY_METHOD_FUNC(get_sample_rate), 0);
126
+ rb_define_method(cSound, "nchannels", RUBY_METHOD_FUNC(get_nchannels), 0);
127
+ rb_define_method(cSound, "seconds", RUBY_METHOD_FUNC(get_seconds), 0);
128
+ rb_define_method(cSound, "gain=", RUBY_METHOD_FUNC(set_gain), 1);
129
+ rb_define_method(cSound, "gain", RUBY_METHOD_FUNC(get_gain), 0);
130
+ rb_define_method(cSound, "loop=", RUBY_METHOD_FUNC(set_loop), 1);
131
+ rb_define_method(cSound, "loop", RUBY_METHOD_FUNC(get_loop), 0);
132
+ rb_define_singleton_method(cSound, "load", RUBY_METHOD_FUNC(load), 1);
50
133
  }
51
134
 
52
135
 
@@ -0,0 +1,156 @@
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
+ VALUE alloc(VALUE klass)
16
+ {
17
+ return new_type<Beeps::SoundPlayer>(klass);
18
+ }
19
+
20
+ static
21
+ VALUE play(VALUE self)
22
+ {
23
+ CHECK;
24
+
25
+ THIS->play();
26
+ return self;
27
+ }
28
+
29
+ static
30
+ VALUE pause(VALUE self)
31
+ {
32
+ CHECK;
33
+
34
+ THIS->pause();
35
+ return self;
36
+ }
37
+
38
+ static
39
+ VALUE rewind(VALUE self)
40
+ {
41
+ CHECK;
42
+
43
+ THIS->rewind();
44
+ return self;
45
+ }
46
+
47
+ static
48
+ VALUE stop(VALUE self)
49
+ {
50
+ CHECK;
51
+
52
+ THIS->stop();
53
+ return self;
54
+ }
55
+
56
+ static
57
+ VALUE is_playing(VALUE self)
58
+ {
59
+ CHECK;
60
+
61
+ return value(THIS->is_playing());
62
+ }
63
+
64
+ static
65
+ VALUE is_paused(VALUE self)
66
+ {
67
+ CHECK;
68
+
69
+ return value(THIS->is_paused());
70
+ }
71
+
72
+ static
73
+ VALUE is_stopped(VALUE self)
74
+ {
75
+ CHECK;
76
+
77
+ return value(THIS->is_stopped());
78
+ }
79
+
80
+ static
81
+ VALUE set_gain(VALUE self, VALUE gain)
82
+ {
83
+ CHECK;
84
+
85
+ THIS->set_gain(to<float>(gain));
86
+ return gain;
87
+ }
88
+
89
+ static
90
+ VALUE get_gain(VALUE self)
91
+ {
92
+ CHECK;
93
+
94
+ return value(THIS->gain());
95
+ }
96
+
97
+ static
98
+ VALUE set_loop(VALUE self, VALUE loop)
99
+ {
100
+ CHECK;
101
+
102
+ THIS->set_loop(to<bool>(loop));
103
+ return loop;
104
+ }
105
+
106
+ static
107
+ VALUE get_loop(VALUE self)
108
+ {
109
+ CHECK;
110
+
111
+ return value(THIS->loop());
112
+ }
113
+
114
+ static
115
+ VALUE stop_all(VALUE self)
116
+ {
117
+ Beeps::stop_all_sound_players();
118
+ }
119
+
120
+
121
+ static Class cSoundPlayer;
122
+
123
+ void
124
+ Init_beeps_sound_player ()
125
+ {
126
+ Module mBeeps = rb_define_module("Beeps");
127
+
128
+ cSoundPlayer = rb_define_class_under(mBeeps, "SoundPlayer", rb_cObject);
129
+ rb_define_alloc_func(cSoundPlayer, alloc);
130
+ rb_define_method(cSoundPlayer, "play", RUBY_METHOD_FUNC(play), 0);
131
+ rb_define_method(cSoundPlayer, "pause", RUBY_METHOD_FUNC(pause), 0);
132
+ rb_define_method(cSoundPlayer, "rewind", RUBY_METHOD_FUNC(rewind), 0);
133
+ rb_define_method(cSoundPlayer, "stop", RUBY_METHOD_FUNC(stop), 0);
134
+ cSoundPlayer.define_method("playing?", is_playing);
135
+ cSoundPlayer.define_method("paused?", is_paused);
136
+ cSoundPlayer.define_method("stopped?", is_stopped);
137
+ rb_define_method(cSoundPlayer, "gain=", RUBY_METHOD_FUNC(set_gain), 1);
138
+ rb_define_method(cSoundPlayer, "gain", RUBY_METHOD_FUNC(get_gain), 0);
139
+ rb_define_method(cSoundPlayer, "loop=", RUBY_METHOD_FUNC(set_loop), 1);
140
+ rb_define_method(cSoundPlayer, "loop", RUBY_METHOD_FUNC(get_loop), 0);
141
+ rb_define_singleton_method(cSoundPlayer, "stop_all", RUBY_METHOD_FUNC(stop_all), 0);
142
+ }
143
+
144
+
145
+ namespace Beeps
146
+ {
147
+
148
+
149
+ Class
150
+ sound_player_class ()
151
+ {
152
+ return cSoundPlayer;
153
+ }
154
+
155
+
156
+ }// Beeps
@@ -0,0 +1,64 @@
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
+ VALUE alloc(VALUE klass)
17
+ {
18
+ return value(new Beeps::RubyProcessor<Beeps::TimeStretch>, klass);
19
+ }
20
+
21
+ static
22
+ VALUE set_scale(VALUE self, VALUE scale)
23
+ {
24
+ CHECK;
25
+
26
+ THIS->set_scale(to<float>(scale));
27
+ return scale;
28
+ }
29
+
30
+ static
31
+ VALUE get_scale(VALUE self)
32
+ {
33
+ CHECK;
34
+
35
+ return value(THIS->scale());
36
+ }
37
+
38
+
39
+ static Class cTimeStretch;
40
+
41
+ void
42
+ Init_beeps_time_stretch ()
43
+ {
44
+ Module mBeeps = rb_define_module("Beeps");
45
+
46
+ cTimeStretch = mBeeps.define_class("TimeStretch", Beeps::processor_class());
47
+ rb_define_alloc_func(cTimeStretch, alloc);
48
+ rb_define_method(cTimeStretch, "scale=", RUBY_METHOD_FUNC(set_scale), 1);
49
+ rb_define_method(cTimeStretch, "scale", RUBY_METHOD_FUNC(get_scale), 0);
50
+ }
51
+
52
+
53
+ namespace Beeps
54
+ {
55
+
56
+
57
+ Class
58
+ time_stretch_class ()
59
+ {
60
+ return cTimeStretch;
61
+ }
62
+
63
+
64
+ }// Beeps
@@ -0,0 +1,62 @@
1
+ name: Release Gem
2
+
3
+ on:
4
+ push:
5
+ tags: ['v[0-9]*']
6
+
7
+ jobs:
8
+ release:
9
+ runs-on: macos-latest
10
+
11
+ steps:
12
+ - name: ruby 3.2
13
+ uses: ruby/setup-ruby@v1
14
+ with:
15
+ ruby-version: 3.2
16
+
17
+ - name: checkout
18
+ uses: actions/checkout@v2
19
+
20
+ - name: setup dependencies
21
+ run: "ruby -I.github/workflows -rutils -e 'setup_dependencies'"
22
+
23
+ - name: install gems
24
+ run: gem install yard
25
+
26
+ - name: test
27
+ run: rake quiet test
28
+
29
+ - name: create gem
30
+ id: gem
31
+ run: |
32
+ rake gem
33
+ echo path=$(ruby -e 'print Dir.glob("*.gem").first') >> $GITHUB_OUTPUT
34
+
35
+ - name: create github release
36
+ id: release
37
+ uses: actions/create-release@v1
38
+ env:
39
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
40
+ with:
41
+ tag_name: ${{ github.ref }}
42
+ release_name: ${{ github.ref }}
43
+
44
+ - name: upload to github release
45
+ uses: actions/upload-release-asset@v1
46
+ env:
47
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
48
+ with:
49
+ upload_url: ${{ steps.release.outputs.upload_url }}
50
+ asset_path: ./${{ steps.gem.outputs.path }}
51
+ asset_name: ${{ steps.gem.outputs.path }}
52
+ asset_content_type: application/zip
53
+
54
+ - name: upload to rubygems
55
+ env:
56
+ GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_AUTH_TOKEN }}
57
+ run: |
58
+ mkdir -p $HOME/.gem
59
+ touch $HOME/.gem/credentials
60
+ chmod 0600 $HOME/.gem/credentials
61
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
62
+ rake upload
@@ -22,11 +22,5 @@ jobs:
22
22
  - name: setup dependencies
23
23
  run: "ruby -I.github/workflows -rutils -e 'setup_dependencies'"
24
24
 
25
- - name: lib
26
- run: rake lib
27
-
28
- - name: ext
29
- run: rake ext
30
-
31
25
  - name: test
32
26
  run: rake test
@@ -1,3 +1,5 @@
1
+ RENAMES = {reflex: 'reflexion'}
2
+
1
3
  def sh(cmd)
2
4
  puts cmd
3
5
  system cmd
@@ -5,8 +7,10 @@ end
5
7
 
6
8
  def setup_dependencies(build: true, only: nil)
7
9
  gemspec_path = `git ls-files`.lines(chomp: true).find {|l| l =~ /\.gemspec$/}
8
- gemspec = File.read gemspec_path
9
- name = File.basename gemspec_path, '.gemspec'
10
+ return unless gemspec_path
11
+
12
+ gemspec = File.read gemspec_path
13
+ name = File.basename gemspec_path, '.gemspec'
10
14
 
11
15
  exts = File.readlines('Rakefile')
12
16
  .map {|l| l[%r|^\s*require\W+(\w+)/extension\W+$|, 1]}
@@ -15,9 +19,13 @@ def setup_dependencies(build: true, only: nil)
15
19
  exts = exts & [only].flatten.map(&:to_s) if only
16
20
 
17
21
  exts.each do |ext|
18
- ver = gemspec[/add_runtime_dependency.*'#{ext}'.*'\s*~>\s*([\d\.]+)\s*'/, 1]
19
- url = "https://github.com/xord/#{ext}.git"
20
- sh %( git clone --depth 1 --branch v#{ver} #{url} ../#{ext} )
22
+ gem = RENAMES[ext.to_sym].then {|s| s || ext}
23
+ clone = "git clone --depth 1 https://github.com/xord/#{ext}.git ../#{ext}"
24
+ ver = gemspec[/add_runtime_dependency.*['"]#{gem}['"].*['"]\s*~>\s*([\d\.]+)\s*['"]/, 1]
25
+
26
+ # 'rake subtree:push' pushes all subrepos, so cloning by new tag
27
+ # often fails before tagging each new tag
28
+ sh %( #{clone} --branch v#{ver} || #{clone} )
21
29
  sh %( cd ../#{ext} && rake ext )
22
30
  end
23
31
  end
data/ChangeLog.md CHANGED
@@ -1,6 +1,19 @@
1
1
  # beeps ChangeLog
2
2
 
3
3
 
4
+ ## [v0.1.33] - 2023-04-22
5
+
6
+ - Stream playback is now supported.
7
+ - Pause, resume, and stop after playback, as well as methods to check the status of the playback.
8
+ - Support for saving and loading sound files
9
+ - Added Oscillator, MicIn, Gain, ADSR, TimeStretch, PitchShift, and Analyser classes.
10
+
11
+
12
+ ## [v0.1.32] - 2023-03-01
13
+
14
+ - fix bugs
15
+
16
+
4
17
  ## [v0.1.31] - 2023-02-27
5
18
 
6
19
  - add ChangeLog.md file
data/Rakefile CHANGED
@@ -13,18 +13,39 @@ require 'beeps/extension'
13
13
 
14
14
 
15
15
  EXTENSIONS = [Xot, Rucy, Beeps]
16
- TESTS_ALONE = ['test/test_beeps.rb']
16
+ TESTS_ALONE = ['test/test_beeps_init.rb']
17
17
 
18
18
  use_external_library 'https://github.com/thestk/stk',
19
- tag: 'v4.6.0',
20
- incdir: 'include',
21
- srcdir: 'src',
19
+ tag: '4.6.2',
20
+ incdirs: 'include',
21
+ srcdirs: 'src',
22
22
  excludes: %w[stk/src/include Tcp Udp Socket Thread Mutex InetWv /Rt]
23
23
 
24
+ use_external_library 'https://github.com/adamstark/AudioFile',
25
+ tag: '1.1.1',
26
+ srcdirs: 'NOSRC',
27
+ excludes: %w[examples/ tests/]
28
+
29
+ use_external_library 'https://github.com/avaneev/r8brain-free-src',
30
+ tag: 'version-6.2',
31
+ excludes: %w[DLL/ bench/ other/ pffft_double example.cpp],
32
+ &proc {
33
+ filter_file('r8bconf.h') do |conf|
34
+ <<~EOS + conf
35
+ #ifndef R8B_PFFFT
36
+ #define R8B_PFFFT 1
37
+ #endif
38
+ EOS
39
+ end
40
+ }
41
+
42
+ use_external_library 'https://github.com/Signalsmith-Audio/signalsmith-stretch',
43
+ commit: 'fddcdb628f326ef187b7e5694f285f35a528aba3',
44
+ srcdirs: 'NOSRC'
45
+
46
+ default_tasks :ext
24
47
  build_native_library
25
48
  build_ruby_extension
26
49
  test_ruby_extension
27
50
  generate_documents
28
51
  build_ruby_gem
29
-
30
- task :default => :ext
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.31
1
+ 0.1.33
data/beeps.gemspec CHANGED
@@ -28,8 +28,8 @@ Gem::Specification.new do |s|
28
28
  s.platform = Gem::Platform::RUBY
29
29
  s.required_ruby_version = '>= 2.7.0'
30
30
 
31
- s.add_runtime_dependency 'xot', '~> 0.1.31'
32
- s.add_runtime_dependency 'rucy', '~> 0.1.31'
31
+ s.add_runtime_dependency 'xot', '~> 0.1.33'
32
+ s.add_runtime_dependency 'rucy', '~> 0.1.33'
33
33
 
34
34
  s.add_development_dependency 'rake'
35
35
  s.add_development_dependency 'test-unit'