Class: RoadToRubykaigi::Audio::AudioEngine

Inherits:
FFI::PortAudio::Stream
  • Object
show all
Includes:
FFI::PortAudio
Defined in:
lib/road_to_rubykaigi/audio/audio_engine.rb

Instance Method Summary collapse

Instance Method Details

#add_source(source) ⇒ Object



25
26
27
# File 'lib/road_to_rubykaigi/audio/audio_engine.rb', line 25

def add_source(source)
  @sources << source.rewind
end

#muteObject



33
34
35
# File 'lib/road_to_rubykaigi/audio/audio_engine.rb', line 33

def mute
  @muted = true
end

#process(_input, output, framesPerBuffer, _timeInfo, _statusFlags, _userData) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/road_to_rubykaigi/audio/audio_engine.rb', line 8

def process(_input, output, framesPerBuffer, _timeInfo, _statusFlags, _userData)
  samples = Array.new(framesPerBuffer, 0.0)

  unless @muted
    @sources.each do |source|
      framesPerBuffer.times do |i|
        sample = source.generate * source.gain
        samples[i] += sample
      end
      remove_source(source) if source.finished?
    end
  end

  output.write_array_of_float(samples)
  :paContinue
end

#remove_source(source) ⇒ Object



29
30
31
# File 'lib/road_to_rubykaigi/audio/audio_engine.rb', line 29

def remove_source(source)
  @sources.delete(source)
end

#unmuteObject



37
38
39
# File 'lib/road_to_rubykaigi/audio/audio_engine.rb', line 37

def unmute
  @muted = false
end