shithub: neindaw

Download patch

ref: 0da73060a5e334ea86b0ad4641c6144d97d813e7
parent: 934507cdd80d9f49635d1cfbe4b013a0934f3d18
author: Sigrid Haflínudóttir <[email protected]>
date: Thu Mar 19 20:52:10 EDT 2020

ay: add a stupid awk script to test AY with Orca

--- /dev/null
+++ b/ay/piper
@@ -1,0 +1,114 @@
+#!/bin/rc
+rfork ne
+
+awk '
+	BEGIN {
+		eb[1] = "Hold"
+		eb[2] = "Alternate"
+		eb[4] = "Attack"
+		eb[8] = "Continue"
+
+		es["d"] = 0  # \_________
+		es["D"] = 8  # \|\|\|\|\|
+		es["a"] = 4  # /|________
+		es["A"] = 12 # /|/|/|/|/|
+		es["r"] = 14 # /\/\/\/\/\
+		es["R"] = 10 # \/\/\/\/\/
+		es["h"] = 13 # /¯¯¯¯¯¯¯¯¯
+		es["H"] = 11 # \|¯¯¯¯¯¯¯¯
+
+		period["0"] = 2000
+		period["1"] = 1000
+		period["2"] = 500
+		period["3"] = 333.3333
+		period["4"] = 250
+		period["5"] = 200
+		period["6"] = 166.6666
+		period["7"] = 142.8571
+		period["8"] = 125
+		period["9"] = 111.1111
+		period["a"] = 100
+		period["b"] = 50
+
+		chan["0"] = "A"
+		chan["1"] = "B"
+		chan["2"] = "C"
+
+		note["D","5"] = 587.3295
+		note["C","5"] = 523.2511
+		note["B","4"] = 493.8833
+		note["A","4"] = 440
+		note["G","4"] = 391.9954
+		note["F","4"] = 349.2282
+		note["E","4"] = 329.6276
+		note["D","4"] = 293.6648
+		note["C","4"] = 261.6256
+		note["B","3"] = 246.9417
+		note["A","3"] = 220
+		note["G","3"] = 195.9977
+		note["F","3"] = 174.6141
+		note["E","3"] = 164.8138
+		note["D","3"] = 146.8324
+		note["C","3"] = 130.8128
+		note["B","2"] = 123.4708
+		note["A","2"] = 110
+		note["G","2"] = 97.99886
+		note["F","2"] = 87.30706
+		note["E","2"] = 82.40689
+		note["D","2"] = 73.41619
+		note["C","2"] = 65.40639
+		note["B","1"] = 61.73541
+		note["A","1"] = 55
+		note["G","1"] = 48.99943
+		note["F","1"] = 43.65353
+		note["E","1"] = 41.20344
+		note["D","1"] = 36.70810
+		note["C","1"] = 32.70320
+	}
+
+	{
+		split($1, a, ",")
+		split(a[1], c, "")
+	}
+
+	# key
+	# kXCONVL
+	# 1234567
+	# X = ay number
+	# C = channel (0, 1, 2)
+	# O = octave
+	# N = note
+	# V = velocity
+	# L = length
+	/^k[0-9]/ {
+		path = "/n/ay/" c[2] "/AY-3-8910/"
+		ch = path chan[c[3]]
+		freq = note[c[5],c[4]]
+		if(freq != ""){
+			print freq >> (ch "/Tone/Frequency/ctl")
+			if(c[6] != "")
+				print c[6]/10 >> (ch "/Volume/ctl")
+			print (c[7] != "") >> (ch "/Envelope/ctl")
+			if(c[7] != "")
+				print period[c[7]] >> (path "/Envelope/Period/ctl")
+			print 1 >> (path "/Envelope/Hit/ctl")
+		}else{
+			c[6] = "" # stop playing if invalid note/octave
+		}
+
+		print (c[6] != "") >> (ch "/Tone/Enable/ctl")
+		fflush()
+		next
+	}
+
+	# envelope
+	# eXSP
+	# 1234
+	# X = ay number
+	# S = shape (see "es_" var)
+	# P = period (see "period" var)
+	/^e[0-9]/ {
+		# FIXME lol
+		next
+	}
+'