|
分類:[C/C++]
#include <stdio.h> #include <limits.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <conio.h>
void wave_binary_write() { char s[4]; FILE *fp;
fp = fopen("binary.wav" , "wb"); // RIFFヘッダ s[0] = 'R'; s[1] = 'I'; s[2] = 'F'; s[3] = 'F'; fwrite(s, 1, 4, fp);
// ファイルサイズ(Chank サイズ) unsigned long cl; cl = 36; fwrite(&cl, sizeof(long), 1, fp);
// WAVEヘッダ s[0] = 'W'; s[1] = 'A'; s[2] = 'V'; s[3] = 'E'; fwrite(s, 1, 4, fp);
// chunkID(fmt チャンク) s[0] = 'f'; s[1] = 'm'; s[2] = 't'; s[3] = ' '; fwrite(s, 1, 4, fp);
// チャンクサイズ int chank_size; chank_size = 16; fwrite(&chank_size, sizeof(long), 1, fp); // フォーマットタグ unsigned short tag; tag = 1; fwrite(&tag, sizeof(short), 1, fp);
// channel数 int channel; channel = 2; fwrite(&channel, sizeof(short), 1, fp); // チャンネル数によるバイト量の決定 int byte; if (channel == 1) byte = 1; else if (channel == 2) byte = 2;
// サンプリングレート int rate; rate = 44100; fwrite(&rate, sizeof(long), 1, fp); // 1秒間に読み込ませるデータ量 int asps; asps = channel * rate * byte; printf("%d\n", asps); fwrite(&asps, sizeof(long), 1, fp); // 1秒間に読み込ませるチャンネル当たりのデータ量 int chasps; chasps = channel * byte; printf("%d\n", chasps); fwrite(&chasps, sizeof(short), 1, fp); // 1サンプリングあたりのデータ量 int byteasps; byteasps = byte * 8; fwrite(&byteasps, sizeof(short), 1, fp);
// chunkID (data チャンク) s[0] = 'd'; s[1] = 'a'; s[2] = 't'; s[3] = 'a'; fwrite(s, 1, 4, fp);
fclose(fp); }
void main(void) { wave_binary_write(); FILE *fp;
fp = fopen ("binary.wav", "a+b");
int bytesize; bytesize = 10 * 44100 * 2; //2.5sの再生時間 fwrite(&bytesize, sizeof(long), 1, fp);
long i,j,k; int x[44039];
j = 44039; // 乱数の seed 値のセット srand((unsigned) time(NULL));
// 44039個の乱数を生成して出力 for(k=0; k<10; k++) { for (i=0; i<j; i++) { int n = rand(); x[i] = n;
printf("%d %d\n", x[i],i); fwrite(&n, sizeof(short) ,1, fp); } }
// if (gecth()) return;*/ }
|