/* * 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; }