Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rでドレミ/Do-Re-Mi_with_R

Avatar for florets1 florets1
September 28, 2026

 Rでドレミ/Do-Re-Mi_with_R

Avatar for florets1

florets1

September 28, 2026

More Decks by florets1

Other Decks in Programming

Transcript

  1. 周波数2倍=1オクターブ上 ×2, ×3, ×4, ×5 , ×6, ×7,… ×1, ×2,

    ×3, ×4, ×5, ×6, ×7,… 人間は、周波数が2倍になった音を 1オクターブ上の同じ名前の音 として扱っています 周波数2倍の音は、もとの音に最初から含まれている倍音の一つです それらを特別に近い関係の音と感じているのです 7
  2. コードの説明 ^はべき乗 baseは1.5、exponentは0~20なので 1.5 ^ c(0, 1, 2, 3, …)

    が一度に計算され、結果は 1.000 1.500 2.250 3.375 … となります Rはfor文を書かなくてもベクトルに対してまとめて 計算することができます 13
  3. コードの説明 やっていること:2倍を超えたら2で割って、1~2の範囲に戻します 例えば freq = 5.0625 log(freq, 2) は「2を何乗するとfreqになるか」 2^2

    < 5.0625 < 2^3 なのでlog(freq, 2)は2と3の間 trunc()で小数部分を切り捨てて結果は 2 したがって normal_freq = 5.0625 / (2^2) 結果は1.265625となり、1~2の範囲に収まります つまり、何回オクターブを下げればよいかを調べて、その分で割っています 14
  4. 「正規化」について 2倍を超えたら2で割って、1~2の範囲に戻す この操作のことを、今回の発表では「正規化」と呼ぶことにします 例えばもとの周波数を1とすると 1, 2, 4, 8, … これらはすべてオクターブ違いの同じ名前の音と考え

    1→1, 2→1, 4→1, 8→1 のようにして、オクターブ違いを取り除き、すべて1~2の範囲に収めます 正規化によって、音の高さそのものではなく 1オクターブの中のどの位置にいるのか だけを比較できるようにするのです 15