D Major Scaleの構成音はD, E, F#, G, A, B, C#
。
成果物
Python.MusicTheory.JustIntonation.Scale.201709241330
前回まで
- ClassPropertyを他のclassのclassmethodから参照するとプロパティとして見てくれない
- メタクラスを継承してsetattrによる再代入禁止とsys.modulesへのクラスインスタンス代入を共通化した
- readonlyな定数を音度、変化記号、ピッチクラスに実装した
- 音程から半音数を取得する
- Python音楽理論ライブラリの細かい点を修正した
- 音名から半音数(ピッチクラス)を取得する
- ピッチクラスとオクターブからMIDIノート番号を取得する
- MIDIノート名からMIDIノート番号を取得する
- 変化記号を各国の表記で取得する
- 音名を各国の表記で取得する
- 絶対オクターブ値(国際式,YAMAHA式)から相対オクターブ値(0〜10)を取得する
- 基音を設定、取得するクラスを作った
- 12平均律で周波数を取得する
- ピタゴラス音律で周波数を取得する
- 12平均律の基音クラスを弱参照するよう修正した
- 純正律で周波数を算出する
- 音階と音度からピッチクラスを取得する
- ScaleKeyクラスを作った
- ScaleKeyクラスをScaleの内部クラスとして作り変えた
- 音階と音度から音名を取得する
今回
Scaleクラス修正に伴い純正律クラスの修正をした。
JustIntonation.py
にてScale.Key
でなくScale.Key.PitchClass
を参照するようにした。
以下のテストでScale, ScaleKeyクラスの循環参照に気づいたため弱参照にして解決した。
./src/TestJustIntonation.py
====================================================================== FAIL: test_init_set (__main__.TestJustIntonation) ---------------------------------------------------------------------- Traceback (most recent call last): File "TestJustIntonation.py", line 55, in test_init_set print(j.Scale) AssertionError: ReferenceError not raised
./src/MusicTheory/scale/ScaleKey.py
self.__scale = weakref.proxy(scale)
#self.__scale = scale
テストコード | 項目数 |
---|---|
TestJustIntonation.py | 7 |
TestScale.py, TestScaleKey.py | 14 |
テスト計165項目。
所感
ほかにも不備があるかもしれない。少し見直してみよう。