/* *** test2.c: 正弦波を生成する *** * *** 使い方 *** * % test2 [-f] [-s] [-t] [-r] [] * frequency: 正弦波の周波数(デフォールト 440Hz) * sampling rate: サンプリングレート(デフォールト 44100Hz) * length: 音の時間長(デフォールト: 1秒) * range: 振幅(デフォールト: 0.8 (1.0 が最大)) * wav file: 出力 WAV ファイル名(デフォールト: stdout へ) * *** コンパイル方法 *** * % cc -o test2 test2.c wavfile.c -lm * * wavfile.c を予めコンパイルしておけば、下のように wavfile.o をリンクすればよい * % cc -c wavfile.c // wavfile.o を作る:1回やっておけばよい * % cc -o test2 test2.c wavfile.o -lm *  */ #include "wavfile.h" WAVFILE *wf; int sampling = 44100; double frequency = 440.0; double tlength = 1.0; double range = 0.8; int nsample; double * sinewave() // 正弦波データの生成。動的に割当てた Track 配列に格納 { int it; double tunit = 1.0/(double)sampling; double *Track; nsample = (int)((double)sampling * tlength); Track = (double *)calloc(nsample, sizeof(double)); for (it = 0; it < nsample; it++) { double t = (double)it * tunit; Track[it] = sin(2.0*M_PI*frequency*t) * range; } return(Track); } // 処理系により、int, void いずれかで警告メッセージが出るものがある // void int main(argc, argv) int argc; char **argv; { int i; char *Filename; double *Track; for (i=1; i