pytakt.scale module

このモジュールには、スケール (音階) に関連するクラスとユーティリティ関数が 定義されています。

class Scale(tonic, type='major')

Bases: object

スケール (音階) を表すオブジェクトのクラスです。

インスタンスの属性

tonic

スケール開始音 (主音) のピッチ (オクターブも 意味を持ちます)

Type:

Pitch or int

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 in s は s.is_scale_tone(p) と等価です。


to_key() Key

同じ主音を持った、minor_like属性が0なら長調、1なら短調の Keyオブジェクトを返します。

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) – トーン番号

pitches(low=None, high=None) List[Pitch]

スケール上の音のピッチのリストを返します。

Parameters:
  • low (Pitch or int, optional) – この値以上のピッチのみを含めます。デフォルトでは、スケール 開始音になります。

  • high (Pitch or int, optional) – この値以下のピッチのみを含めます。デフォルトでは、スケール 構成音のうち最も高いものになります。

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() へ渡す丸めモード。

demo(noct=1, dir='up', **kwargs) Score

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

Parameters:
  • noct (int) – オクターブ数

  • dir (str) – ‘up’ (上行)、’down’ (下行)、 または ‘updown’ (上行のち下行)

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

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