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 型としての演算となります。
- tostr(*, lossless=False, octave=True, pitch_strings='CDEFGAB', sfn='sbn') str¶
音高を表す文字列(‘C4’, ‘Gbb6’ など)に変換します。
- Parameters:
lossless (bool) – デフォルト(False)では、常に pitch_strings と sfn を使った文字列を返します。 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。