#!/usr/bin/env python3
import sys, wave, struct

inp, outp = sys.argv[1], sys.argv[2]

with wave.open(inp, "rb") as w:
    nch = w.getnchannels()
    sw = w.getsampwidth()
    rate = w.getframerate()
    frames = w.readframes(w.getnframes())

samples = []

if sw == 1:
    vals = list(frames)  # WAV 8-bit is already unsigned
elif sw == 2:
    raw = struct.unpack("<%dh" % (len(frames)//2), frames)
    if nch == 1:
        vals = raw
    else:
        vals = [(raw[i] + raw[i+1]) // 2 for i in range(0, len(raw), nch)]
    samples = [max(0, min(255, (v >> 8) + 128)) for v in vals]
else:
    raise SystemExit("Only 8-bit or 16-bit WAV supported")

if sw == 1:
    if nch == 1:
        samples = vals
    else:
        samples = [sum(vals[i:i+nch]) // nch for i in range(0, len(vals), nch)]

with open(outp, "w") as f:
    f.write("/* generated from %s, %d Hz */\n" % (inp, rate))
    f.write("#define COVOX_PCM_RATE %d\n" % rate)
    f.write("#define COVOX_PCM_BYTES %d\n" % len(samples))
    f.write("static const unsigned char COVOX_PCM[COVOX_PCM_BYTES] = {\n")
    for i in range(0, len(samples), 16):
        f.write("    " + ",".join(str(x) for x in samples[i:i+16]) + ",\n")
    f.write("};\n")
