Class: MusicBox::Equalizer

Inherits:
Object
  • Object
show all
Includes:
SetParams
Defined in:
lib/musicbox/equalizer.rb

Overview

Defined Under Namespace

Classes: EqualizerFilter, VolumeFilter

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params = {}) ⇒ Equalizer

Returns a new instance of Equalizer.



21
22
23
24
# File 'lib/musicbox/equalizer.rb', line 21

def initialize(params={})
  @equalizer_filters = []
  set(params)
end

Instance Attribute Details

#equalizer_filtersObject

Returns the value of attribute equalizer_filters.



10
11
12
# File 'lib/musicbox/equalizer.rb', line 10

def equalizer_filters
  @equalizer_filters
end

#nameObject

Returns the value of attribute name.



8
9
10
# File 'lib/musicbox/equalizer.rb', line 8

def name
  @name
end

#volume_filterObject

Returns the value of attribute volume_filter.



9
10
11
# File 'lib/musicbox/equalizer.rb', line 9

def volume_filter
  @volume_filter
end

Class Method Details

.load_equalizers(dir:, name:) ⇒ Object



14
15
16
17
18
19
# File 'lib/musicbox/equalizer.rb', line 14

def self.load_equalizers(dir:, name:)
  dir.glob("**/*#{name}*/*ParametricEQ.txt").map do |file|
    name = '%s (%s)' % [file.dirname.basename, file.dirname.dirname.basename]
    new(name: name).tap { |e| e.load(file) }
  end.sort
end

Instance Method Details

#<=>(other) ⇒ Object



44
45
46
# File 'lib/musicbox/equalizer.rb', line 44

def <=>(other)
  @name <=> other.name
end

#load(file) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/musicbox/equalizer.rb', line 26

def load(file)
  file.readlines.map { |l| l.sub(/#.*/, '') }.map(&:strip).reject(&:empty?).each do |line|
    key, value = line.split(/:\s+/, 1)
    case key
    when /^Preamp: ([-.\d]+) dB$/
      @volume_filter = VolumeFilter.new(volume: $1.to_f)
    when /^Filter \d+: ON PK Fc (\d+) Hz Gain ([-.\d]+) dB Q ([-.\d]+)$/
      @equalizer_filters << EqualizerFilter.new(
        frequency: $1.to_i,
        gain: $2.to_f,
        width: $3.to_f,
        type: 'q')
    else
      warn "Ignoring eq line: #{line.inspect}"
    end
  end
end

#to_s(enabled: true) ⇒ Object



48
49
50
# File 'lib/musicbox/equalizer.rb', line 48

def to_s(enabled: true)
  [@volume_filter, enabled ? @equalizer_filters : nil].flatten.compact.join(',')
end