pytakt.chord module¶
このモジュールには、コードシンボルに関連するクラスが定義されています。
- class Chord(name=None, *, kind=None, root=None, bass=None, modifications=[])¶
Bases:
objectジャズやポピュラー音楽などで使われるコードシンボルを表すオブジェクトの クラスです。これは、MusicXMLの <harmony> 要素におけるコードの表現法を ベースにしています。ただし、一部のコード種別や、フレットボード表示に 関する情報などは省かれています。
インスタンスの属性
- kind¶
下のいずれかの文字列によってコードの種別を表します。 それぞれの意味については、下の コード名の記述 の項、および MusicXMLの <harmony> 要素の kind の項目 <https://www.w3.org/2021/06/musicxml40/musicxml-reference/data-types/kind-value/> を 参照して下さい。
‘major’, ‘major-sixth’, ‘major-seventh’, ‘major-ninth’, ‘major-11th’, ‘major-13th’, ‘major-minor’, ‘minor’, ‘minor-sixth’, ‘minor-seventh’, ‘minor-ninth’, ‘minor-11th’, ‘minor-13th’, ‘dominant’, ‘dominant-ninth’, ‘dominant-11th’, ‘dominant-13th’, ‘augmented’, ‘augmented-seventh’, ‘diminished’, ‘diminished-seventh’, ‘half-diminished’, ‘suspended-fourth’, ‘suspended-second’, ‘power’
- Type:
str
- modifications¶
MusicXMLの <degree> 要素に相当し、コードの追加音、変化音、および省略音を表します。 リストの各要素は、長さ3のタプルです。各タプルの第1項目は ‘add’ (追加音)、’alter’ (変化音)、’subtract’ (省略音) のいずれかの 文字列です。第2項目は、根音からの度数を表す整数です。 第3項目は、基準となるピッチからの半音単位の変化分を表す整数です。 基準となるピッチとは、追加音の場合は Mixolydian スケール上の ピッチ、変化音の場合はkind要素で指定されるコードの構成音のピッチ を意味します。
例: C7b9 コードは、kind=’dominant’, root=C4, modifications=[(‘add’, 9, -1)] として表します。
- Type:
list of (str, int, int)
コンストラクタ引数
- Parameters:
name (str, optional) – 下に示すコード名によってコードを指定します。この引数が Noneの場合 は、kind 引数、および root 引数の指定が必須となります。
kind (str, optional) – kind属性を指定します。コード名によって既に指定されている場合は、 それをオーバライドします。
root (Pitch or int, optional) – root属性を指定します。コード名によって既に指定されている場合は、 それをオーバライドします。
bass (Pitch or int, optional) – bass属性を指定します。コード名によって既に指定されている場合は、 それをオーバライドします。
modifications (iterable of (str, int, int)) – modifications属性を指定します。コード名によって既に与えられている 場合は、それにこの引数で指定されたタプルを追加します。
コード名の記述
本クラスでは、次のように並んだ文字列をコード名として使用します。 <type>以降の各部分文字列の間にはスペース、カンマおよび丸括弧を自由に 挿入できます。
<root> <type> <modification>* [/<bass>]
<root>は根音のピッチを表し、’A’から’G’の英文字 (小文字も可) に 高々2個のシャープ ‘#’ またはフラット ‘b’ を続けたものです。 コード名を使った場合オクターブは常に3となります。他のオクターブを 指定したい場合は、root 引数を使ってください。
<type>は、次の表に示された文字列によってコードの種別 (kind属性の値) を 表します (case-sensitive)。
kind属性
<type>
構成音
major
‘’
1, 3, 5
major-sixth
‘6’
1, 3, 5, 6
major-seventh
‘M7’ ‘maj7’ ‘Maj7’
1, 3, 5, 7
major-ninth
‘M9’ ‘maj9’ ‘Maj9’
1, 3, 5, 7, 9
major-11th
‘M11’ ‘maj11’ ‘Maj11’
1, 3, 5, 7, 9, 11
major-13th
‘M13’ ‘maj13’ ‘Maj13’
1, 3, 5, 7, 9, 11, 13
major-minor
‘mM7’
1, b3, 5, 7
minor
‘m’
1, b3, 5
minor-sixth
‘m6’
1, b3, 5, 6
minor-seventh
‘m7’
1, b3, 5, b7
minor-ninth
‘m9’
1, b3, 5, b7, 9
minor-11th
‘m11’
1, b3, 5, b7, 9, 11
minor-13th
‘m13’
1, b3, 5, b7, 9, 11, 13
dominant
‘7’
1, 3, 5, b7
dominant-ninth
‘9’
1, 3, 5, b7, 9
dominant-11th
‘11’
1, 3, 5, b7, 9, 11
dominant-13th
‘13’
1, 3, 5, b7, 9, 11, 13
augmented
‘aug’
1, 3, #5
augmented-seventh
‘aug7’
1, 3, #5, b7
diminished
‘dim’
1, b3, b5
diminished-seventh
‘dim7’
1, b3, b5, 6
half-diminished
‘m7b5’
1, b3, b5, b7
suspended-fourth
‘sus4’
1, 4, 5
suspended-second
‘sus2’
1, 2, 5
power
‘5’, ‘power’
1, 5
これらに加えて、<type> には次の文字列を指定できます。これらは 各々の等号の右にあるコードと同じものだと解釈されます。
‘7sus4’ = ‘sus4add7’, ‘9sus4’ = ‘sus4(9)add7’, ‘7sus2’ = ‘sus2add7’, ‘mM11’ = ‘mM7(9,11)’, ‘mM13’ = ‘mM7(9,11,13)’, ‘aug9’ = ‘aug7(9)’, ‘aug11’ = ‘aug7(9,11)’, ‘aug13’ = ‘aug7(9,11,13)’, ‘dim9’ = ‘dim7(9)’, ‘dim11’ = ‘dim7(9,11)’, ‘m9b5’ = ‘m7b5(9)’, ‘m11b5’ = ‘m7b5(9,11)’, ‘m13b5’ = ‘m7b5(9,11,13)’, ‘7alt’ = ‘7(b9,#9,#11,b13)’
<modification> は、次のいずれかによって変化音、追加音、または省略音を 指定します。これは複数指定可能です。
‘add<任意個の#/b><整数>’, ‘alter<任意個の#/b><整数>’, ‘omit<整数>’, ‘b5’, ‘#5’, ‘M7’, ‘M9’, ‘M11’, ‘M13’, ‘b9’, ‘9’, ‘#9’, ‘11’, ‘#11’, ‘13’, ‘b13’
‘add’ は追加音、’alter’ は変化音、’omit’ は省略音の指定です。それ以外 の <modification> は、指定された度数が <type> で定まるベースコードに 含まれていれば変化音、そうでなければ追加音として扱われます。 ‘M9’, ‘M11’ ‘M13’ はそれぞれ、’M7,9’, ‘M7,9,11’, ‘M7,9,11,13’ と等価です。
/<bass> ばバス音を指定します(省略可)。指定方法は <root> と同じです。
<root>, <type>, および 各<modification> への文字列の分け方に曖昧性があ る場合、先(左)にある要素にできるだけ長い文字列を割り当てようとします( いわゆる greedy ルール)。 例えば、’Ab9’ は、根音が ‘Ab’ の dominant-ninth コードと解釈されます。 根音が ‘A’ の major コードに ‘b9’ のテンションを付加したものとしたい 場合は、’A(b9)’ や ‘A b9’ のように間に区切りの文字を入れてください。 同様に、’Ab5’ は根音が ‘Ab’ のパワーコード、’A(b5)’ は A majorコードの 5度音を半音下げたコードと解釈されます。
- コード名の例: ‘C7b9’, ‘C(9)’, ‘C69’, ‘C13#11’, ‘CaugM7’, ‘C#11’,
‘CdimM9’, ‘F#m7b5(11)’, ‘C7sus4b9’, ‘C7omit3add2’, ‘C7(alter#5,addb9)’, ‘C/E’, ‘FM7/G’
演算規則
Chordオブジェクトどうしの等価比較(‘==’)は、すべての属性値が 等価であるときのみ真となります。
chord をChordオブジェクトとするとき、pitch
inchord は chord.is_chord_tone(pitch) と等価です。
- name() str¶
コード名を返します。このコード名をコンストラクタへ渡すと、 根音やバス音のオクターブ番号を除いて等価な Chordオブジェクトが 生成されます。
- degrees(maxinterval=None) Dict[int, Tuple[int]]¶
度数ごとの構成音を表した辞書(dict)オブジェクトを返します。 辞書のキーは度数を表す整数であり、辞書の値は整数のタプルで各整数は Mixolydian スケール上の音からの乖離(半音単位)を表します。 bass音は考慮されません。また、辞書のキー、および各タプル中の値は、 ソートされているとは限りません。
- Parameters:
maxinterval (Interval or int, optional) – Intervalオブジェクト もしくは半音数を表す整数を指定すると、根音からの音程がこの値 以内の音だけを出力するようになります。デフォルトでは、 すべての音が出力されます。
Examples
>>> Chord('CM7').degrees() {1: (0,), 3: (0,), 5: (0,), 7: (1,)} >>> Chord('G7(b13,#9,b9)').degrees() {1: (0,), 3: (0,), 5: (0,), 7: (0,), 13: (-1,), 9: (1, -1)} >>> Chord('CM13').degrees(maxinterval=Interval('M7')) {1: (0,), 3: (0,), 5: (0,), 7: (1,)}
- simplify(use_extended_chords=True) Chord¶
コード構成音を変えずに、modifications属性の要素数が最小になる ように修正した新しい Chord オブジェクトを返します。ルート音、 バス音は変わりません。返されるコードにおいて modifications属性は、 種別、度数、変化量をこの順にキーとしてソートされています。
- Parameters:
use_extended_chords (bool, optional) – False を指定すると、9th, 11th, 13th を含むコードは基本コード (kind属性で指定されるコード) として使用されなくなります。
Examples
>>> Chord('C7add9') Chord(kind='dominant', root=C3, bass=None, modifications=[('add', 9, 0)]) >>> Chord('C7add9').simplify() Chord(kind='dominant-ninth', root=C3, bass=None, modifications=[]) >>> Chord('C7add9').simplify().name() 'C9' >>> Chord("C13(#11)").simplify(False).name() 'C7(9,#11,13)'
- pitches(maxinterval=None) List[Pitch]¶
コード構成音のピッチのリストを返します。バス音が指定されている場合、 それも含められます(このときバス音と同じピッチクラスの他の音は取り 除かれ、また、バス音より低い他の音は、バス音より高くなるように オクターブが上げられます)。
Examples
>>> Chord('Cdim7').pitches() [C3, Eb3, Gb3, A3] >>> Chord('G7/F').pitches() [F3, G3, B3, D4] >>> Chord('F/G').pitches() [G3, A3, C4, F4]
- pitches_above(pitch, num=None, maxinterval=None) Iterator[Pitch]¶
pitch より上にあるコード構成音 (bass音およびオクターブが異なる音を 含む) のピッチを順に yield するジェネレータ関数です。
- Parameters:
Examples
>>> list(Chord('C7').pitches_above(C4, 5)) [E4, G4, Bb4, C5, E5]
- pitches_below(pitch, num=None, maxinterval=None) Iterator[Pitch]¶
pitch より下にあるコード構成音 (bass音およびオクターブが異なる音を 含む) のピッチを順に yield するジェネレータ関数です。
- is_chord_tone(pitch, maxinterval=None) bool¶
コード構成音 (バス音を含む) に pitch と同じピッチクラスの音が含ま れていれば真を返し、そうでなければ偽を返します。
- static from_chroma_profile(chroma_profile, bass=None) Chord¶
クロマプロファイル (
chroma_profile()を参照) から推測した コードをを返します。クロマプロファイルの各要素はその真偽値のみが 推測に利用されます。全要素が偽のクロマプロファイルを与えたときは 例外を送出します。[Experimental]- Parameters:
bass (Pitch or int, optional) – コードのバス音を指定します。 これは出力されるコードにバス音として設定されるだけでなく、 推測の際の根音のヒントとして働きます。
Examples
>>> cp = [1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0] >>> Chord.from_chroma_profile(cp).name() 'Dm9' >>> Chord.from_chroma_profile(cp, bass=F3).name() 'FM7(13)' >>> Chord.from_chroma_profile(cp, bass=C3).name() 'Dm9/C'