StreamPA / streampa /stream.py
faeea's picture
Release frozen StreamPA seed 1337 with validated standalone inference
f8a1702 verified
Raw History Blame Contribute Delete
1.29 kB
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()