File size: 1,748 Bytes
408e7ff
 
 
 
 
 
 
 
 
 
d582463
408e7ff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/env python3
"""LavaSR v2 AX650 demo: enhance/upsample a wav on the board.

Usage:
    python3 demo.py input.wav -o output.wav
    python3 demo.py input.wav -o output.wav --no-denoise
"""
import argparse
import os
import sys
sys.dont_write_bytecode = True
import time

import numpy as np

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from lavasr_sdk import LavaSR, read_wav, write_wav


def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("input")
    ap.add_argument("-o", "--output", default=None)
    ap.add_argument("--models", default=os.path.join(os.path.dirname(__file__), "..", "models"))
    ap.add_argument("--no-denoise", action="store_true", help="skip the UL-UNAS denoiser")
    ap.add_argument("--cutoff", type=int, default=None,
                    help="LR crossover Hz (default: min(input_sr,16000)/2)")
    args = ap.parse_args()

    model_dir = os.path.abspath(args.models)
    model = LavaSR(
        os.path.join(model_dir, "den_encoder.axmodel"),
        os.path.join(model_dir, "den_decoder.axmodel"),
        os.path.join(model_dir, "enhancer.axmodel"),
        model_config=os.path.join(model_dir, "model_config.json"),
        cutoff=args.cutoff,
    )
    x, sr = read_wav(args.input)
    t0 = time.time()
    y, osr = model.enhance(x, sr, denoise=not args.no_denoise)
    dt = time.time() - t0
    out = args.output or os.path.splitext(args.input)[0] + "_enhanced.wav"
    write_wav(out, y, osr)
    dur = len(x) / float(sr)
    print(f"LavaSR v2: {sr} Hz -> {osr} Hz, {dur:.2f}s audio")
    print(f"  denoise : {not args.no_denoise}")
    print(f"  time    : {dt:.3f}s   RTF {dt / max(dur, 1e-9):.4f}")
    print(f"  output  : {out}")


if __name__ == "__main__":
    main()