C言語 サイン波をつくる
任意のサイン波を作って、それをwavファイルとして保存するプログラム。子ども向けの学習サンプルとして作ってみた。下の例ではサイン波の足し算をしているが、掛け算などすることで、フーリエ変換の学習にもなる。下記のプログラムで作ったwavファイルはヘッダを含まないので、Audacityなどの波形編集ソフトでRawデータとして読み込む必要がある。サンプルフォーマット(音量の分解能)は32bit float。 サイン波の合成 #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void){ FILE *fpw; /* 書き込み用ファイルポインタ */ float *pbuff; /* メモリのデータを指す */ int samplingfreq = 44100; /* サンプリング周波数 */ int sec = 10; /* 作成する波形の長さ(秒) */ int fileSize = samplingfreq * sec; /* ファイルの大きさ */ float step = 2 * M_PI / samplingfreq; /* 点間のステップ */ int i; /* 新規ファイル作成 */ fpw = fopen("32bitF_raw.wav", "wb"); /* 失敗時終了 */ if (fpw == NULL) exit(EXIT_FAILURE); /* メモリを確保して先頭アドレスをpbuffに入れる */ pbuff = (float*)malloc(sizeof(float) * fileSize); /* 失敗時終了 */ if (pbuff == NULL) exit(EXIT_FAILURE); /* データ作成 & メモリに書き込み */ for(i=0; i<fileSize; i++){ *(pbuff+i) = /* 例 0.3は振幅 440は周波数Hz */ (0.3 * sin(i * st