平均律の周波数計算ツール
音階と周波数の対応表のJavaScriptのコードをHaskellに移植してみました。基準周波数は、A=440Hzです。
module Main (main) where import Control.Monad (zipWithM_) import System (getArgs) import Text.Printf (printf) notes :: [String] notes = cycle ["C", "C#/Db", "D", "D#/Eb", "E", "F", "F#/Gb", "G", "G#/Ab", "A", "A#/Bb", "B"] freqs :: Integer -> [Double] freqs octave = map f [0 .. 12] where f i = let note = fromInteger $ i + (octave + 2) * 12 in 440 * (2.0 ** ((note - 69.0) / 12)) main :: IO () main = zipWithM_ (printf "%s\t=> %0.2f [Hz]\n") notes . freqs . read . head =<< getArgs -- => コマンドライン引数で3を与えた場合 -- C => 261.63 [Hz] -- C#/Db => 277.18 [Hz] -- D => 293.66 [Hz] -- D#/Eb => 311.13 [Hz] -- E => 329.63 [Hz] -- F => 349.23 [Hz] -- F#/Gb => 369.99 [Hz] -- G => 392.00 [Hz] -- G#/Ab => 415.30 [Hz] -- A => 440.00 [Hz] -- A#/Bb => 466.16 [Hz] -- B => 493.88 [Hz] -- C => 523.25 [Hz]
参照: 平均律 - Wikipedia