#include <iostream>

using namespace std;

void ecrire(int valeur, int nbfois, int nboctets, FILE* file) {
	for(int i = 0; i < nbfois; i++)
		fwrite(&valeur, nboctets, 1, file);
}

void ecrire(char* t, int n, FILE* file) {
	fwrite(t, sizeof(char), n, file);
}

void ecrire(int x, int nboctets, FILE* file) {
	fwrite(&x, nboctets, 1, file);
}

void ecrire_entete(FILE* file, int nbechtparseconde, int taille) {
	ecrire("RIFF", 4, file);
	ecrire(taille + 32, 4, file); // taille + 40 - 8
	ecrire("WAVEfmt ", 8, file);
	ecrire(16, 4, file);
	ecrire(1, 2, file); // type PCM
	ecrire(1, 2, file); // 1 canal
	ecrire(nbechtparseconde, 4, file); // nb d'échantillons par seconde
	ecrire(nbechtparseconde, 4, file); // nb d'octets par seconde
	ecrire(1, 2, file); // 1 octet par échantillon
	ecrire(1, 2, file); // idem
	ecrire("data", 4, file);
	ecrire(taille, 4, file); // taille des données qui suivent
}

int main (int argc, char * const argv[]) {
	FILE * file=fopen("/Users/Thomas/Desktop/output.wav","wb");
	
	ecrire_entete(file, 44100, 44100*2);
	
	for(int i = 0; i < 220; i++) {
		ecrire(200, 100, 1, file);
		ecrire(0, 100, 1, file);
	}

		ecrire(200, 100, 1, file);

	for(int i = 0; i < 220; i++) {
		ecrire(200, 100, 1, file);
		ecrire(100, 100, 1, file);
	}
		ecrire(200, 100, 1, file);
	
	fclose(file);
	return 0;
}
