import argparse import json from pathlib import Path import soundfile as sf from .pipeline import StreamPAPipeline def main(): p=argparse.ArgumentParser(description='Append raw audio blocks and emit each StreamPA prefix') p.add_argument('--audio',required=True) p.add_argument('--bundle-dir',required=True) p.add_argument('--device',default='cpu') p.add_argument('--threads',type=int,default=2) p.add_argument('--block-samples',type=int,default=1600) p.add_argument('--output',required=True) a=p.parse_args() session=StreamPAPipeline(a.bundle_dir,a.device,a.threads).create_session() dest=Path(a.output); dest.parent.mkdir(parents=True,exist_ok=True) with sf.SoundFile(a.audio) as audio, dest.open('x',encoding='utf-8') as f: if audio.samplerate!=16000 or audio.channels!=1: raise ValueError('Input must be mono 16000-Hz WAV') while True: block=audio.read(a.block_samples,dtype='float32') if not len(block): break for row in session.append(block): f.write(json.dumps(row,allow_nan=False)+'\n'); f.flush() f.write(json.dumps(session.finish(),allow_nan=False)+'\n') print(json.dumps(dict(output=str(dest),prefixes=session.prefix_index))) if __name__=='__main__': main()