audio_stream 3.3.3 → 3.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/examples/bench_fx.rb +89 -0
- data/examples/canon.wav +0 -0
- data/examples/example_options.rb +2 -0
- data/examples/{chorus.rb → fx_chorus.rb} +2 -7
- data/examples/fx_compressor.rb +34 -0
- data/examples/fx_convolution_reverb.rb +37 -0
- data/examples/fx_delay.rb +33 -0
- data/examples/{distortion.rb → fx_distortion.rb} +4 -8
- data/examples/fx_noise_gate.rb +33 -0
- data/examples/fx_phaser.rb +36 -0
- data/examples/fx_schroeder_reverb.rb +34 -0
- data/examples/fx_vocoder.rb +44 -0
- data/examples/impulse_shaker.wav +0 -0
- data/examples/impulse_shaker_bigroom.wav +0 -0
- data/examples/impulse_shaker_smallhall.wav +0 -0
- data/examples/tuner.rb +4 -3
- data/jupyter/band_pass_filter.ipynb +117 -0
- data/jupyter/biquad.ipynb +372 -0
- data/jupyter/equalizer.ipynb +198 -0
- data/lib/audio_stream/audio_input_device.rb +20 -3
- data/lib/audio_stream/audio_observable.rb +5 -0
- data/lib/audio_stream/audio_output_device.rb +20 -3
- data/lib/audio_stream/buffer.rb +22 -0
- data/lib/audio_stream/decibel.rb +8 -8
- data/lib/audio_stream/fx/a_gain.rb +2 -6
- data/lib/audio_stream/fx/all_pass_filter.rb +4 -2
- data/lib/audio_stream/fx/band_pass_filter.rb +4 -2
- data/lib/audio_stream/fx/biquad_filter.rb +8 -3
- data/lib/audio_stream/fx/chorus.rb +6 -5
- data/lib/audio_stream/fx/comb_filter.rb +4 -2
- data/lib/audio_stream/fx/convolution_reverb.rb +8 -5
- data/lib/audio_stream/fx/delay.rb +6 -5
- data/lib/audio_stream/fx/distortion.rb +4 -4
- data/lib/audio_stream/fx/equalizer_2band.rb +5 -3
- data/lib/audio_stream/fx/equalizer_3band.rb +7 -0
- data/lib/audio_stream/fx/graphic_equalizer.rb +4 -0
- data/lib/audio_stream/fx/hanning_window.rb +0 -9
- data/lib/audio_stream/fx/high_pass_filter.rb +4 -2
- data/lib/audio_stream/fx/high_shelf_filter.rb +6 -7
- data/lib/audio_stream/fx/low_pass_filter.rb +4 -2
- data/lib/audio_stream/fx/low_shelf_filter.rb +6 -7
- data/lib/audio_stream/fx/noise_gate.rb +5 -4
- data/lib/audio_stream/fx/panning.rb +2 -1
- data/lib/audio_stream/fx/peaking_filter.rb +6 -7
- data/lib/audio_stream/fx/phaser.rb +7 -6
- data/lib/audio_stream/fx/schroeder_reverb.rb +9 -10
- data/lib/audio_stream/fx/tremolo.rb +7 -5
- data/lib/audio_stream/rate.rb +30 -5
- data/lib/audio_stream/version.rb +1 -1
- metadata +23 -10
- data/examples/biquad.ipynb +0 -428
- 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
|
7
|
-
# @param
|
8
|
-
|
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:
|
13
|
-
CombFilter.new(soundinfo, freq:
|
14
|
-
CombFilter.new(soundinfo, freq:
|
15
|
-
CombFilter.new(soundinfo, freq:
|
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.
|
23
|
-
@wet = Decibel.
|
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
|
-
@
|
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
|
data/lib/audio_stream/rate.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
108
|
+
if self===v
|
109
|
+
v
|
110
|
+
else
|
111
|
+
new(sync: v)
|
112
|
+
end
|
88
113
|
end
|
89
114
|
|
90
115
|
|
data/lib/audio_stream/version.rb
CHANGED
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.
|
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:
|
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/
|
142
|
-
- examples/
|
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.
|
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: []
|