波形合成 JavaScript の説明 |
このプログラムは,音の倍音成分の含まれ方による音色の違いを試す実験を行うものです. 基本の周波数の正弦波(基音)に,その 2 倍,3 倍,4 倍,… の各周波数の正弦波を倍音として加えて波形を合成し,それを音にして聴いてみます. 任意の波形を合成できるようにするためには,無限に高い周波数まで倍音を加えられるようにする必要がありますが,音を発生させるときのサンプリング周波数によって,表せる音の周波数の上限は決まってしまいます.このプログラムでは 44.1 KHz のサンプリング周波数を使いますので,ナイキスト周波数 22.05 KHz 未満の周波数しか表すことができません.そのため,加える倍音もその周波数範囲のものに限定されます. 基音の周波数は 300 Hz と 900 Hz が選べます.したがって使用できる倍音は,300 Hz のときは 73 次倍音の 21900 Hz まで,900 Hz のときは 24 次倍音の 21600 Hz までとなります. 次の式に従って波形を生成します. sin t + a2・sin(2t+α2) + a3・sin(3t+α3) + … + aN・sin(Nt+αN)t が時間(を周波数に応じた角度に変換したもの)を表します.先頭の sin t が基音の正弦波で,an・sin(nt+αn) が n次倍音の正弦波です.振幅 an で加える倍音の割合を,角度 αn で基音に対する倍音の位相差を指定します. 数学的には,これはフーリエ級数に対応します.音色を較べるという目的に特化してフーリエ級数の式を変形・簡略化すると,上式が得られます. 使い方としては,「周波数」で基音の周波数を選択し,パラメータ an,αn を入力して「波形生成」をクリックすると,波形を生成して表示します. an,αn に入力可能な値は以下のとおりです.値がゼロの項目は未入力でも構いません. 0 ≦ an < 1αn は度で入力します.基音の位相に対する位相差をプラスまたはマイナスの数値で指定します. 「音発生」をクリックすると,現在表示している波形の音を発生します. 音を発生している間は「音発生」ボタンの表示が「音停止」に変わります.音を止めるときは「音停止」をクリックします. 典型的な波形である矩形波,三角波,鋸歯状波を生成するためのパラメータを自動で作成することができます. 「矩形波」,「三角波」,「鋸歯状波」をクリックすると,該当波形のパラメータを入力領域にセットします.(波形を生成するには,その後「波形生成」をクリックしてください.) 完全な矩形波,三角波,鋸歯状波を生成するためには無限に高い周波数の倍音まで加える必要がありますが,実際に加えるのは有限個の倍音ですので,生成される波形は各波形の近似になります. 「クリア」をクリックすると,パラメータの入力領域をすべて未入力状態に戻します. 入力したパラメータをファイルに保存しておいて,後でそれを読み込んで復元することができます. 「保存」をクリックすると,パラメータの入力値をファイルに保存します. 「読込」をクリックすると,パラメータの値をファイルから読み込んで入力領域にセットします. |