やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

音名と変化記号から音高(pitch)を算出できるようにした

たとえばC=0, B=11, C+=1, C-=11(pitch-1), B3+=0(pitch+1)。

成果物

GitHubPython.Audio.Scale.201708102021

概要

音名C,D,E,F,G,A,Bと変化記号+,-(♯,♭)の文字列にて音高を算出できるようにした。

実装概要

  • 幹音の表記名をC,D,E,F,G,A,Bと定義した
  • 変化記号,の表記名を-,+と定義した
  • 変化記号-,+の変化量を-1,+1と定義した
  • 12平均律における12音の絶対値を0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11と定義した(C,C+,D,D+,E,F,F+,G,G+,A,A+,B)
  • 幹音と変化記号の表記名を、12音の絶対値と音高(pitch)に変換する C+=1(pitch=4), C-=11(pitch=3)

課題

  • 12音の絶対値から複数の音名表記を導き出したい(1=C#,Db, 3=D#,Eb, 6=F#,Gb等)
  • 12音の絶対値と音高(pitch)から周波数を算出したい
  • 音名表記を各国ローカル表記にしたい(CDEFGAB=ハニホヘトイロ,ドレミファソラシ等)
  • 各国ローカル表記から12音の絶対値に変換したい

所感

基本となる表現の実装が少しできた。

わずかな実装だが、事前に音楽の基礎学習が必要だったのが最も苦労した。

じつは実装以前に音楽理論における音の表現がむずかしい。同じ意味でも表現が違ったり、同じ表記なのに文脈によって意味が変わったりする。また、表現形式は、音名(各国ごとに固有)、ディグリーネーム、楽譜記号、MIDIMMLなど複数ある。音楽理論の背後には物理、数学、生物などの学問が関わっている。

音楽理論では、音(周波数)同士の間隔やリズムの周期は相対的なもので示されている。しかし、実際には絶対値にせねばならない。絶対値を算出するまでの計算理論を把握するのに苦労している最中。

ついでに以下も覚えているうちに書き殴っておく。

音楽理論よりも原始的な物理側の話。コンピュータで音を生成するには、音色(波形)、音量(振幅)、音高(周波数)、音質(BitRate,標本化,1秒当りの周期数)、音量の幅(量子化)、チャンネル(1(モノラル),2(ステレオ)等)の各項目を算出せねばならない。

音色として波形を生成する。 音高はラ(A4)の音440Hzを基準とし、十二平均律によって他の音の絶対値を算出する。音楽理論に合わせるため、CDEFGABや+-などの記法に対応させ、音名と変化記号と音高により音を指定できるようにした。

さらに音楽理論はもっと多様な表現がある。実装できていない分は課題。