logo

bytemedia

Home to byte-level sounds, images, videos, … git clone https://hacktivis.me/git/bytemedia.git
commit: 186129564113e2d3996b5f94ead92ecbf8a7e8a9
parent c2eeca02aa928cf763ff5062d797cf86ec58a2b1
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Sun,  9 Jan 2022 12:31:05 +0100

c/kagome_kagome: Initial sawtooth version

Diffstat:

AC/kagome_kagome.c169+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 169 insertions(+), 0 deletions(-)

diff --git a/C/kagome_kagome.c b/C/kagome_kagome.c @@ -0,0 +1,169 @@ +#define _POSIX_C_SOURCE 200809L +#include <stdio.h> +#include <inttypes.h> // uint32_t + +#include "au.h" + +#define TICK 3600 +#define NOTE (TICK*1) +#define GAP (TICK*0) + +void +note(int dur, int pitch) { + for(int t = 0;t<dur;t++) { + putchar( t*pitch ); + } +} + +void +silence(int dur) { + for(int t = 0;t<dur;t++)putchar( 0x00 ); +} + +void +kagome() { + note(NOTE*2, 8); silence(GAP*2); + + note(NOTE*1, 8); silence(GAP); + + note(NOTE*1, 9); silence(GAP); + + // ---- + + note(NOTE*1, 8); silence(GAP); + + note(NOTE*1, 8); silence(GAP); + + note(NOTE*1, 8); silence(GAP); + + silence(TICK*1); + + // ---- + + note(NOTE*1, 8); silence(GAP); + + note(NOTE/2, 8); silence(GAP/2); + note(NOTE/2, 8); silence(GAP/2); + + note(NOTE*1, 8); silence(GAP); + + note(NOTE/2, 7); silence(GAP/2); + note(NOTE/2, 7); silence(GAP/2); + + // ---- + + note(NOTE*1, 8); silence(GAP); + + note(NOTE/2, 8); silence(GAP/2); + note(NOTE/2, 7); silence(GAP/2); + + note(NOTE*1, 5); silence(GAP); + + silence(TICK*1); + + // ---- + + note(NOTE, 8); silence(GAP); + + note(NOTE, 7); silence(GAP); + + note(NOTE, 8); silence(GAP); + + note(NOTE, 7); silence(GAP); + + // ---- + + note(NOTE*1, 8); silence(GAP); + + note(NOTE/2, 8); silence(GAP/2); + note(NOTE/2, 7); silence(GAP/2); + + note(NOTE*1, 5); silence(GAP); + + silence(TICK*1); + + // ---- + + note(NOTE*1, 8); silence(GAP); + + note(NOTE*1, 8); silence(GAP); + + note(NOTE*1, 8); silence(GAP); + + note(NOTE*1, 9); silence(GAP); + + // ---- + + note(NOTE*1, 8); silence(GAP); + + note(NOTE*1, 8); silence(GAP); + + note(NOTE*1, 8); silence(GAP); + + silence(TICK*1); + + // ---- + + note(NOTE*1, 8); silence(GAP); + + note(NOTE/2, 7); silence(GAP/2); + note(NOTE/2, 7); silence(GAP/2); + + note(NOTE*1, 8); silence(GAP); + + note(NOTE/2, 7); silence(GAP/2); + note(NOTE/2, 7); silence(GAP/2); + + // ---- + + note(NOTE*1, 8); silence(GAP); + + note(NOTE*1, 8); silence(GAP); + + note(NOTE*1, 5); silence(GAP); + + silence(TICK*1); + + // ---- + + note(NOTE/2, 8); silence(GAP/2); + note(NOTE/2, 8); silence(GAP/2); + + note(NOTE/2, 8); silence(GAP/2); + note(NOTE/2, 8); silence(GAP/2); + + note(NOTE*1, 8); silence(GAP); + + note(NOTE*1, 9); silence(GAP); + + // ---- + + note(TICK*1, 8); // silence(GAP); + + note(NOTE*1, 7); silence(GAP); + + note(NOTE*1, 8); silence(GAP); + + silence(TICK*1); +} + +int +main(void) +{ + // Use AU defaults + struct au_header header = { + .offset = 24, // no-annotation, in octets + .length = 0xFFFFFFFF, // unknown data size + .encoding = 02, // unsigned 8-bit linear PCM + .samplerate = 8000, // Hz + .channels = 1 + }; + + // fd 1 is stdout + write_au_header(1, &header); + + kagome(); + kagome(); + + return 0; +}