1kHzの正弦波を再生する

早速ですがやってみました。夜はいろいろと自由が利かないので昼休みに実験です。

fs=22050;                   // default sampling frequency of Scilab[Hz]
sec=fs;                     // unit of time
Hz=2*%pi/fs;                // unit of frequency

index=[1:3*sec];            // generate base index for 3 seconds
wave=sin(index*1000*Hz);    // generate 1kHz sine wave as 3 seconds
playsnd(wave);              // play by 22.05kHz sampling

正弦波を作って波形を再生するプログラムです。最初の3行はよく使う定数に名前をつけて、可読性をあげようという魂胆です。よく見かける方法なのですが、インタープリター言語の場合、言語機能として提供されているのか便利なブツを誰かが定義してくれたのかわからなくなりますから注意が必要です。
Scilabの場合、fs, sec, Hzといった定数をライブラリ的に保存しておくことが可能ですが、それを使うことを前提とすると、一挙に敷居が高くなります。あれです、その土地の仁義を知らないと商売できないような感じです。
ここで使っているsin()とplaysnd()はscilabの機能です。sin()は説明不要でしょう。playsnd()はデフォルトだと22.05kHzという何とも言いがたいサンプル周波数で再生してくれます。元になったMatlabを引きずっているのでしょう。なんとなくSoundblaster16とかいう名前を思い出して目頭が熱くなりそう。
Scilabのデータ型は倍精度浮動小数点数ですが、Windowsのオーディオシステムは整数を受け取ります。ちょっと実験したところ、振幅2の場合は明らかに歪んでいました。振幅1が最大振幅のようです。