from pathlib import Path
from struct import pack
import hashlib,json

directory=Path(__file__).parent
def vlq(value):
    data=[value&127]
    while value>>7:
        value>>=7
        data.insert(0,(value&127)|128)
    return bytes(data)

results=[]
for name,division,scale in [('480-original',480,1),('960-header-only',960,1),('960-retimed',960,2)]:
    track=bytearray.fromhex('00ff510307a120')
    last=0
    for start,pitch in [(0,60),(480,64),(960,67),(1440,72)]:
        start*=scale
        end=start+240*scale
        track+=vlq(start-last)+bytes([144,pitch,80])
        track+=vlq(end-start)+bytes([128,pitch,0])
        last=end
    track+=bytes.fromhex('00ff2f00')
    data=b'MThd'+pack('>IHHH',6,0,1,division)+b'MTrk'+pack('>I',len(track))+track
    filename=name+'.mid'
    (directory/filename).write_bytes(data)
    results.append(dict(file=filename,division=division,bytes=len(data),sha256=hashlib.sha256(data).hexdigest()))
(directory/'generated.json').write_text(json.dumps(results,indent=2))
print(json.dumps(results))
