module NoteFrequencies
Constants
- DEFAULT_ROUND
- DEFAULT_TUNING
- VERSION
Public Class Methods
delta(name)
click to toggle source
delta in steps from A (relative)
# File lib/note_frequencies.rb, line 53 def self.delta(name) @deltas ||= begin { :a => 0, :b => 2, :c => -9, :d => -7, :e => -5, :f => -4, :g => -2 } end @deltas[name.to_sym] end
delta_from_name(name)
click to toggle source
delta in steps from a' (absolute)
# File lib/note_frequencies.rb, line 20 def self.delta_from_name(name) note, alt, octave = name.scan(/([a-g])(eses|isis|bb|##|es|is|b|#|x)?(\d|(,+)|('+))?/).first # puts octave.inspect octave_delta = if octave if octave.start_with?("'") octave.length - 1 elsif octave.start_with?(",") -octave.length - 1 else octave.to_i - 4 end else -1 end # puts octave_delta.inspect alt_delta = if (alt == 'is' || alt == '#') 1 elsif (alt == 'isis' || alt == '##' || alt == 'x') 2 elsif (alt == 'es' || alt == 'b') -1 else 0 end delta(note) + alt_delta + 12 * octave_delta end
frequency(delta_from_a, conf = {})
click to toggle source
frequency from delta
# File lib/note_frequencies.rb, line 9 def self.frequency(delta_from_a, conf = {}) conf = { :tuning => DEFAULT_TUNING, :round => DEFAULT_ROUND }.update(conf) tuning = conf[:tuning] freq = tuning * (2**(delta_from_a.to_f/12)) round(freq, conf[:round]) end
frequency_from_name(name, conf = {})
click to toggle source
# File lib/note_frequencies.rb, line 68 def self.frequency_from_name(name, conf = {}) conf = { :tuning => DEFAULT_TUNING, :round => DEFAULT_ROUND }.update(conf) frequency(delta_from_name(name), conf) end
round(q, r)
click to toggle source
# File lib/note_frequencies.rb, line 47 def self.round(q, r) pow = 10**r (q*pow).round/pow.to_f end