【2010.11.17】
音を出してみよう.(その一)
今回は音についてちょっと書いてみようと思います.
普段,街にありふれている音.
みなさんは音について考えたことがありますか.
音はいったいどのようなものからできていて,
僕たちになにをもたらしてくれるのか.
今回はそんな音について,特に音はどのようにして伝わるかについて
考えてみたいと思います.
さっそくですが,音とは何でできているのでしょうか.
高校の物理で習った方はご存知かと思いますが,音は波でできています.
音というのは大気などを振動させることによってはじめて僕たちの耳まで伝わるのです.
なお,この音(ある一点から発せられる音)を数学的に書くと次のようになります.
f:周波数[Hz]
t:時間[sec]
では,実際にこの式を入れてスピーカにて音を出してみましょう.
今回スピーカーとして利用するのはものづくり教室ではおなじみのこのオルゴールです.
ここで注意するべき点が一つだけあります.
それはアナログとデジタルの違いです.
本来,音は連続したアナログの値ですが,
オルゴールの出せる音はON(5V)かOFF(0V)という断続的な値を示すデジタルの値です.
詳細は後ほど書きますが,アナログをデジタルに変換すると
このグラフの波形が
このグラフの波形のようにに変換されます.
これはどのようなことかというと,例えば本来5Vの音しかだすことができないこのスピーカを使って2.5Vの音を出すことを考えましょう.
普通に考えれば5Vの音しかでないのに2.5Vの音をだすことなんて不可能ですよね.
しかし,ここで人間の耳の性質を利用することで2.5Vの音をだすことができるのです.
人間の耳は微小時間のうち半分を5Vの音,もう半分を0Vの音としてだすと,その平均をとって2.5Vの音と認識するのです.
この性質をうまく使うことで2.5Vの音を出してあげるのです.
(このあたりは後ほど詳しく書こうと考えています.)
さあ,あとは出力するだけですが,ここで大きな問題が1つがでてきました.
シミュレーションと実際の制御の違いです.
例えば,今回のプログラムは"ド"という音をだしたくても,周波数を完璧に制御しなくては正しい"ド"の音はでません.
簡単にいうと実時間制御をしなくてはいけないのです.
クロック数を入れてあげれば簡単に正しい音がでると思ったのですが,
これが意外にピンとくるパラメータが見つからないんですね.