arduino:出力基礎:音を鳴らす

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

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