/*
 * Now, a month ago I was meant to write th a simple UDP mixer.
 * I'll get to that this week..... for now, let's just get C to
 * vomit sound into openbsd aucat (sndio device base)
 * (or for the non-openbsd-er, mpv will do...)
 * Imagine something like this:
 * cc -o test rawcat.c -lm
 * ./test | aucat -h raw -e s16le -r 44100 -i -
 * or similarly (now, who did I use the defaults of)
 * ./test | mpv --demuxer=rawaudio -
*/

#include <stdint.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

#define BUF_LEN 88200
#define SF 44100
#define CH 2

int
main(void)
{
        int16_t buffer[BUF_LEN];
        int s;
        double frequency, time_coef, k;

        k = 1.0 * (1 << 14);
        // Note that if you turn frequency up to 440
        // You might like to bitshift left only 10
        // Because of how wave energy ~ k^2 . f^2

        frequency = 80 * CH; 
        // 'Cause buffer will be distributed
        // between CH channels we speed it up
        // by CH times in this example. #klooge

        time_coef = M_PI * 2.0 / SF;
        // imagine k * sin( freq * s * 2 pi / SF );
        for (s=0; s<BUF_LEN; ++s)
            buffer[s]=(int16_t)(k*sin(frequency*s*time_coef));

        for (s=0; s<CH; ++s)
            fwrite(buffer, BUF_LEN, sizeof(buffer[0]), stdout);

        return EXIT_SUCCESS;
}