pytakt.scale module¶
このモジュールには、スケール (音階) に関連するクラスとユーティリティ関数が 定義されています。
- class Scale(tonic, type='major')¶
Bases:
objectスケール (音階) を表すオブジェクトのクラスです。
インスタンスの属性
- tone_list¶
スケール構成音のリスト。 各要素は tonic からの音程 (Interval オブジェクトもしくは 半音数表す整数)。
- Type:
list of Interval or int
- minor_like¶
短調スケールに近いときに1、それ以外で0。これは、 pitch()で返されるPitchオブジェクトの異名同音の選択に影響します。
- Type:
int
コンストラクタ引数
- Parameters:
tonic (Pitch or int) – スケール開始音
type (str or 2-tuple) – スケールの種類。ScaleLibraryクラスに登録されいる クラス変数名の文字列、または、tone_list属性とminor_like属性から なる2要素タプル。
Examples
>>> Scale(C4, 'major') Scale(C4, ([Interval('P1'), Interval('M2'), Interval('M3'), Interval('P4'), Interval('P5'), Interval('M6'), Interval('M7')], 0)) >>> s = Scale(F4, ScaleLibrary.minor) >>> s.pitches() [F4, G4, Ab4, Bb4, C5, Db5, Eb5] >>> s[1], s[14] (G4, F6) >>> s.demo().play()
トーン番号
トーン番号とは、tonicを0として、スケール上の音に対して順に無限に 番号を振ったもので、tonicより下の音には負のトーン番号が割り当て られます。例えば、C4をtonicとするmajor scaleにおいて、C5, G5, F3 の トーン番号はそれぞれ 7, 11, -4 です。 トーン番号は浮動小数点数のこともあり、非スケール音を表すのに使われます。
演算規則
s を Scale オブジェクトとしたとき、s[i] の値は、トーン番号がiである 音の Pitch オブジェクトになります (s.pitch(i) と等価)。
len(Scaleオブジェクト) は、スケール構成音の数を返します。
Scaleオブジェクトどうしの等価比較(‘==’)は、すべての属性値が 等価であるときのみ真となります。
s を Scaleオブジェクト、p をピッチとするとき、p
ins は s.is_scale_tone(p) と等価です。
- is_scale_tone(pitch) bool¶
pitch がスケール上の音であれば真を返します。
- Parameters:
pitch (int) – MIDIノート番号
- tonenum(pitch, enharmonic_delta=0.01) Union[int, float]¶
Pitch オブジェクトをトーン番号に変換します。
- Parameters:
pitch (Pitch or int) – PitchオブジェクトまたはMIDIノート番号を表す整数
enharmonic_delta (float) – pitch がPitchオブジェクトであり、かつ、 非スケール音を表しているとき、異名同音に応じて結果に この値が増減されます。下のスケール音からピッチを上げるような 表記のときは減じられ、逆のときは加えられます。
- Returns:
トーン番号。非スケール音のときは線形補間によって 求められた浮動小数点数を返します。
- pitch(tone_number) Pitch¶
トーン番号を Pitch オブジェクトに変換します。 トーン番号が整数でないときは、近傍のスケール音から線形補間によって 実数のMIDIノート番号がまず求められ、それに最も近い整数が 結果のピッチとなります(最も近い整数が2つあるときは上の音が選ばれます)。
- Parameters:
tone_number (int or float) – トーン番号
- get_near_scale_tone(pitch, round_mode='nearestup') Pitch¶
pitch に近いスケール上の音のピッチを返します。 Scaleオブジェクトをsとしたとき、
s.get_near_scale_tone(p, r)はs[takt_roundx(s.tonenum(p), r)]と等価です。- Parameters:
pitch (Pitch or int) – PitchオブジェクトまたはMIDIノート番号を表す整数
round_mode (str or function) –
takt_roundx()へ渡す丸めモード。
- class ScaleLibrary¶
Bases:
objectさまざまな音階のライブラリ。各クラス変数の値は、 Scaleクラスのtone_listとminor_likeに相当する2要素タプルを表します。
- major = ([Interval('P1'), Interval('M2'), Interval('M3'), Interval('P4'), Interval('P5'), Interval('M6'), Interval('M7')], 0)¶
- ionian = ([Interval('P1'), Interval('M2'), Interval('M3'), Interval('P4'), Interval('P5'), Interval('M6'), Interval('M7')], 0)¶
- dorian = ([Interval('P1'), Interval('M2'), Interval('m3'), Interval('P4'), Interval('P5'), Interval('M6'), Interval('m7')], 1)¶
- phrygian = ([Interval('P1'), Interval('m2'), Interval('m3'), Interval('P4'), Interval('P5'), Interval('m6'), Interval('m7')], 1)¶
- lydian = ([Interval('P1'), Interval('M2'), Interval('M3'), Interval('A4'), Interval('P5'), Interval('M6'), Interval('M7')], 0)¶
- mixolydian = ([Interval('P1'), Interval('M2'), Interval('M3'), Interval('P4'), Interval('P5'), Interval('M6'), Interval('m7')], 0)¶
- dominant = ([Interval('P1'), Interval('M2'), Interval('M3'), Interval('P4'), Interval('P5'), Interval('M6'), Interval('m7')], 0)¶
- aeolian = ([Interval('P1'), Interval('M2'), Interval('m3'), Interval('P4'), Interval('P5'), Interval('m6'), Interval('m7')], 1)¶
- locrian = ([Interval('P1'), Interval('m2'), Interval('m3'), Interval('P4'), Interval('d5'), Interval('m6'), Interval('m7')], 1)¶
- naturalminor = ([Interval('P1'), Interval('M2'), Interval('m3'), Interval('P4'), Interval('P5'), Interval('m6'), Interval('m7')], 1)¶
- minor = ([Interval('P1'), Interval('M2'), Interval('m3'), Interval('P4'), Interval('P5'), Interval('m6'), Interval('m7')], 1)¶
- melodicminor = ([Interval('P1'), Interval('M2'), Interval('m3'), Interval('P4'), Interval('P5'), Interval('M6'), Interval('M7')], 1)¶
- dorianf2 = ([Interval('P1'), Interval('m2'), Interval('m3'), Interval('P4'), Interval('P5'), Interval('M6'), Interval('m7')], 0)¶
- phrygians6 = ([Interval('P1'), Interval('m2'), Interval('m3'), Interval('P4'), Interval('P5'), Interval('M6'), Interval('m7')], 0)¶
- lydianaugmented = ([Interval('P1'), Interval('M2'), Interval('M3'), Interval('A4'), Interval('A5'), Interval('M6'), Interval('M7')], 0)¶
- lydiandominant = ([Interval('P1'), Interval('M2'), Interval('M3'), Interval('A4'), Interval('P5'), Interval('M6'), Interval('m7')], 0)¶
- overtone = ([Interval('P1'), Interval('M2'), Interval('M3'), Interval('A4'), Interval('P5'), Interval('M6'), Interval('m7')], 0)¶
- lydian7th = ([Interval('P1'), Interval('M2'), Interval('M3'), Interval('A4'), Interval('P5'), Interval('M6'), Interval('m7')], 0)¶
- mixolydianf6 = ([Interval('P1'), Interval('M2'), Interval('M3'), Interval('P4'), Interval('P5'), Interval('m6'), Interval('m7')], 0)¶
- locrians2 = ([Interval('P1'), Interval('M2'), Interval('m3'), Interval('P4'), Interval('d5'), Interval('m6'), Interval('m7')], 1)¶
- aeolianf5 = ([Interval('P1'), Interval('M2'), Interval('m3'), Interval('P4'), Interval('d5'), Interval('m6'), Interval('m7')], 1)¶
- halfdiminished = ([Interval('P1'), Interval('M2'), Interval('m3'), Interval('P4'), Interval('d5'), Interval('m6'), Interval('m7')], 1)¶
- altereddominant = ([Interval('P1'), Interval('m2'), Interval('m3'), Interval('d4'), Interval('d5'), Interval('m6'), Interval('m7')], 1)¶
- superlocrian = ([Interval('P1'), Interval('m2'), Interval('m3'), Interval('d4'), Interval('d5'), Interval('m6'), Interval('m7')], 1)¶
- altered = ([Interval('P1'), Interval('m2'), Interval('A2'), Interval('M3'), Interval('A4'), Interval('m6'), Interval('m7')], 1)¶
- harmonicminor = ([Interval('P1'), Interval('M2'), Interval('m3'), Interval('P4'), Interval('P5'), Interval('m6'), Interval('M7')], 1)¶
- phrygiandominant = ([Interval('P1'), Interval('m2'), Interval('M3'), Interval('P4'), Interval('P5'), Interval('m6'), Interval('m7')], 0)¶
- harmonicminor5below = ([Interval('P1'), Interval('m2'), Interval('M3'), Interval('P4'), Interval('P5'), Interval('m6'), Interval('m7')], 0)¶
- ukrainiandorian = ([Interval('P1'), Interval('M2'), Interval('m3'), Interval('A4'), Interval('P5'), Interval('M6'), Interval('m7')], 0)¶
- altereddorian = ([Interval('P1'), Interval('M2'), Interval('m3'), Interval('A4'), Interval('P5'), Interval('M6'), Interval('m7')], 0)¶
- chromatic = ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], 0)¶
- wholetone = ([0, 2, 4, 6, 8, 10], 0)¶
- diminished = ([0, 2, 3, 5, 6, 8, 9, 11], 0)¶
- diminishedwh = ([0, 2, 3, 5, 6, 8, 9, 11], 0)¶
- dominantdiminished = ([0, 1, 3, 4, 6, 7, 9, 10], 0)¶
- combdiminished = ([0, 1, 3, 4, 6, 7, 9, 10], 0)¶
- diminishedhw = ([0, 1, 3, 4, 6, 7, 9, 10], 0)¶
- pentatonic = ([Interval('P1'), Interval('M2'), Interval('M3'), Interval('P5'), Interval('M6')], 0)¶
- majorpentatonic = ([Interval('P1'), Interval('M2'), Interval('M3'), Interval('P5'), Interval('M6')], 0)¶
- minorpentatonic = ([Interval('P1'), Interval('m3'), Interval('P4'), Interval('P5'), Interval('m7')], 1)¶
- japaneseyo = ([Interval('P1'), Interval('M2'), Interval('P4'), Interval('P5'), Interval('m7')], 0)¶
- japaneseyodown = ([Interval('P1'), Interval('M2'), Interval('P4'), Interval('P5'), Interval('M6')], 0)¶
- japanesein = ([Interval('P1'), Interval('m2'), Interval('P4'), Interval('P5'), Interval('m7')], 1)¶
- japaneseindown = ([Interval('P1'), Interval('m2'), Interval('P4'), Interval('P5'), Interval('m6')], 1)¶
- miyakobushi = ([Interval('P1'), Interval('m2'), Interval('P4'), Interval('P5'), Interval('m6')], 1)¶
- minoryonanuki = ([Interval('P1'), Interval('M2'), Interval('m3'), Interval('P5'), Interval('m6')], 1)¶
- ryukyu = ([Interval('P1'), Interval('M3'), Interval('P4'), Interval('P5'), Interval('M7')], 0)¶
- blues = ([Interval('P1'), Interval('m3'), Interval('P4'), Interval('d5'), Interval('P5'), Interval('m7')], 1)¶
- doubleharmonic = ([Interval('P1'), Interval('m2'), Interval('M3'), Interval('P4'), Interval('P5'), Interval('m6'), Interval('M7')], 1)¶
- gypsyminor = ([Interval('P1'), Interval('M2'), Interval('m3'), Interval('A4'), Interval('P5'), Interval('m6'), Interval('M7')], 1)¶
- hungarianminor = ([Interval('P1'), Interval('M2'), Interval('m3'), Interval('A4'), Interval('P5'), Interval('m6'), Interval('M7')], 1)¶
- hungariangypsy = ([Interval('P1'), Interval('M2'), Interval('m3'), Interval('A4'), Interval('P5'), Interval('m6'), Interval('m7')], 1)¶
- neapolitanmajor = ([Interval('P1'), Interval('m2'), Interval('m3'), Interval('P4'), Interval('P5'), Interval('M6'), Interval('M7')], 1)¶
- neapolitanminor = ([Interval('P1'), Interval('m2'), Interval('m3'), Interval('P4'), Interval('P5'), Interval('m6'), Interval('M7')], 1)¶
- majorlocrian = ([Interval('P1'), Interval('M2'), Interval('M3'), Interval('P4'), Interval('d5'), Interval('m6'), Interval('m7')], 0)¶
- DEG(n) int¶
整数nに対して、絶対値を1減らした整数を返します。nが0なら例外を送出します。 この関数は、ダイアトニックスケールおけるトーン番号の差を音度で表すのに 有効です。
Examples
>>> s = Scale(C4, 'major') >>> s[DEG(3)] E4 >>> s[s.tonenum(D4) + DEG(6)] B4