C言語 ホワイトノイズをつくる
ホワイトノイズ すべての周波数を含み、そのすべてが一定の強度を持つ波。これをまじめに計算するとなると、結構厄介な話になる。ここでは1Hzからナイキスト周波数(サンプリング周波数44100Hzであれば、22050Hz)を扱う。また1Hz単位のサイン波を同じ音量にして足していくことで実現してみた。計算が膨大になるため、処理に時間がかかる。ちなみに1秒のホワイトノイズを作るのに4分ぐらいかかっている。速いマシンなら1分以内で処理できるとは思う。またサイン波の初期角度は、ランダム関数を使って2pi以内でばらつかせることでお互いの干渉を防いでいる。 ホワイトノイズ生成プログラム /* White noise * sin波の合成による生成 * 32bit float RAW ヘッダなしwaveファイル出力 */ #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void){ FILE *fpw; /* 書き込み用ファイルポインタ */ float *pbuff; /* メモリのデータを指す */ int samplingfreq = 44100; /* サンプリング周波数 */ int sec = 1; /* 作成する波形の長さ(秒) */ int fileSize = samplingfreq * sec * 2; /* ファイルの大きさ */ float gain = 0.005; /* ひとつの波形の振幅 */ float step = 2 * M_PI / samplingfreq; /* 点間のステップ */ float phase; int i, j; /* 新規ファイル作成 */ fpw = fopen("white_noise_32bitF_raw.wav", "wb"); /* 失敗時終了 */ if (fpw == NULL) exit(EXIT_FAILURE); /* メモリを確保して先頭アドレスをpbuffに入れる */ pbuff = (float*)m