差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| arduino:出力基礎:音を鳴らす [2019/06/17 22:38] – [音階で音を鳴らしてみる] baba | arduino:出力基礎:音を鳴らす [2019/06/17 23:36] (現在) – [音階で音を鳴らしてみる] baba | ||
|---|---|---|---|
| 行 128: | 行 128: | ||
| \] | \] | ||
| - | この場合は鳴らしたいノート番号を指定することでその周波数を計算することができますが、その逆である「鳴らしたい周波数が決まっている場合、それはピアノの鍵盤でいうところのどの位置になるのか?」を計算するには、この方程式をnについてとけば良いです。ただし基準となる440Hzのラはノート番号では69番としているので、nが69のときに440Hzになるように式を下記のようにしておきます。 | + | ただし基準となる440Hzのラはノート番号では69番としているので、nが69のときに440Hzになるように式を下記のようにしておきます。 |
| \[ | \[ | ||
| f = 440 \times 2^{\frac{n-69}{12}} | f = 440 \times 2^{\frac{n-69}{12}} | ||
| \] | \] | ||
| + | |||
| + | ではここまでの準備を利用して、有名なNokia Tuneを鳴らしてみましょう。下記サイトを参考にします。 | ||
| + | * https:// | ||
| + | |||
| + | <code .c nokiatune.pde> | ||
| + | float getFreq(int n) | ||
| + | { | ||
| + | | ||
| + | } | ||
| + | void setup() | ||
| + | { | ||
| + | pinMode(6, OUTPUT); | ||
| + | } | ||
| + | int interval = 250; | ||
| + | void loop() { | ||
| + | tone(6, getFreq(76), | ||
| + | delay(interval/ | ||
| + | tone(6, getFreq(74), | ||
| + | delay(interval/ | ||
| + | tone(6, getFreq(66), | ||
| + | delay(interval); | ||
| + | tone(6, getFreq(68), | ||
| + | delay(interval); | ||
| + | tone(6, | ||
| + | delay(interval/ | ||
| + | tone(6, getFreq(71), | ||
| + | delay(interval/ | ||
| + | tone(6, getFreq(62), | ||
| + | delay(interval); | ||
| + | tone(6, getFreq(64), | ||
| + | delay(interval); | ||
| + | tone(6, getFreq(71), | ||
| + | delay(interval/ | ||
| + | tone(6, getFreq(69), | ||
| + | delay(interval/ | ||
| + | tone(6, getFreq(61), | ||
| + | delay(interval); | ||
| + | tone(6, getFreq(64), | ||
| + | delay(interval); | ||
| + | tone(6, getFreq(69), | ||
| + | delay(interval*4); | ||
| + | delay(interval*4); | ||
| + | } | ||
| + | </ | ||
| + | ===== 余談 ===== | ||
| + | 鳴らしたいノート番号を指定することでその周波数を計算することができますが、その逆である「鳴らしたい周波数が決まっている場合、それはピアノの鍵盤でいうところのどの位置になるのか?」を計算するには、方程式をnについてとけば良いです。 | ||
| 上記式を両辺に自然対数とることで簡単にnについて解くことができます。みなさんも実際に計算して確かめてみましょう。 | 上記式を両辺に自然対数とることで簡単にnについて解くことができます。みなさんも実際に計算して確かめてみましょう。 | ||
| \[ | \[ | ||
| + | n = \frac{12 \times log_e(\frac{f}{440})}{log_e(2)} + 69 | ||
| \] | \] | ||
| - | |||