MIDIセントは、ピアノの中央のドを6000とし、音の高さをセント単位で表したものである。MIDIノート番号に100をかけた数と考えることもできる。これは、MIDIのノート番号を拡張した考え方で、微分音についても整数で表現できるようにOpenMusicなどで使用されている。
やっていることは単純で、次のようなMIDIセント(n)と周波数(f)の関係式を利用しているだけである。(基準ピッチは必要に応じて440から変化させる)
[ f = 440 \times 2 ^ \frac{n - 6900}{1200} ]
以下に、MIDIセントと周波数を相互に変換するプログラムを掲載した。
freq2midicent <- function(freq, concert.pitch=440) {
## Convert frequency (Hz) to MIDI cent value (MIDI note number times
## 100 for representing partial pitch).
midicent <- log2(freq / concert.pitch) * 1200 + 6900
return(midicent)
}
midicent2freq <- function(midicent, concert.pitch=440) {
## Convert MIDI cent value (MIDI note number times 100 for
## representing partial pitch) to frequency (Hz).
freq <- concert.pitch * 2^((midicent - 6900) / 1200)
return(freq)
}
たとえばMIDIセントから周波数に変換するときには
midicent2freq(6000)
## [1] 261.6256
のように、中央のCは261.6 Hzであることがわかる。ここで基準ピッチはデフォルトで440 Hzにしてあるが、基準ピッチを変えたいときには
midicent2freq(6000, concert.pitch=442)
## [1] 262.8148
などとする。
逆に、周波数からMIDIセントに変換するときには以下のようにする。
freq2midicent(1000, concert.pitch=442)
## [1] 8313.458