純音と複合音

ページトップへ 一つ上へ

ポイント


sin cos



今回は前回よりももうちょっと、具体的な音についてやっていきます。
まずは、サンプリング周波数が22050Hzで周波数が1000Hzの
純音を作ってみましょう。

function sintest

%
% 純音の作成
% サンプリング周波数:22050Hz
% 1秒間、1000Hz
%
%


fs=22050;         % サンプリング周波数の設定
t=[0:1/fs:1];     % 時間の設定
f=1000;           % 周波数の設定


y=sin(2*pi*f*t);  % サインの計算


soundsc(y,fs);    % 音を出す


plot(t,y);        % 図をプロットする


さて、実行したら、音が鳴って、下のような波形が出てきましたか?



うーん、一応図は出てきましたが、とても波形とは呼べませんね。
これは、1秒間に1000回アップダウンを繰り返す波形なので、
細かすぎて波形が見えないのです。

そこで、下のように波形を書き換えて下さい。
変更箇所は青字です。

function sintest

%
% 純音の作成
% サンプリング周波数:22050Hz
% 1秒間、1000Hz
%
%

fs=22050;
t=[0:1/fs:1];
f=1000;

y=sin(2*pi*f*t);

soundsc(y,fs);

plot(t,y);
axis([0 0.01 -1 1]);  % 図の描画範囲の指定


さて、上書き保存した後に、もう一回実行してみて下さい。
下のように波形が表示されます。



拡大表示がされましたね。これで、よく見えます。
axis([0 0.01 -1 1]);というのは、x軸を0から0.01、Y軸を−1から1までの区間で
図を表示しなさいという命令です。
とっても簡単に出来るという事で、筆者もよく使ったりします。

さてさて、これで一般的なSINの計算方法と、図の書き方、音の出し方がわかりましたね。

では、次は複合音をやってみましょう。

下のようにプログラムして見て下さい。

function sintest2

%
% 複合音の作成
% サンプリング周波数:22050Hz
% 1秒間、1000Hz
% SIN2πとCOS4πの加算音
%
%

fs=22050;
t=[0:1/fs:1];
f=1000;


y=sin(2*pi*f*t)+cos(4*pi*f*t);   % サイン波とコサイン波の加算

soundsc(y,fs);

plot(t,y);
axis([0 0.01 -2 2]);


実行してみて下さい。変な音が鳴って、下のような図が出てきましたね。



この波形が、sinとcosの加算した時の波形になります。
んで、音が複合音となります。

このようにMATLABを使うと容易に音が出せるというわけです。

では、少しこのプログラムを少し拡張してみましょう。
今は、1000Hzって勝手に決められてますが、
これを、コマンドラインから入力出来るようにしてみて下さい。

function sintest3(x)

%
% 複合音の作成
% サンプリング周波数:22050Hz
% 1秒間、周波数はコマンドから。
% SIN2πとCOS4πの加算音
%
%

fs=22050;
t=[0:1/fs:1];
f=x;         % 引数から代入

y=sin(2*pi*f*t)+cos(4*pi*f*t);

soundsc(y,fs);

plot(t,y);
axis([0 0.01 -2 2]);


さて、引数として受け取り、それをfに代入するだけです。
実行してみましょう。

>sintest3(1000)
さて、このようにして引数を指定して実行します。
この辺はC言語と似ているといえば、似ていますね。

いろいろな音を出してみましょう。そしてその時の波形をチェックしてみて下さい。