audio_stream 3.3.3 → 3.4.0

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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/examples/bench_fx.rb +89 -0
  4. data/examples/canon.wav +0 -0
  5. data/examples/example_options.rb +2 -0
  6. data/examples/{chorus.rb → fx_chorus.rb} +2 -7
  7. data/examples/fx_compressor.rb +34 -0
  8. data/examples/fx_convolution_reverb.rb +37 -0
  9. data/examples/fx_delay.rb +33 -0
  10. data/examples/{distortion.rb → fx_distortion.rb} +4 -8
  11. data/examples/fx_noise_gate.rb +33 -0
  12. data/examples/fx_phaser.rb +36 -0
  13. data/examples/fx_schroeder_reverb.rb +34 -0
  14. data/examples/fx_vocoder.rb +44 -0
  15. data/examples/impulse_shaker.wav +0 -0
  16. data/examples/impulse_shaker_bigroom.wav +0 -0
  17. data/examples/impulse_shaker_smallhall.wav +0 -0
  18. data/examples/tuner.rb +4 -3
  19. data/jupyter/band_pass_filter.ipynb +117 -0
  20. data/jupyter/biquad.ipynb +372 -0
  21. data/jupyter/equalizer.ipynb +198 -0
  22. data/lib/audio_stream/audio_input_device.rb +20 -3
  23. data/lib/audio_stream/audio_observable.rb +5 -0
  24. data/lib/audio_stream/audio_output_device.rb +20 -3
  25. data/lib/audio_stream/buffer.rb +22 -0
  26. data/lib/audio_stream/decibel.rb +8 -8
  27. data/lib/audio_stream/fx/a_gain.rb +2 -6
  28. data/lib/audio_stream/fx/all_pass_filter.rb +4 -2
  29. data/lib/audio_stream/fx/band_pass_filter.rb +4 -2
  30. data/lib/audio_stream/fx/biquad_filter.rb +8 -3
  31. data/lib/audio_stream/fx/chorus.rb +6 -5
  32. data/lib/audio_stream/fx/comb_filter.rb +4 -2
  33. data/lib/audio_stream/fx/convolution_reverb.rb +8 -5
  34. data/lib/audio_stream/fx/delay.rb +6 -5
  35. data/lib/audio_stream/fx/distortion.rb +4 -4
  36. data/lib/audio_stream/fx/equalizer_2band.rb +5 -3
  37. data/lib/audio_stream/fx/equalizer_3band.rb +7 -0
  38. data/lib/audio_stream/fx/graphic_equalizer.rb +4 -0
  39. data/lib/audio_stream/fx/hanning_window.rb +0 -9
  40. data/lib/audio_stream/fx/high_pass_filter.rb +4 -2
  41. data/lib/audio_stream/fx/high_shelf_filter.rb +6 -7
  42. data/lib/audio_stream/fx/low_pass_filter.rb +4 -2
  43. data/lib/audio_stream/fx/low_shelf_filter.rb +6 -7
  44. data/lib/audio_stream/fx/noise_gate.rb +5 -4
  45. data/lib/audio_stream/fx/panning.rb +2 -1
  46. data/lib/audio_stream/fx/peaking_filter.rb +6 -7
  47. data/lib/audio_stream/fx/phaser.rb +7 -6
  48. data/lib/audio_stream/fx/schroeder_reverb.rb +9 -10
  49. data/lib/audio_stream/fx/tremolo.rb +7 -5
  50. data/lib/audio_stream/rate.rb +30 -5
  51. data/lib/audio_stream/version.rb +1 -1
  52. metadata +23 -10
  53. data/examples/biquad.ipynb +0 -428
  54. data/examples/equalizer.ipynb +0 -233
@@ -3,24 +3,23 @@ module AudioStream
3
3
  class SchroederReverb
4
4
 
5
5
  # @param soundinfo [AudioStream::SoundInfo]
6
- # @param time [AudioStream::Rate] reverb time
7
- # @param dry [AudioStream::Decibel] dry gain
8
- # @param wet [AudioStream::Decibel] wet gain
9
- def initialize(soundinfo, time:, dry: -1.0, wet: -20.0)
6
+ # @param dry [AudioStream::Decibel | Float] dry gain
7
+ # @param wet [AudioStream::Decibel | Float] wet gain
8
+ def initialize(soundinfo, dry: -1.0, wet: -20.0)
10
9
  @window_size = soundinfo.window_size
11
10
  @combs = [
12
- CombFilter.new(soundinfo, freq: time * (39.85 * 0.002), q: 0.871402),
13
- CombFilter.new(soundinfo, freq: time * (36.10 * 0.002), q: 0.882762),
14
- CombFilter.new(soundinfo, freq: time * (33.27 * 0.002), q: 0.891443),
15
- CombFilter.new(soundinfo, freq: time * (30.15 * 0.002), q: 0.901117),
11
+ CombFilter.new(soundinfo, freq: Rate.msec(39.85), q: 0.871402),
12
+ CombFilter.new(soundinfo, freq: Rate.msec(36.10), q: 0.882762),
13
+ CombFilter.new(soundinfo, freq: Rate.msec(33.27), q: 0.891443),
14
+ CombFilter.new(soundinfo, freq: Rate.msec(30.15), q: 0.901117),
16
15
  ]
17
16
  @allpasss = [
18
17
  AllPassFilter.create(soundinfo, freq: Rate.msec(5.0).freq(soundinfo), q: BiquadFilter::DEFAULT_Q),
19
18
  AllPassFilter.create(soundinfo, freq: Rate.msec(1.7).freq(soundinfo), q: BiquadFilter::DEFAULT_Q),
20
19
  ]
21
20
 
22
- @dry = Decibel.create(dry).mag
23
- @wet = Decibel.create(wet).mag
21
+ @dry = Decibel.db(dry).mag
22
+ @wet = Decibel.db(wet).mag
24
23
  end
25
24
 
26
25
  def process(input)
@@ -1,23 +1,25 @@
1
1
  module AudioStream
2
2
  module Fx
3
3
  class Tremolo
4
+ # @param soundinfo [AudioStream::SoundInfo]
5
+ # @param freq [AudioStream::Rate | Float] Tremolo speed (0.0~)
6
+ # @param depth [Float] Tremolo depth (0.0~)
4
7
  def initialize(soundinfo, freq:, depth:)
5
- @samplerate = soundinfo.samplerate
6
- @freq = freq.to_f
8
+ @freq = Rate.freq(freq)
7
9
  @depth = depth.to_f
8
10
  @phase = 0
11
+ @period = @freq.sample_phase(soundinfo)
9
12
  end
10
13
 
11
14
  def process(input)
12
15
  window_size = input.window_size
13
- period = 2 * Math::PI * @freq / @samplerate
14
16
 
15
17
  streams = input.streams.map {|stream|
16
18
  stream.map.with_index {|f, i|
17
- f * (1.0 + @depth * Math.sin((i + @phase) * period))
19
+ f * (1.0 + @depth * Math.sin((i + @phase) * @period))
18
20
  }
19
21
  }
20
- @phase = (@phase + window_size) % (window_size / period)
22
+ @phase = (@phase + window_size) % (window_size / @period)
21
23
 
22
24
  Buffer.new(*streams)
23
25
  end
@@ -47,6 +47,11 @@ module AudioStream
47
47
  2.0 * Math::PI / sample(soundinfo)
48
48
  end
49
49
 
50
+ def add(other, soundinfo)
51
+ other = self.class.sec(other)
52
+ self.class.new(sec: self.sec(soundinfo) + other.sec(soundinfo))
53
+ end
54
+
50
55
  def *(other)
51
56
  other = other.to_f
52
57
 
@@ -68,23 +73,43 @@ module AudioStream
68
73
  end
69
74
 
70
75
  def self.sec(v)
71
- new(sec: v)
76
+ if self===v
77
+ v
78
+ else
79
+ new(sec: v)
80
+ end
72
81
  end
73
82
 
74
83
  def self.msec(v)
75
- new(sec: v*0.001)
84
+ if self===v
85
+ v
86
+ else
87
+ new(sec: v*0.001)
88
+ end
76
89
  end
77
90
 
78
91
  def self.sample(v)
79
- new(sample: v)
92
+ if self===v
93
+ v
94
+ else
95
+ new(sample: v)
96
+ end
80
97
  end
81
98
 
82
99
  def self.freq(v)
83
- new(freq: v)
100
+ if self===v
101
+ v
102
+ else
103
+ new(freq: v)
104
+ end
84
105
  end
85
106
 
86
107
  def self.sync(v)
87
- new(sync: v)
108
+ if self===v
109
+ v
110
+ else
111
+ new(sync: v)
112
+ end
88
113
  end
89
114
 
90
115
 
@@ -1,3 +1,3 @@
1
1
  module AudioStream
2
- VERSION = "3.3.3"
2
+ VERSION = "3.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: audio_stream
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.3
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoshida Tetsuya
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-04 00:00:00.000000000 Z
11
+ date: 2021-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -138,15 +138,28 @@ files:
138
138
  - audio_stream.gemspec
139
139
  - bin/console
140
140
  - bin/setup
141
- - examples/biquad.ipynb
142
- - examples/chorus.rb
143
- - examples/distortion.rb
144
- - examples/equalizer.ipynb
141
+ - examples/bench_fx.rb
142
+ - examples/canon.wav
145
143
  - examples/example_options.rb
144
+ - examples/fx_chorus.rb
145
+ - examples/fx_compressor.rb
146
+ - examples/fx_convolution_reverb.rb
147
+ - examples/fx_delay.rb
148
+ - examples/fx_distortion.rb
149
+ - examples/fx_noise_gate.rb
150
+ - examples/fx_phaser.rb
151
+ - examples/fx_schroeder_reverb.rb
152
+ - examples/fx_vocoder.rb
153
+ - examples/impulse_shaker.wav
154
+ - examples/impulse_shaker_bigroom.wav
155
+ - examples/impulse_shaker_smallhall.wav
146
156
  - examples/lpf.rb
147
157
  - examples/rec.rb
148
158
  - examples/tremolo.rb
149
159
  - examples/tuner.rb
160
+ - jupyter/band_pass_filter.ipynb
161
+ - jupyter/biquad.ipynb
162
+ - jupyter/equalizer.ipynb
150
163
  - lib/audio_stream.rb
151
164
  - lib/audio_stream/audio_bus.rb
152
165
  - lib/audio_stream/audio_input.rb
@@ -208,7 +221,7 @@ metadata:
208
221
  homepage_uri: https://github.com/yoshida-eth0/ruby-audio_stream
209
222
  source_code_uri: https://github.com/yoshida-eth0/ruby-audio_stream
210
223
  changelog_uri: https://github.com/yoshida-eth0/ruby-audio_stream
211
- post_install_message:
224
+ post_install_message:
212
225
  rdoc_options: []
213
226
  require_paths:
214
227
  - lib
@@ -223,8 +236,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
223
236
  - !ruby/object:Gem::Version
224
237
  version: '0'
225
238
  requirements: []
226
- rubygems_version: 3.0.3
227
- signing_key:
239
+ rubygems_version: 3.2.3
240
+ signing_key:
228
241
  specification_version: 4
229
242
  summary: AudioStream is a Digital Audio Workstation for CLI
230
243
  test_files: []