audio_stream 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: abed71c7d4a93a7811ca8342ebc641a1311f36325589acfe5badf658dfee0aa8
4
- data.tar.gz: 7de1e31ab2ac77a592cb08a5a746703e55beea6a30ba19bb06426318ebc3f5bc
3
+ metadata.gz: 5bcb3b9d97e49748ebdcca6bef4ef5288dfb0dd8a1211826ee529692928df52f
4
+ data.tar.gz: c508e385ac5a131734f6b4493132b926329d2cea39aa4feed9da79e837889cef
5
5
  SHA512:
6
- metadata.gz: 8af114e5461e762d81fc7e924646a8a70a2fbd67edbb1840273a01eea2cb8a267d6946c5ef5ae13a52117a4315910ee7ff1235030001161838c535dcad218558
7
- data.tar.gz: 1f96689851d1fc48d07ff1bcacf3f898f3a727fab92d9a1ca1a47ec3e281f0964be92910c1109506a1441ccc3ea9ef61f12e88f9c539e2859c2aac1ec1412680
6
+ metadata.gz: 78ac5a990115889d5a067bfdd3fa11273b57aacb6e8b90cf5c8e332af92c260a21a5d5ed3563c92c67ebe3b65deedd21884509eae7eb29a23c5117d2b553e13e
7
+ data.tar.gz: 17f43c4fdbdd178b749ce873e4a933d23ada7b4b845c07c038c43cdceb6ba4be83ef455c47f20b18dadfce3693d4ae56ad346273eaffab7574210b2cc94a9f7e
@@ -17,7 +17,7 @@ eq_2band = Equalizer2band.new($soundinfo, lowgain: 0.0, highgain: -10.0)
17
17
  # Bus
18
18
 
19
19
  bus1 = AudioBus.new
20
- stereo_out = AudioOutput.device(soundinfo: soundinfo)
20
+ stereo_out = AudioOutput.device(soundinfo: $soundinfo)
21
21
 
22
22
 
23
23
  # Mixer
data/examples/lpf.rb ADDED
@@ -0,0 +1,40 @@
1
+ require_relative 'example_options'
2
+
3
+
4
+ # Track
5
+
6
+ track1 = $input
7
+
8
+
9
+ # Fx
10
+
11
+ lpf = LowPassFilter.create($soundinfo, freq: 440.0, q: nil)
12
+ hpf = HighPassFilter.create($soundinfo, freq: 440.0, q: nil)
13
+ bpf = BandPassFilter.create($soundinfo, freq: 440.0, bandwidth: 10.0)
14
+ lsf = LowShelfFilter.create($soundinfo, freq: 440.0, q: nil, gain: 1.0)
15
+ hsf = HighShelfFilter.create($soundinfo, freq: 440.0, q: nil, gain: 1.0)
16
+ eq_2band = Equalizer2band.new($soundinfo, lowgain: -15.0, highgain: 15.0)
17
+
18
+
19
+ # Bus
20
+
21
+ stereo_out = AudioOutput.device(soundinfo: $soundinfo)
22
+
23
+
24
+ # Mixer
25
+
26
+ track1
27
+ .stream
28
+ .fx(StereoToMono.new)
29
+ .fx(lpf)
30
+ .send_to(stereo_out)
31
+
32
+
33
+ # start
34
+
35
+ conductor = Conductor.new(
36
+ input: track1,
37
+ output: stereo_out
38
+ )
39
+ conductor.connect
40
+ conductor.join
@@ -10,8 +10,8 @@ module AudioStream
10
10
  AudioOutputFile.new(fname, soundinfo: soundinfo)
11
11
  end
12
12
 
13
- def self.device(window_size=1024)
14
- AudioOutputDevice.default_device(window_size)
13
+ def self.device(soundinfo:)
14
+ AudioOutputDevice.default_device(soundinfo: soundinfo)
15
15
  end
16
16
  end
17
17
  end
@@ -2,18 +2,9 @@ module AudioStream
2
2
  module Fx
3
3
  class BandPassFilter < BiquadFilter
4
4
 
5
- def initialize(soundinfo, freq:, bandwidth: 1.0)
6
- super()
7
- @samplerate = soundinfo.samplerate.to_f
8
- @freq = freq
9
- @bandwidth = bandwidth
10
-
11
- filter_coef
12
- end
13
-
14
- def filter_coef
15
- omega = 2.0 * Math::PI * @freq / @samplerate
16
- alpha = Math.sin(omega) * Math.sinh(Math.log(2.0) / 2.0 * @bandwidth * omega / Math.sin(omega))
5
+ def update_coef(freq:, bandwidth:)
6
+ omega = 2.0 * Math::PI * freq / @samplerate
7
+ alpha = Math.sin(omega) * Math.sinh(Math.log(2.0) / 2.0 * bandwidth * omega / Math.sin(omega))
17
8
 
18
9
  a0 = 1.0 + alpha
19
10
  a1 = -2.0 * Math.cos(omega)
@@ -24,6 +15,13 @@ module AudioStream
24
15
 
25
16
  @filter_coef = FilterCoef.new(a0, a1, a2, b0, b1, b2)
26
17
  end
18
+
19
+ def self.create(soundinfo, freq:, bandwidth: 1.0)
20
+ filter = new(soundinfo)
21
+ filter.update_coef(freq: freq, bandwidth: bandwidth)
22
+
23
+ filter
24
+ end
27
25
  end
28
26
  end
29
27
  end
@@ -11,11 +11,16 @@ module AudioStream
11
11
 
12
12
  FilterCoef = Struct.new("FilterCoef", :a0, :a1, :a2, :b0, :b1, :b2)
13
13
 
14
- def initialize
14
+ def initialize(soundinfo)
15
+ @samplerate = soundinfo.samplerate.to_f
16
+ init_buffer
17
+ end
18
+
19
+ def init_buffer
15
20
  @filter_bufs = [FilterBuffer.create, FilterBuffer.create]
16
21
  end
17
22
 
18
- def filter_coef
23
+ def update_coef(*args, **kwargs)
19
24
  raise Error, "#{self.class.name}.filter_coef is not implemented"
20
25
  end
21
26
 
@@ -10,8 +10,8 @@ module AudioStream
10
10
  @highfreq = 4000.0
11
11
  @highgain = highgain
12
12
 
13
- @low_filter = LowShelfFilter.new(soundinfo, freq: @lowfreq, q: 1.0/Math.sqrt(2.0), gain: @lowgain)
14
- @high_filter = HighShelfFilter.new(soundinfo, freq: @highfreq, q: 1.0/Math.sqrt(2.0), gain: @highgain)
13
+ @low_filter = LowShelfFilter.create(soundinfo, freq: @lowfreq, q: 1.0/Math.sqrt(2.0), gain: @lowgain)
14
+ @high_filter = HighShelfFilter.create(soundinfo, freq: @highfreq, q: 1.0/Math.sqrt(2.0), gain: @highgain)
15
15
  end
16
16
 
17
17
  def process!(input)
@@ -13,9 +13,9 @@ module AudioStream
13
13
  @highfreq = 4000.0
14
14
  @highgain = highgain
15
15
 
16
- @low_filter = LowShelfFilter.new(soundinfo, freq: @lowfreq, q: 1.0/Math.sqrt(2.0), gain: @lowgain)
17
- @mid_filter = PeakingFilter.new(soundinfo, freq: @midfreq, bandwidth: 1.0/Math.sqrt(2.0), gain: @midgain)
18
- @high_filter = HighShelfFilter.new(soundinfo, freq: @highfreq, q: 1.0/Math.sqrt(2.0), gain: @highgain)
16
+ @low_filter = LowShelfFilter.create(soundinfo, freq: @lowfreq, q: 1.0/Math.sqrt(2.0), gain: @lowgain)
17
+ @mid_filter = PeakingFilter.create(soundinfo, freq: @midfreq, bandwidth: 1.0/Math.sqrt(2.0), gain: @midgain)
18
+ @high_filter = HighShelfFilter.create(soundinfo, freq: @highfreq, q: 1.0/Math.sqrt(2.0), gain: @highgain)
19
19
  end
20
20
 
21
21
  def process!(input)
@@ -2,18 +2,9 @@ module AudioStream
2
2
  module Fx
3
3
  class HighPassFilter < BiquadFilter
4
4
 
5
- def initialize(soundinfo, freq:, q: nil)
6
- super()
7
- @samplerate = soundinfo.samplerate.to_f
8
- @freq = freq
9
- @q = q || 1.0 / Math.sqrt(2)
10
-
11
- filter_coef
12
- end
13
-
14
- def filter_coef
15
- omega = 2.0 * Math::PI * @freq / @samplerate
16
- alpha = Math.sin(omega) / (2.0 * @q)
5
+ def update_coef(freq:, q:)
6
+ omega = 2.0 * Math::PI * freq / @samplerate
7
+ alpha = Math.sin(omega) / (2.0 * q)
17
8
 
18
9
  a0 = 1.0 + alpha
19
10
  a1 = -2.0 * Math.cos(omega)
@@ -24,6 +15,15 @@ module AudioStream
24
15
 
25
16
  @filter_coef = FilterCoef.new(a0, a1, a2, b0, b1, b2)
26
17
  end
18
+
19
+ def self.create(soundinfo, freq:, q: nil)
20
+ q ||= 1.0 / Math.sqrt(2)
21
+
22
+ filter = new(soundinfo)
23
+ filter.update_coef(freq: freq, q: q)
24
+
25
+ filter
26
+ end
27
27
  end
28
28
  end
29
29
  end
@@ -2,21 +2,11 @@ module AudioStream
2
2
  module Fx
3
3
  class HighShelfFilter < BiquadFilter
4
4
 
5
- def initialize(soundinfo, freq:, q: nil, gain: 1.0)
6
- super()
7
- @samplerate = soundinfo.samplerate.to_f
8
- @freq = freq
9
- @q = q || 1.0 / Math.sqrt(2)
10
- @gain = gain
11
-
12
- filter_coef
13
- end
14
-
15
- def filter_coef
16
- omega = 2.0 * Math::PI * @freq / @samplerate
17
- alpha = Math.sin(omega) / (2.0 * @q)
18
- a = 10.0 ** (@gain / 40.0)
19
- beta = Math.sqrt(a) / @q
5
+ def update_coef(freq:, q:, gain:)
6
+ omega = 2.0 * Math::PI * freq / @samplerate
7
+ alpha = Math.sin(omega) / (2.0 * q)
8
+ a = 10.0 ** (gain / 40.0)
9
+ beta = Math.sqrt(a) / q
20
10
 
21
11
  a0 = (a+1) - (a-1) * Math.cos(omega) + beta * Math.sin(omega)
22
12
  a1 = 2.0 * ((a-1) - (a+1) * Math.cos(omega))
@@ -27,6 +17,15 @@ module AudioStream
27
17
 
28
18
  @filter_coef = FilterCoef.new(a0, a1, a2, b0, b1, b2)
29
19
  end
20
+
21
+ def self.create(soundinfo, freq:, q: nil, gain: 1.0)
22
+ q ||= 1.0 / Math.sqrt(2)
23
+
24
+ filter = new(soundinfo)
25
+ filter.update_coef(freq: freq, q: q, gain: gain)
26
+
27
+ filter
28
+ end
30
29
  end
31
30
  end
32
31
  end
@@ -2,18 +2,9 @@ module AudioStream
2
2
  module Fx
3
3
  class LowPassFilter < BiquadFilter
4
4
 
5
- def initialize(soundinfo, freq:, q: nil)
6
- super()
7
- @samplerate = soundinfo.samplerate.to_f
8
- @freq = freq
9
- @q = q || 1.0 / Math.sqrt(2)
10
-
11
- filter_coef
12
- end
13
-
14
- def filter_coef
15
- omega = 2.0 * Math::PI * @freq / @samplerate
16
- alpha = Math.sin(omega) / (2.0 * @q)
5
+ def update_coef(freq:, q:)
6
+ omega = 2.0 * Math::PI * freq / @samplerate
7
+ alpha = Math.sin(omega) / (2.0 * q)
17
8
 
18
9
  a0 = 1.0 + alpha
19
10
  a1 = -2.0 * Math.cos(omega)
@@ -24,6 +15,15 @@ module AudioStream
24
15
 
25
16
  @filter_coef = FilterCoef.new(a0, a1, a2, b0, b1, b2)
26
17
  end
18
+
19
+ def self.create(soundinfo, freq:, q: nil)
20
+ q ||= 1.0 / Math.sqrt(2)
21
+
22
+ filter = new(soundinfo)
23
+ filter.update_coef(freq: freq, q: q)
24
+
25
+ filter
26
+ end
27
27
  end
28
28
  end
29
29
  end
@@ -2,21 +2,11 @@ module AudioStream
2
2
  module Fx
3
3
  class LowShelfFilter < BiquadFilter
4
4
 
5
- def initialize(soundinfo, freq:, q: nil, gain: 1.0)
6
- super()
7
- @samplerate = soundinfo.samplerate.to_f
8
- @freq = freq
9
- @q = q || 1.0 / Math.sqrt(2)
10
- @gain = gain
11
-
12
- filter_coef
13
- end
14
-
15
- def filter_coef
16
- omega = 2.0 * Math::PI * @freq / @samplerate
17
- alpha = Math.sin(omega) / (2.0 * @q)
18
- a = 10.0 ** (@gain / 40.0)
19
- beta = Math.sqrt(a) / @q
5
+ def update_coef(freq:, q:, gain:)
6
+ omega = 2.0 * Math::PI * freq / @samplerate
7
+ alpha = Math.sin(omega) / (2.0 * q)
8
+ a = 10.0 ** (gain / 40.0)
9
+ beta = Math.sqrt(a) / q
20
10
 
21
11
  a0 = (a+1) + (a-1) * Math.cos(omega) + beta * Math.sin(omega)
22
12
  a1 = -2.0 * ((a-1) + (a+1) * Math.cos(omega))
@@ -27,6 +17,15 @@ module AudioStream
27
17
 
28
18
  @filter_coef = FilterCoef.new(a0, a1, a2, b0, b1, b2)
29
19
  end
20
+
21
+ def self.create(soundinfo, freq:, q: nil, gain: 1.0)
22
+ q ||= 1.0 / Math.sqrt(2)
23
+
24
+ filter = new(soundinfo)
25
+ filter.update_coef(freq: freq, q: q, gain: gain)
26
+
27
+ filter
28
+ end
30
29
  end
31
30
  end
32
31
  end
@@ -2,20 +2,10 @@ module AudioStream
2
2
  module Fx
3
3
  class PeakingFilter < BiquadFilter
4
4
 
5
- def initialize(soundinfo, freq:, bandwidth: 1.0, gain: 40.0)
6
- super()
7
- @samplerate = soundinfo.samplerate.to_f
8
- @freq = freq
9
- @bandwidth = bandwidth
10
- @gain = gain
11
-
12
- filter_coef
13
- end
14
-
15
- def filter_coef
16
- omega = 2.0 * Math::PI * @freq / @samplerate
17
- alpha = Math.sin(omega) * Math.sinh(Math.log(2.0) / 2.0 * @bandwidth * omega / Math.sin(omega))
18
- a = 10.0 ** (@gain / 40.0)
5
+ def update_coef(freq:, bandwidth:, gain:)
6
+ omega = 2.0 * Math::PI * freq / @samplerate
7
+ alpha = Math.sin(omega) * Math.sinh(Math.log(2.0) / 2.0 * bandwidth * omega / Math.sin(omega))
8
+ a = 10.0 ** (gain / 40.0)
19
9
 
20
10
  a0 = 1.0 + alpha / a
21
11
  a1 = -2.0 * Math.cos(omega)
@@ -26,6 +16,13 @@ module AudioStream
26
16
 
27
17
  @filter_coef = FilterCoef.new(a0, a1, a2, b0, b1, b2)
28
18
  end
19
+
20
+ def self.create(soundinfo, freq:, bandwidth: 1.0, gain: 40.0)
21
+ filter = new(soundinfo)
22
+ filter.update_coef(freq: freq, bandwidth: bandwidth, gain: gain)
23
+
24
+ filter
25
+ end
29
26
  end
30
27
  end
31
28
  end
@@ -1,3 +1,3 @@
1
1
  module AudioStream
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.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: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoshida Tetsuya
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-17 00:00:00.000000000 Z
11
+ date: 2019-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -142,6 +142,7 @@ files:
142
142
  - examples/chorus.rb
143
143
  - examples/distortion.rb
144
144
  - examples/example_options.rb
145
+ - examples/lpf.rb
145
146
  - examples/rec.rb
146
147
  - examples/tremolo.rb
147
148
  - examples/tuner.rb