File size: 1,294 Bytes
f8a1702
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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()