Wafer is a library for writing 8-bit PCM WAVE files. It is written in C and consists of a single header: wafer.h. It is part of Misk.
Here is an example of using Wafer to write an audio file that has 1 channel and 22050 samples per second:
#include "wafer.h" #define L 256 #define Q 8160 int main(void) { uint8_t audio[L * L]; for (int y = 0; y < L; ++y) for (int x = 0; x < L; ++x) audio[y * L + x] = ((Q ^ x) * x & (Q ^ y) * y) & Q ? 0 : 255; wafer_file *file = wafer_open("wafer-example.wav"); wafer_set_channels(file, 1); wafer_set_samples_per_sec(file, 22050); wafer_write_metadata(file); wafer_write_data(audio, sizeof audio, file); wafer_close(file); }
Here is the audio file, which is very loud:
Fun fact: Each sample in the audio file corresponds to a pixel in the following PQ image. From top to bottom and left to right, a black pixel corresponds to a sample with amplitude 255, and a white pixel corresponds to a sample with amplitude 0.