#include <stdio.h>
#include <math.h>
#define SIZE  (8*44100)
int main() {
  FILE *fp2;
  unsigned char 
       h[44]={0x52,0x49,0x46,0x46,   /* 識別子 RIFF を ascii code で */
              0x44,0x62,0x5,0x0,     /* ファイルサイズ-8. [可変] */ 
              0x57,0x41,0x56,0x45,   /* 識別子 WAVE を ascii code で */ 
              0x66,0x6d,0x74,0x20,   /* fmt を ascii code で */
              0x10,0x0,0x0,0x0,      /* linear PCM */
              0x1,0x0,               /* linear PCM */ 
              0x2,0x0,               /* stereo */
              0x44,0xac,0x0,0x0,     /* sampling rate = 44100 = 0xac44 */
              0x10,0xb1,0x2,0x0,     /* byte per second, 44100*4 */
              0x4,0x0,               /* 16 bit, stereo */
              0x10,0x0,              /* bit/sample, 16 bit */      
              0x64,0x61,0x74,0x61,   /* 識別子 data を ascii code で */
              0x20,0x62,0x5,0x0};    /* 以下のデータ部分のファイルサイズ. [可変] */
                                     /* 2 秒分のデータなので決め打ち */
  unsigned char data[SIZE];  // 2秒のデータ.
  int c;
  int i;
  int filesize = (44+SIZE)-8;
  int datasize = SIZE;
  int w;
  double t;

  /* data に音データを書き込む, 440Hz の sin 波 */
  for (i=0; i<SIZE; i += 4) {
    t = ((double)(i/4))/44100.0;
    w = (int) 3000*sin(2*3.1415*440*t); // 440 Hz の sin 波
    if (w < 0) w = w + 0x10000;       // 補数表現へ
    data[i] = data[i+2] = w % 0x100;  // data[i] が左, data[i+2]が右
    data[i+1] = data[i+3] = w / 0x100; 
  }

  /* データをファイル mysound.wav へ書き込む. */
  fp2 = fopen("mysound.wav","w");
  for (i=0; i<44; i++) fputc(h[i],fp2);
  for (i=0; i<SIZE; i++) fputc(data[i],fp2);
  fclose(fp2);
}

/*
  WAVE format     :   http://www.kk.iij4u.or.jp/~kondo/wave/
*/

