いらないモノ、ひつようなモノ

書籍、音楽、そして若干のテクノロジー

Tips

←csoundメモ 目次に戻る

MIDIノートからHzへの変換

マニュアルのnotenumのところに例があります。mid2scoを使った後の処理に困って.

iHz     = (440.0*exp(log(2.0)*((iNum)-69.0)/12.0))   (1)

そうか、1オクターブ上は周波数が倍で、1オクターブ上まで12個の半音があるから2の12乗根を基準音に半音差回だけ掛ければ目的のノートの周波数ということで、ラの音を基準にしたら,,これでもOKの「ようだ」

iHz     = 440.0* powoftwo((iNum-69.0)/12.0)          (2)

というのも、下記のような楽器を作って

instr 1 
 iNote = p4
 iHz1  = 440.0*powoftwo((iNote-69.0)/12.0)
 iHz2  = (440.0*exp(log(2.0)*((iNote-69.0)/12.0)))
 print p4
 print iHz1
 print iHz2
endin
i1 0 0.1  0 
i. +   .  1
i. +   .  2
  (あとは略します)

という力づくなスコアを流すと*1下記のように結果がビミョーに異なる。cpspchで値を確認した値とも異なる。気持ちワリー。

instr 1:  p4 = 67.000                   <- cpspch(8.07)=391.973
instr 1:  iHz1 = 391.973
instr 1:  iHz2 = 391.995

instr 1:  p4 = 68.000                   <- cpspch(8.08)=415.293
instr 1:  iHz1 = 415.328
instr 1:  iHz2 = 415.305

instr 1:  p4 = 69.000                   <- cpspch(8.09)=439.963
instr 1:  iHz1 = 440.000
instr 1:  iHz2 = 440.000

*1:こんなときpythonから叩ければ、、やっぱり必要??