import argparse, array, hashlib, json, sys, wave
parser=argparse.ArgumentParser()
parser.add_argument('file'); parser.add_argument('--rate',type=int,default=48000); parser.add_argument('--frames',type=int,default=57600)
args=parser.parse_args()
with wave.open(args.file,'rb') as w:
    rate=w.getframerate(); frames=w.getnframes(); channels=w.getnchannels(); width=w.getsampwidth(); pcm=w.readframes(frames)
values=array.array('h',pcm)
if sys.byteorder!='little': values.byteswap()
crossings=[i-values[i]/(values[i+1]-values[i]) for i in range(len(values)-1) if values[i]<=0<values[i+1]]
tone=(len(crossings)-1)*rate/(crossings[-1]-crossings[0])
passed=rate==args.rate and frames==args.frames and channels==1 and width==2
print(json.dumps({'identity':'author_stdlib_signal_not_TTS_or_model_output','file':args.file,'declaredRate':rate,'frames':frames,'durationSeconds':frames/rate,'channels':channels,'sampleWidthBytes':width,'observedToneHz':round(tone,5),'pcmSha256':hashlib.sha256(pcm).hexdigest(),'expectedRate':args.rate,'expectedFrames':args.frames,'passed':passed},indent=2))
raise SystemExit(0 if passed else 1)
