shithub: neindaw

Download patch

ref: 8606ddf48890de2de0f25b771f9ca60ce4ede412
parent: 2ac04082bdde4d5e90f1fbc6f5d00c61aec2d327
author: Sigrid Haflínudóttir <[email protected]>
date: Sun May 10 13:00:33 EDT 2020

begin on the piper tool

diff: cannot open b/piper//null: file does not exist: 'b/piper//null'
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 *.6
 6.*
 *.dsp.c
+piper/a440.h
--- /dev/null
+++ b/piper/a440.txt
@@ -1,0 +1,108 @@
+C0	16.35
+C#0	17.32
+D0	18.35
+D#0	19.45
+E0	20.60
+F0	21.83
+F#0	23.12
+G0	24.50
+G#0	25.96
+A0	27.50
+A#0	29.14
+B0	30.87
+C1	32.70
+C#1	34.65
+D1	36.71
+D#1	38.89
+E1	41.20
+F1	43.65
+F#1	46.25
+G1	49.00
+G#1	51.91
+A1	55.00
+A#1	58.27
+B1	61.74
+C2	65.41
+C#2	69.30
+D2	73.42
+D#2	77.78
+E2	82.41
+F2	87.31
+F#2	92.50
+G2	98.00
+G#2	103.83
+A2	110.00
+A#2	116.54
+B2	123.47
+C3	130.81
+C#3	138.59
+D3	146.83
+D#3	155.56
+E3	164.81
+F3	174.61
+F#3	185.00
+G3	196.00
+G#3	207.65
+A3	220.00
+A#3	233.08
+B3	246.94
+C4	261.63
+C#4	277.18
+D4	293.66
+D#4	311.13
+E4	329.63
+F4	349.23
+F#4	369.99
+G4	392.00
+G#4	415.30
+A4	440.00
+A#4	466.16
+B4	493.88
+C5	523.25
+C#5	554.37
+D5	587.33
+D#5	622.25
+E5	659.25
+F5	698.46
+F#5	739.99
+G5	783.99
+G#5	830.61
+A5	880.00
+A#5	932.33
+B5	987.77
+C6	1046.50
+C#6	1108.73
+D6	1174.66
+D#6	1244.51
+E6	1318.51
+F6	1396.91
+F#6	1479.98
+G6	1567.98
+G#6	1661.22
+A6	1760.00
+A#6	1864.66
+B6	1975.53
+C7	2093.00
+C#7	2217.46
+D7	2349.32
+D#7	2489.02
+E7	2637.02
+F7	2793.83
+F#7	2959.96
+G7	3135.96
+G#7	3322.44
+A7	3520.00
+A#7	3729.31
+B7	3951.07
+C8	4186.01
+C#8	4434.92
+D8	4698.63
+D#8	4978.03
+E8	5274.04
+F8	5587.65
+F#8	5919.91
+G8	6271.93
+G#8	6644.88
+A8	7040.00
+A#8	7458.62
+B8	7902.13
--- /dev/null
+++ b/piper/mkfile
@@ -1,0 +1,19 @@
+</$objtype/mkfile
+
+TARG=piper
+BIN=/$objtype/bin/daw
+
+OFILES=\
+	piper.$O\
+
+HFILES=\
+	a440.h\
+
+%.h: %.txt
+	./notegen <$stem.txt >$stem.h
+
+default:V: all
+
+CLEANFILES=a440.h
+
+</sys/src/cmd/mkone
--- /dev/null
+++ b/piper/notegen
@@ -1,0 +1,27 @@
+#!/bin/rc
+
+awk '
+	BEGIN {
+		octave = -1
+	}
+
+	/#/ {
+		$1 = tolower($1)
+		sub("#", "")
+	}
+
+	{
+		split($1, n, "")
+		if(n[2] != octave){
+			if(octave >= 0)
+				printf "	},\n"
+			printf "	[%d] = {\n", n[2]
+		}
+		octave = n[2]
+		printf "		[''%s''-''A''] = %s,\n", n[1], $2
+	}
+
+	END {
+		printf "	}\n"
+	}
+'
--- /dev/null
+++ b/piper/piper.c
@@ -1,0 +1,49 @@
+#include <u.h>
+#include <libc.h>
+#include <thread.h>
+
+static int b2i[] = {
+	['0'] =  0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
+	['a'] = 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+	['k'] = 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+	['u'] = 30, 31, 32, 33, 34, 35,
+};
+
+static float notes[/* octave */]['g'-'A'+1 /* note */] = {
+#include "a440.h"
+};
+
+static float
+note2freq(int octave, char note)
+{
+	note -= 'A';
+	if(octave < 0 || octave >= nelem(notes) || note >= nelem(notes[0]))
+		return 0.0;
+	return notes[octave][note];
+}
+
+static void
+usage(void)
+{
+	print("usage: %s DIR...\n", argv0);
+	threadexitsall("usage");
+}
+
+void
+threadmain(int argc, char **argv)
+{
+	int i;
+
+	ARGBEGIN{
+	default:
+		usage();
+	}ARGEND;
+
+	if (argc < 1)
+		usage();
+
+	for (i = 0; i < argc; i++) {
+	}
+
+	threadexitsall(nil);
+}