音階と音度からピッチクラスを取得する
CMajorScaleの1度はC音である。
成果物
Python.MusicTheory.Scale.PitchClasses.201709230801
前回まで
- ClassPropertyを他のclassのclassmethodから参照するとプロパティとして見てくれない
- メタクラスを継承してsetattrによる再代入禁止とsys.modulesへのクラスインスタンス代入を共通化した
- readonlyな定数を音度、変化記号、ピッチクラスに実装した
- 音程から半音数を取得する
- Python音楽理論ライブラリの細かい点を修正した
- 音名から半音数(ピッチクラス)を取得する
- ピッチクラスとオクターブからMIDIノート番号を取得する
- MIDIノート名からMIDIノート番号を取得する
- 変化記号を各国の表記で取得する
- 音名を各国の表記で取得する
- 絶対オクターブ値(国際式,YAMAHA式)から相対オクターブ値(0〜10)を取得する
- 基音を設定、取得するクラスを作った
- 12平均律で周波数を取得する
- ピタゴラス音律で周波数を取得する
- 12平均律の基音クラスを弱参照するよう修正した
- 純正律で周波数を算出する
今回
音階における構成音の周波数を取得するための礎。
たとえばAm(Aマイナースケール。イ短調)は以下のように指定し、PitchClasses
プロパティで構成音のピッチクラスを得る。
s = Scale(9, ScaleIntervals.Minor) self.assertEqual(9, s.Key) self.assertEqual(ScaleIntervals.Minor, s.Intervals) self.assertEqual([(9,0),(11,0),(0,1),(2,1),(4,1),(5,1),(7,1)], s.PitchClasses)
戻り値は(ピッチクラス, 相対オクターブ)
である。
テストコード | 項目数 |
---|---|
TestScale.py | 9 |
テスト計160項目。
所感
ピッチクラスと絶対オクターブが決まれば、周波数が算出できる。今回、相対オクターブを付与したおかげで、どの音からオクターブ上げる必要があるか算出する必要がなくなる。後々楽になるはず。
ピッチクラスなら問題なく一意に特定できる。しかし、音名は違う。C#
かDb
のどちらにすべきかの処理が面倒。次回、やってみる。