var sampleRate = 44100.0; var duration = 8.0; var dataLength = round(sampleRate * duration); var dataLength_b0 = dataLength >> 0 & 0xff; var dataLength_b1 = dataLength >> 8 & 0xff; var dataLength_b2 = dataLength >> 16 & 0xff; var dataLength_b3 = dataLength >> 24 & 0xff; const adjustedHdrSize = 36; var len = dataLength - adjustedHdrSize; var len_b0 = len >> 0 & 0xff; var len_b1 = len >> 8 & 0xff; var len_b2 = len >> 16 & 0xff; var len_b3 = len >> 24 & 0xff; // WAV header var wavhdr = "RIFF"; wavhdr ..= fmtstr("%c%c%c%c", len_b0, len_b1, len_b2, len_b3); wavhdr ..= "WAVE"; wavhdr ..= "fmt "; wavhdr ..= "\x10\x00\x00\x00"; wavhdr ..= "\x01\x00"; wavhdr ..= "\x01\x00"; wavhdr ..= "\x44\xac\x00\x00"; wavhdr ..= "\x44\xac\x00\x00"; wavhdr ..= "\x01\x00"; wavhdr ..= "\x08\x00"; wavhdr ..= "data"; wavhdr ..= fmtstr("%c%c%c%c", dataLength_b0, dataLength_b1, dataLength_b2, dataLength_b3); // write wav header var f = fopen("notes.wav", "w"); fwrite(f, wavhdr); // compute and write actual data var frequs = { 261.6, 293.6, 329.6, 349.2, 392.0, 440.0, 493.9, 523.3 }; for var j = 0; j < duration; j++ { var frequ = frequs[j]; var omega = 2 * M_PI * frequ; for var i = 0; i < dataLength / 8; i++ { var y = 32 * sin(omega * i / sampleRate); var byte = fmtstr("%c", round(y)); fwrite(f, byte); } } fclose(f);