class MusicBox::Equalizer

ffmpeg.org/ffmpeg-filters.html github.com/jaakkopasanen/AutoEq

Attributes

equalizer_filters[RW]
name[RW]
volume_filter[RW]

Public Class Methods

load_equalizers(dir:, name:) click to toggle source
# 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
new(params={}) click to toggle source
# File lib/musicbox/equalizer.rb, line 21
def initialize(params={})
  @equalizer_filters = []
  set(params)
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/musicbox/equalizer.rb, line 44
def <=>(other)
  @name <=> other.name
end
load(file) click to toggle source
# 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) click to toggle source
# File lib/musicbox/equalizer.rb, line 48
def to_s(enabled: true)
  [@volume_filter, enabled ? @equalizer_filters : nil].flatten.compact.join(',')
end