半分くらい低すぎて聞こえない。そういうものなのか、コードの間違いか、老化か。
成果物
Python.Audio.ToneFrequency.201708111015
今回
ポイントはC
,D+
などの音名と+
,-
の変化記号に加え、-1
〜9
までの整数値をpitchとしてオクターブを指定できるようにした。これらを元に周波数を算出する。
たとえばtone=C+
, pitch=3
とするとC#3
の周波数138.591315
を返す。
表現形式
現状、じつはtone=C++++
, pitch=3
のように書けてしまう。E3
の音になる。
複数の変化記号は今の所実装しておきたい。以下の理由で。
- 音楽記号にも半音2つ分上下する記号もある
- 19,24,31,53平均律など将来の拡張で複数の変化記号を頻繁に使うことがあるかもしれない
じつはtoneとpitchをひとつの文字列にして表現できない。例えば両方つなげてC--1
としたとき、以下のどちらであるか判断できない。
- tone=
C-
, pitch=-1
- tone=
C--
, pitch=1
なので、Python関数の第一引数、第二引数という2つの変数で扱う必要がある。
+
,-
でなく#
,b
にすれば解決するかもしれないが、b
は大文字にするとB
になる。B
は音名シ
に該当する。紛らわしいし、間違って一括小文字置換などの処理をしてしまうと別の意味になってしまう。不要なリスクは避けたい。
ほかの表現形式
まだまだ表現形式がたくさんある。
音楽理論の前に、名付けの時点で多様すぎ。混乱の元。
11オクターブの12音
オクターブ | player |
---|---|
-1 | |
0 | |
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 |
MIDIではC-1
をノート番号0
と数えるらしい。G9
が最大値127
となる。今回はそれ以上のB9
まで鳴らした。
問題
B9以上の音を鳴らそうとするとエラーになる。
参考
所感
音が低い気がするのだが、合っているのか?周波数は合っていると思うが……。