🔊
音が出るとはどういうことなのか
これまで
圧電スピーカーを繋いで tone() を使ったらすぐ音が出てしまった
正直なところ何の達成感もなかったので、より物理的な方法で、音が出る仕組みと発振するとはどういうことなのかを学びたい
単に 1 を出力してみる
void setup() {
pinMode(9, OUTPUT);
}
void loop() {
digitalWrite(9, HIGH);
}
これで起動時にノイズが一瞬聞こえる
スピーカー内の薄い鉄板の面が一方向に反ったときのノイズと思われる
一方向に反ったあと同じ方向には反れないので HIGH を出力し続けてもノイズはでない
もし逆方向に反らせれば再びノイズがでるんだろうか?
1 と 0 を交互に出力してみる
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(1000);
繰り返しノイズを出し続けることに成功
1秒毎に聞こえるようになった
シンセサイザーなどに内蔵されているクリック音としてそのまま使えそう
ここで間隔を縮めてみるとどうなるだろう?
短い間隔で 1 と 0 を交互に出力してみる
digitalWrite(9, HIGH);
delay(1);
digitalWrite(9, LOW);
delay(1);
1ms 毎に繰り返すとノイズから音色になった
言葉で書くと「ブー」に近い
もっと短くするとどうなるだろう?
もっと短い間隔で 1 と 0 を交互に出力してみる
digitalWrite(9, HIGH);
delayMicroseconds(500);
digitalWrite(9, LOW);
delayMicroseconds(500);
「ブー」が「ピー」になった
ここまでくると元がノイズの連続だったとは想像つかない
まとめ
- 1 にするだけでノイズは出る
- 再びノイズを出すには 0 にする
- 発振とはその 1 と 0 を交互に出力し続けるだけの話だった
- 圧電スピーカーは下敷きみたいなもの
- ぺっこんぺっこんをゆっくり行うとそれは定期的に繰り返されるノイズでしかない
- が、超高速で繰り返すと人間は音色として認識するようになる
- 1 0 の間隔で音程が変わる
Discussion