Class: JazzModel::Chord
- Includes:
- KeyContext
- Defined in:
- lib/jazz_model/chord.rb
Overview
A chord object represents a chord defined as an unordered collection of tones (non-octaval). Mixes in the KeyContext
module to provide optional key context on the chord.
Creating a Chord
Chords should be created by indexing the Chord
class like an array, like so:
Chord[symbol]
An alternative method of resolving a chord is to use the resolve
method, though this is likely to become deprecated in the future when chord progression support/representation is added:
Chord.resolve(symbol)
This resolves a specified chord symbol into a new chord object using data regarding chord symbol-to-chord relationships. symbol
can be any standard jazz chord symbol representable as plain ASCII (unicode support for other symbols such as full-diminished circle in the works). Can be prefixed with a key.
Object Relationships
A chord object has the following associations, exposed by methods:
-
symbols
- Associated chord symbols. -
primary_symbol
- Primary chord symbol. -
chord_scales
- Chord-scale relationship objects. See ChordScale. -
modes
- Direct access to associated scale modes throughchord_scales
. -
tones
- Sequence of tones associated with the chord. SeeToneSequence
. -
voicings
- Voicings associated with this chord.#
Example Usage
Creating Chords Without Key Context
Chord['maj']
Chord['min7'
Chord['maj7#11']
Chord['7#9']
Creating Chords With Key Context
Chord['C7']
Chord['Bbalt']
Chord['Gbmaj7']
Getting Chord Notes
Use notes
to retrieve a collection of notes, which actually delegates to tones.notes
:
Chord['C7'].notes
# => ['C', 'E', 'G', 'Bb']
Chord['Cmaj7#11'].notes
# => ["C", "E", "G", "B", "F#"]
Correctly Interpets Theoretical Keys (not just pitches)
Note the #11 is correctly interpreted as E# and not enharmonic F here:
Chord['Bmaj7#11'].notes
# => ["B", "D#", "F#", "A#", "E#"]
Also correctly interpet tones off of enharmonic base keys:
Chord['Gbmaj7'].notes
# => ["Gb", "Bb", "Db", "F"]
Chord['F#maj7'].notes
# => ["F#", "A#", "C#", "E#"]
See Related Scales
Chord['min7'].modes.names # .names == .map(&:name)
# => ['Dorian']
Chord['min7'].modes[0].scale.name
# => "Major"
Chord['Amin7'].modes.names
# => ['A Dorian']
Class Method Summary collapse
-
.resolve(symbol) ⇒ Object
(also: [])
Resolves a chord symbol into a chord.
Instance Method Summary collapse
Methods included from KeyContext
Methods inherited from Base
Class Method Details
.resolve(symbol) ⇒ Object Also known as: []
Resolves a chord symbol into a chord. Implementation is somewhat flakey due to the potential ambiguities arising from specifying key and symbols together.
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/jazz_model/chord.rb', line 107 def resolve(symbol) in_key = nil return nil if symbol.nil? symbol = symbol.dup Key.all.each do |k| if symbol.starts_with?(k.name) in_key = k symbol.sub!(k.name, '').strip break end end chord_symbol = ChordSymbol[symbol] # Perhaps the matched key was really part of the name of the chord, try that: if chord_symbol.nil? && !in_key.nil? symbol = in_key.name + symbol chord_symbol = ChordSymbol[symbol] end # If still not found, must be invalid: return nil if chord_symbol.nil? chord = chord_symbol.chord chord.key = in_key unless in_key.nil? chord end |
Instance Method Details
#symbols_list ⇒ Object
98 99 100 |
# File 'lib/jazz_model/chord.rb', line 98 def symbols_list self.symbols.map {|s| s.name }.join(', ') end |