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;
+}