static void write_wav_header(FILE * file, int sample_rate, int num_channels, int num_samples, int bytes_per_sample){ printf("SCO Demo: writing wav header: sample rate %u, num channels %u, duration %u s, bytes per sample %u\n", sample_rate, num_channels, num_samples / sample_rate / num_channels, bytes_per_sample); /* write RIFF header */ fwrite("RIFF", 1, 4, file); // num_samples = blocks * subbands uint32_t data_bytes = (uint32_t) (bytes_per_sample * num_samples * num_channels); little_endian_fstore_32(file, data_bytes + 36); fwrite("WAVE", 1, 4, file); int byte_rate = sample_rate * num_channels * bytes_per_sample; int bits_per_sample = 8 * bytes_per_sample; int block_align = num_channels * bits_per_sample; int fmt_length = 16; int fmt_format_tag = 1; // PCM /* write fmt chunk */ fwrite("fmt ", 1, 4, file); little_endian_fstore_32(file, fmt_length); little_endian_fstore_16(file, fmt_format_tag); little_endian_fstore_16(file, num_channels); little_endian_fstore_32(file, sample_rate); little_endian_fstore_32(file, byte_rate); little_endian_fstore_16(file, block_align); little_endian_fstore_16(file, bits_per_sample); /* write data chunk */ fwrite("data", 1, 4, file); little_endian_fstore_32(file, data_bytes); }
static void write_wav_header(FILE * wav_file, int total_num_samples, int num_channels, int sample_rate){ unsigned int write_with_bytes_per_sample = 2; /* write RIFF header */ fwrite("RIFF", 1, 4, wav_file); // num_samples = blocks * subbands uint32_t data_bytes = (uint32_t) (write_with_bytes_per_sample * total_num_samples * num_channels); little_endian_fstore_32(wav_file, data_bytes + 36); fwrite("WAVE", 1, 4, wav_file); int byte_rate = sample_rate * num_channels * write_with_bytes_per_sample; int bits_per_sample = 8 * write_with_bytes_per_sample; int block_align = num_channels * bits_per_sample; int fmt_length = 16; int fmt_format_tag = 1; // PCM /* write fmt chunk */ fwrite("fmt ", 1, 4, wav_file); little_endian_fstore_32(wav_file, fmt_length); little_endian_fstore_16(wav_file, fmt_format_tag); little_endian_fstore_16(wav_file, num_channels); little_endian_fstore_32(wav_file, sample_rate); little_endian_fstore_32(wav_file, byte_rate); little_endian_fstore_16(wav_file, block_align); little_endian_fstore_16(wav_file, bits_per_sample); /* write data chunk */ fwrite("data", 1, 4, wav_file); little_endian_fstore_32(wav_file, data_bytes); }