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:
| A | C/kagome_kagome.c | 169 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | 
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;
+}