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