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

root

コード根音のピッチ。 オクターブも意味を持ちます。

Type:

Pitch or int

bass

コードのバス音のピッチ。 オクターブも意味を持ちます。Noneのときは root と同一だと見な されます。

Type:

Pitch, int, or None

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 in chord は chord.is_chord_tone(pitch) と等価です。


copy() Chord

複製されたChordオブジェクトを返します。modifications属性はリスト としての複製が行われます。

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]

コード構成音のピッチのリストを返します。バス音が指定されている場合、 それも含められます(このときバス音と同じピッチクラスの他の音は取り 除かれ、また、バス音より低い他の音は、バス音より高くなるように オクターブが上げられます)。

Parameters:

maxinterval (Interval or int, optional) – degrees() の 同名の引数と同じ意味を持ちます。

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:
  • pitch (Pitch or int) – 基準となるピッチ

  • num (int, optional) – 指定すると、その個数だけに限定して出力します。

  • maxinterval (Interval or int, optional) – degrees() の 同名の引数と同じ意味を持ちます。

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 するジェネレータ関数です。

Parameters:
  • pitch (Pitch or int) – 基準となるピッチ

  • num (int, optional) – 指定すると、その個数だけに限定して出力します。

  • maxinterval (Interval or int, optional) – degrees() の 同名の引数と同じ意味を持ちます。

is_chord_tone(pitch, maxinterval=None) bool

コード構成音 (バス音を含む) に pitch と同じピッチクラスの音が含ま れていれば真を返し、そうでなければ偽を返します。

Parameters:

maxinterval (Interval or int, optional) – degrees() の 同名の引数と同じ意味を持ちます。

demo(**kwargs) Score

コードについてのデモ演奏のスコアを返します。

Parameters:

kwargs – note関数に渡される追加の引数

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'