aboutsummaryrefslogtreecommitdiff
path: root/wave_stats.py
diff options
context:
space:
mode:
Diffstat (limited to 'wave_stats.py')
-rw-r--r--wave_stats.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/wave_stats.py b/wave_stats.py
new file mode 100644
index 0000000..26dd2dc
--- /dev/null
+++ b/wave_stats.py
@@ -0,0 +1,64 @@
+# Part of the Fifteen-Thieves Project
+# Chris Xiong 2020
+# License: Expat (MIT)
+import sys
+import os
+import xv.util
+import xv.amap
+
+wavecnt = [0] * 1024
+wavenames = []
+
+def process_preset(t, is_rhy=False):
+ if is_rhy:
+ for rkey in range(0, 85):
+ for rtone in range(0, 4):
+ if t.value(f"sd_root.part[0].rhythm.rtone[{rkey}].rt_wmt[{rtone}].switch"):
+ try:
+ wavecnt[t.value(f"sd_root.part[0].rhythm.rtone[{rkey}].rt_wmt[{rtone}].wave_number_l")] += 1
+ wavecnt[t.value(f"sd_root.part[0].rhythm.rtone[{rkey}].rt_wmt[{rtone}].wave_number_r")] += 1
+ except IndexError:
+ pass
+ else:
+ for tone in range(0, 4):
+ if t.value(f"sd_root.part[0].patch.tmt.tmt_block[{tone}].tone_switch"):
+ try:
+ wavecnt[t.value(f"sd_root.part[0].patch.tone[{tone}].tn_wave.wave_number_l")] += 1
+ wavecnt[t.value(f"sd_root.part[0].patch.tone[{tone}].tn_wave.wave_number_r")] += 1
+ except IndexError:
+ pass
+
+if __name__ == "__main__":
+ print("loading address mapping...", flush=True, file=sys.stderr)
+ m = xv.amap.AddrMapTemplate("amaps/sd-80.amap")
+ t = xv.amap.create_addr_map_tree(m)
+
+ print("loading wave names...", file=sys.stderr)
+ with open("data/sdwavelist","r") as f:
+ for l in f:
+ wavenames += [l.split('\t')[1].strip()]
+
+ inst_dir = ["./data/patchparam/classical/", "./data/patchparam/contemporary/", "./data/patchparam/solo/"]
+ #inst_dir += ["./data/patchparam/enhanced/", "./data/patchparam/special_1/", "./data/patchparam/special_2/"]
+
+ rhy_dir = ["./data/rhythmparam/classical/", "./data/rhythmparam/contemporary/", "./data/rhythmparam/solo/"]
+ #rhy_dir += ["./data/rhythmparam/enhanced/"]
+
+ for i in inst_dir:
+ for fn in os.listdir(i):
+ mr = xv.util.load_memoryregion(os.path.join(i, fn))
+ for addr, data in mr:
+ ra = xv.util.b7belist2int(addr)
+ t.data[ra:ra + len(data)] = data
+ process_preset(t)
+
+ for i in rhy_dir:
+ for fn in os.listdir(i):
+ mr = xv.util.load_memoryregion(os.path.join(i, fn))
+ for addr, data in mr:
+ ra = xv.util.b7belist2int(addr)
+ t.data[ra:ra + len(data)] = data
+ process_preset(t, True)
+
+ for i, w in enumerate(wavenames):
+ print(f"{w.ljust(16)}{wavecnt[i + 1]}")