pytakt.pitch module

このモジュールには、Pitchクラス, Intervalクラス、Keyクラス、 及びノート番号についてのユーティリティ関数が定義されています。

chroma(note_number) int

MIDIノート番号からクロマ値(ピッチクラスとも言い、Cを0, C#を1, Dを2, …, Bを11とした0〜11の整数)を計算して返します。

Parameters:

note_number (int or float) – MIDIノート番号。floatの場合はまずintに丸められてから計算されます。

octave(note_number) int

MIDIノート番号からオクターブ番号(中央ハから始まるオクターブを4とした整数) を計算して返します。

Parameters:

note_number (int or float) – MIDIノート番号。floatの場合はまずintに丸められてから計算されます。

chroma_profile(pitches) List[int]

pitches で与えられたピッチの列もしくはスコアに対して、クロマ値 (ピッチクラス) ごとに出現頻度を計上した12要素のリストを返します。

Parameters:

pitches (iterable of Pitch or int, or Score) – Pitch オブジェクトまたはMIDIノート番号を表す整数のイテラブル、 もしくはスコアオブジェクト。

Examples

>>> chroma_profile([C4, Bb5])
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
>>> chroma_profile(readsmf('menuet.mid'))
[20, 5, 33, 0, 14, 0, 19, 48, 0, 30, 0, 35]
class Pitch(value, sf=None, key=0, octave=4, cents=None)

Bases: int

音高を表すオブジェクトのクラスです。intクラスを継承していて、 MIDIノート番号を表す整数と同じように振る舞うことができます。 ただし、sf属性という異名同音に関する付加情報を持つ点において、 intクラスとは異なります。

インスタンスの属性

sf

異名同音に関する情報 (sharp-flat)で、楽譜上での調号による ものを含めたシャープ/フラットの数を表します。2, -1, 0, 1, 2 の いずれかで、正ならばシャープの数、負ならばその絶対値が フラットの数を表します。例えば、オブジェクトが整数値として61を 持つ場合(つまり、MIDIノート番号が61の場合)、sfが1であれば C#4音を表し、sfが-1であればDb4音を表します。

Type:

int

cents

平均律を仮定したときのピッチと実際のピッチとの ずれ (実際のピッチから平均律のピッチを引いたもの)をセント (半音の1/100)単位で表します。

Type:

int or float

コンストラクタ引数

Parameters:
  • value (int, float, str, or Pitch) –

    整数、浮動小数点数、Pitch オブジェクト、もしくは音高を表す文字列。整数ならその値、 Pitchならその整数値がMIDIノート番号となります。 浮動小数点数は実数のMIDIノート番号とみなされ、それを丸めたものが MIDIノート番号となり、元の値とそれとの差がcents属性の設定に使われ ます。この他、以下の文字から構成された文字列によっても音高を指定 できます。

    • 音名を表す ‘A’ から ‘G’ (小文字でも可。 ‘B’ は ‘C’ の長七度上を表す)

    • シャープを表す ‘#’, ‘s’, または ‘+’ (高々2個。音名の後に置く)

    • フラットを表す ‘b’, ‘f’, または ‘-’ (高々2個。音名の後に置く)

    • ナチュラルを表す ‘%’ または ‘n’ (音名の後に置く)

    • オクターブ番号を表す ‘0’ から ‘9’ (省略可。音名の後に置く。 ‘4’ が中央ハから始まるオクターブを表す)

    • オクターブアップを表す ‘^’ またはシングルクオート

    • オクターブダウンを表す ‘_’ または ‘,’

    文字列をノート番号に変換する際には、key 引数の値が考慮されます。

  • sf (int, optional) –

    sf属性の値。指定された場合には、その値がsf属性値に なります。指定されなかった場合は以下のルールにより定められます。

    • value がPitchの場合、そのsf情報がコピーされる。

    • value がintの場合、key 引数の値を考慮して推測される。

    • value がstrの場合、文字列に含まれる臨時記号、および key 引数の値から決定される。

  • key (Key, int, or str, optional) – value がintまたはstrである ときに参照される調の情報。Keyクラスのオブジェクト、もしくは Key()コンストラクタの第1引数。defaultはハ長調。

  • octave (int, optional) – value がstrで、かつ文字列内にオクターブ 番号が含まれていないときのオクターブ値。

  • cents (int or float, optional) – cents属性の値を指定します。 value 引数が浮動小数点数のとき、この引数は使用できません。 この引数を省略したときのcents属性の値は、value がPitchならその centsの値、それ以外なら0となります。

Examples

>>> Pitch(61)   # MIDIノート番号=61
Cs4             # Pitch(61, 1) と同等
>>> Pitch(61, -1)
Db4
>>> Pitch(61, key='Db major')
Db4
>>> Pitch(C4, 1)
Bs3
>>> Pitch('C#4')
Cs4
>>> Pitch('_C', key='e major')
Cs3
>>> Pitch('Cn', key=3, octave=5)
C5
>>> Db4 + 2
63

ピッチ定数

Pitchオブジェクトを値とする定数として、’C0’ から ‘B9’ まで、 及びその各々に対して s(シャープ)、ss(ダブルシャープ)、b(フラット)、 bb(ダブルフラット)を伴ったもの (例: Ds5, Bbb6) が予め定義されています。 これらの値は、その定数名を文字列として Pitch() コンストラクタに 渡したものに等しいです。

演算規則

  • Pitch型どうしの比較 (等値比較、大小比較) はノート番号だけで行われ、 sf属性やcents属性の値は比較の結果に影響しません。例えば、 Cs4 == Db4 は True になります。

  • Pitch - Pitch の結果は Interval型になります。

  • Pitch + Interval, Interval + Pitch, Pitch - Interval の結果は Pitch 型 となり、sf は +-2 の範囲内である限り正しく計算されます。

  • それ以外の演算は int 型としての演算となります。


natural() Pitch

幹音(シャープ、フラットのない音)の Pitchオブジェクトを返します。

tostr(*, lossless=False, octave=True, pitch_strings='CDEFGAB', sfn='sbn') str

音高を表す文字列(‘C4’, ‘Gbb6’ など)に変換します。

Parameters:
  • lossless (bool) – デフォルト(False)では、常に pitch_stringssfn を使った文字列を返します。 Trueのときは、eval関数を適用したときに 元のPitchオブジェクトへ正確に戻るよう、必要に応じて ‘Pitch(Cs4, 0)’ のようなコンストラクタを呼ぶ形式の文字列へ 変換します。

  • octave (bool, optional) – Falseにすると、オクターブ番号を含めない 文字列を返します。losslessがFalseのときだけ有効です。

  • pitch_strings (sequence of str) – 音名に使用される 0から6までインデックス可能な文字列の集まりで、 pitch_strings[0], …, pitch_strings[6]は、それぞれ、 C音, …, B音に対する文字列に相当します。

  • sfn (sequence of str) – 臨時記号に使用される 0から2(または1)までインデックス可能な文字列の集まりです。 sfn[0]はシャープに対する文字列、sfn[1]はフラットに対する 文字列で、sfn[2]は現在のところ使用されていません。

Returns:

結果文字列

fixsf(key, set_sf_for_naturals=False, enh='heuristic') Pitch

sf属性の値を調`key` にふさわしいように修正した新しいPitch オブジェクトを返します。 元のsfの値は、それが0以外の整数だった場合、ヒントとして働きます。

Parameters:
  • key (Key, int, or str) – 調 (Keyクラスのオブジェクト、もしくは Key()コンストラクタの第1引数)

  • set_sf_for_naturals (bool) – Trueにすると、楽譜にしたときに ナチュラルになる場合(例えば Db major key での D)に対して、 sfを 1または-1 (調号と反対) にセットします。

  • enh (str) – undocumented

Returns:

新しいPitchオブジェクト

Examples

>>> Dbb4.fixsf('C major')
C4
>>> Ds4.fixsf('Eb major')
Eb4
>>> Pitch(Fs4, 0).fixsf('C major')
Fs4
>>> Pitch(D4, -1).fixsf('Db major')  # -1 はヒント
Ebb4
tofloat() float

cents属性を考慮した浮動小数点のMIDIノート番号を返します。

freq(afreq=440.0) float

平均律を仮定したときの周波数を返します。

Parameters:
  • self (Pitch, int, or float) – Pitchオブジェクトまたは(実数の)MIDIノート番号

  • afreq (float, optional) – A4音の周波数(Hz)を指定します。

static from_freq(freq, sf=None, key=0, afreq=440.0, fractional=False, microtone=True) Union[Pitch, float]

平均律を仮定したときの周波数から、Pitchオブジェクトを構築します。 MIDIノート番号は指定した周波数に最も近くなるように選ばれます。

Parameters:
  • freq (float) – 周波数

  • sf (int, optional) – Pitchコンストラクタのsf引数と同じ意味を持ちます。

  • key (Key, int, or str, optional) – Pitchコンストラクタのkey引数と同じ意味を持ちます。

  • afreq (float, optional) – A4音の周波数(Hz)を指定します。

  • fractional (bool, optional) – Trueの場合、Pitchオブジェクトのかわりに、浮動小数点のMIDI ノート番号を返します。

  • microtone (bool, optional) – Trueの場合、周波数に基づいてPitchオブジェクトのcents属性を 設定します。Falseの場合、cents属性は常に0になります。

class Interval(value, ds=None, cents=0)

Bases: int

音程(2つの音高の差)を表すオブジェクトのクラスです。intクラスを継承して いて、半音数を表す整数と同じように使用することができます。符号つきであり、 負の音程も表現します。

インスタンスの属性

ds

五線譜上での符号付き距離 (signed distance on the staff)。 これは、度数より1少ない数で、例えば、”~3度” という音程では すべて2になります。負の音程では負になります。

Type:

int

cents

平均律を仮定したときの音程と実際の音程との ずれ (実際の音程から平均律の音程を引いたもの)をセント (半音の1/100)単位で表します。

Type:

int or float

コンストラクタ引数

Parameters:
  • value (str or int) –

    str型の場合、下のような文字列で音程を指定します。

    • ’P1’ – 完全1度, ‘m2’ – 短2度, ‘M2’ – 長2度, ‘m3’ – 短3度, ‘M3’ – 長3度, ‘P4’ – 完全4度, ‘P5’ – 完全5度, …

    • ’A1’ – 増1度, ‘A2’ – 増2度, ‘A3’ – 増3度, ‘A4’ – 増4度, …

    • ’d2’ – 減2度, ‘d3’ – 減3度, …

    • ’AA1’ – 重増1度, ‘AA2’ – 重増2度, …

    • ’dd3’ – 重減3度, ‘dd4’ – 重減4度, …

    • ’A’ や ‘d’ は更に増やすこともできます。

    • 負の音程は ‘-P5’ のように表します。

    int型のときは、半音数で音程を指定します。

  • ds (int, optional) – value がint型のときは、この引数によって ds属性の値を指定する必要があります。

  • cents (int or float, optional) – cents属性の値を指定します。

演算規則

  • Interval型どうしの比較 (等値比較、大小比較) は半音数だけで行われ、 ds属性やcents属性の値は比較の結果に影響しません。例えば、 Interval(‘A4’) == Interval(‘d5’) は True になります。

  • Interval 型の符号反転は、半音数、ds値, cents値をすべて符号反転させます。

  • Interval 型どうしの加算の結果は Interval 型になり、2つの音程を積み 重ねた音程 (半音数、ds値, cents値をそれぞれ加えたもの) になります。

  • Interval 型どうしの減算(x-y)の結果は Interval 型になり、x+(-y)と 等価です。

  • Interval 型と整数との乗算の結果は Interval 型になり、 半音数、ds値、cents値それぞれを整数倍したものになります。

  • Interval 型どうしの剰余演算(x % y)の結果は Interval型になり、これは x - (int(x) // int(y)) * y と等価です。

  • Interval 型と Pitch 型の間の演算については、Pitch クラスの演算規則 を見てください。

  • それ以外の演算は int 型としての演算となります。

Examples

>>> B4 - F4
Interval('A4')
>>> C4 + Interval('d5')
Gb4
>> Interval('A4') + Interval('d5')
Interval('P8')
>> Interval('P8') - Interval('M3')
Interval('m6')
>>> G5 - C4
Interval('P12')
>>> Interval('P12') % Interval('P8')
Interval('P5')
>>> int(Interval('A4'))
6
>>> Interval('A4') + 1
7

tostr() str

音程を表す文字列(‘P5’, ‘A4’, ‘dd3’ など)に変換します。

tofloat() float

cents属性を考慮した浮動小数点の半音数を返します。

class Key(keydesc, minor=0, extended=False)

Bases: object

調を表すオブジェクトのクラスです。

インスタンスの属性

signs

絶対値は調号に含まれる記号の数(通常0〜7、拡張時11まで)を 表し、符号はシャープ(正)かフラット(負)を表します。

Type:

int

minor

長調のとき0、短調のとき1

Type:

int

コンストラクタ引数

Parameters:
  • keydesc (int, str, or Key) –

    int型ならば、signs属性の値を指定します。 str型の場合、下の正規表現にマッチした文字列によって調を指定します。 大文字/小文字は区別されません。

    [A-G][#bsf]?[- ]*(major|minor)

    Key型の場合は、コピーコンストラクタとして働きます。

  • minor (int, optional) – keydesc がint型のとき、minor属性の値を指定します。 keydesc がそれ以外の型のときは無視されます。

  • extended (bool, optional) – Trueなら’G# major’など一般的に使用されない調も許容します。

Examples

Key('C major')  Key('Eb-minor')  Key(-3)  Key(3,1)


tostr() str

調を表す文字列(‘C major’など)に変換します。

getsf(note_number) int

ノート番号が与えられたとき、その音に対して調号によって付く sharp/flatの数を返します。

Parameters:

note_number (int) – MIDIノート番号

Returns:

正ならばsharpの数、負ならばその絶対値がflatの数を意味する整数。

Examples

>>> Key('G-major').getsf(F4)
1
>>> Key('G-major').getsf(Fs4)
0
is_scale_tone(note_number) bool

ノート番号が与えられたとき、調の基準となっている音階(長調の場合は 長音階、短調の場合は自然短音階)に含まれる音かどうかを調べます。

Parameters:

note_number (int) – MIDIノート番号

Returns:

音階上の音ならTrue、そうでなければFalse。

gettonic(octave=4) Pitch

調の主音を返します。

Parameters:

octave (int) – 返される主音のオクターブ番号

static from_tonic(tonic, minor=0, extended=False) Key

主音を与えて、Keyオブジェクトを生成します。

Parameters:
  • tonic (Pitch or int) – 主音の音高

  • minor (int, optional) – 長調のとき0、短調のとき1

  • extended (bool, optional) – Trueなら一般的に使用されない調も許容します。