Class: WTFChord::Collectors::Piano
- Inherits:
-
Generic
- Object
- WTFChord::Chord
- Generic
- WTFChord::Collectors::Piano
- Defined in:
- lib/wtf_chord/collectors/piano.rb
Constant Summary collapse
- MAX_OCTAVE =
5- CheckDist =
-> ((a, b)) { (a.to_i - b.to_i).abs <= max_dist }
- FilterProc =
-> (actual_size, notes) { notes.uniq(&:key).size == actual_size && notes.sort.each_cons(2).all?(&CheckDist) }.curry(2).freeze
- Distances =
-> (notes) { notes.each_cons(2).map { |(a, b)| (a.to_i - b.to_i).abs } }
- Sorting =
-> (tone, notes) { notes = notes.sort mod = (notes[0].note.position - tone.position).abs.next score = Distances[notes[1..-1]].sum mod + score }.curry(2).freeze
Constants inherited from WTFChord::Chord
Instance Attribute Summary
Attributes inherited from Generic
Attributes inherited from WTFChord::Chord
#bass, #name, #notes, #pitch, #steps
Instance Method Summary collapse
Methods inherited from Generic
Methods inherited from WTFChord::Chord
#===, #bass?, #fingerings, #initialize, #inspect, #original_bass, #size, #third_tone, #tone
Constructor Details
This class inherits a constructor from WTFChord::Chord
Instance Method Details
#collect! ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/wtf_chord/collectors/piano.rb', line 26 def collect! @keyboard = Keyboard.new(1..MAX_OCTAVE) @fingerings = @keyboard.keys. grep(__getobj__). combination(size). filter(&FilterProc[size]) @fingerings.uniq! { |x| x.map(&:key) } @fingerings.sort_by!(&Sorting[tone]) @fingerings end |