diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..2005612af1303d479a1b2973b7de95543f5e4dc7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,57 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +models/bigvgan.axmodel filter=lfs diff=lfs merge=lfs -text +models/flowhigh.axmodel filter=lfs diff=lfs merge=lfs -text +samples/listen/16k/speech_2_input_16k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/16k/speech_3_input_16k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/48k_from16k/speech_2_output_48k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/48k_from16k/speech_3_output_48k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/48k_from8k/OSR_cn_000_0072_output_48k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/48k_from8k/OSR_cn_000_0073_output_48k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/48k_from8k/OSR_cn_000_0074_output_48k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/48k_from8k/OSR_cn_000_0075_output_48k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/48k_from8k/OSR_us_000_0010_output_48k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/48k_from8k/OSR_us_000_0013_output_48k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/48k_from8k/OSR_us_000_0057_output_48k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/48k_from8k/OSR_us_000_0059_output_48k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/48k_from8k/samplelib_speech_1m_output_48k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/48k_from8k/speech_2_output_48k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/48k_from8k/speech_3_output_48k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/8k/OSR_cn_000_0072_input_8k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/8k/OSR_cn_000_0073_input_8k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/8k/OSR_cn_000_0074_input_8k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/8k/OSR_cn_000_0075_input_8k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/8k/OSR_us_000_0010_input_8k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/8k/OSR_us_000_0013_input_8k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/8k/OSR_us_000_0057_input_8k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/8k/OSR_us_000_0059_input_8k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/8k/samplelib_speech_1m_input_8k.wav filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_cn_000_0072_input_8k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_cn_000_0072_output_48k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_cn_000_0073_input_8k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_cn_000_0073_output_48k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_cn_000_0074_input_8k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_cn_000_0074_output_48k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_cn_000_0075_input_8k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_cn_000_0075_output_48k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_us_000_0010_input_8k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_us_000_0010_output_48k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_us_000_0013_input_8k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_us_000_0013_output_48k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_us_000_0057_input_8k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_us_000_0057_output_48k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_us_000_0059_input_8k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/OSR_us_000_0059_output_48k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/samplelib_speech_1m_input_8k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/samplelib_speech_1m_output_48k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/speech_2_input_16k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/speech_2_input_8k.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/speech_2_input_8k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/speech_2_output_16k_48k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/speech_2_output_8k_48k.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/speech_2_output_8k_48k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/speech_3_input_16k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/speech_3_input_8k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/speech_3_output_16k_48k_spec.png filter=lfs diff=lfs merge=lfs -text +samples/listen/spectrograms/speech_3_output_8k_48k_spec.png filter=lfs diff=lfs merge=lfs -text diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..e81421007a6cdb03189d775ab1d2af7830a3c35b --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Jun-Hak Yun + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..0e1112b399e8c415f931d1767d046368c867f812 --- /dev/null +++ b/README.md @@ -0,0 +1,145 @@ +--- +library_name: axera +pipeline_tag: audio-to-audio +base_model: kiriyamaX/FLowHigh_indep_adaptive_400k +language: +- en +- zh +tags: +- axera +- ax650 +- npu3 +- flowhigh +- speech-super-resolution +- audio-super-resolution +- bandwidth-extension +- real-time +- python +--- + +# FlowHigh.AXERA + +**8/16 kHz 语音 → 48 kHz 超分 · AX650 NPU3 · Python RTF 0.24(20–60 s 音频)· 2 个 axmodel 共 58 MB · 不做降噪** + +![RTF](https://img.shields.io/badge/RTF-0.24%20Python-brightgreen) ![Size](https://img.shields.io/badge/axmodel-58%20MB-green) [![GitHub](https://img.shields.io/badge/GitHub-ZY--2012%2FFlowHigh.AXERA-black)](https://github.com/ZY-2012/FlowHigh.AXERA) + +- GitHub: https://github.com/ZY-2012/FlowHigh.AXERA +- 上游: https://github.com/jjunak-yun/FLowHigh_code + +## 目录 + +- 快速开始 +- 结果 +- 推理速度 +- 数据来源 +- License + +## 快速开始(AX650 板端) + +从 HuggingFace 下载 `models/`、`assets/`、`python/`、`samples/`,在包根目录运行: + +```bash +bash run_ax650.sh samples/listen/8k/OSR_us_000_0010_input_8k.wav output.wav +``` + +输入支持 8 kHz / 16 kHz,输出固定 48 kHz。默认 1-step flow、`std=1e-4`;不做降噪。 + +## 结果 + +### 8 kHz 输入(Open Speech / Samplelib) + +#### English + +**OSR_us_000_0010** + +| 版本 | 输入 | FlowHigh 输出 | +|---|---|---| +| 8k |
|
| + +**OSR_us_000_0013** + +| 版本 | 输入 | FlowHigh 输出 | +|---|---|---| +| 8k |
|
| + +**OSR_us_000_0057** + +| 版本 | 输入 | FlowHigh 输出 | +|---|---|---| +| 8k |
|
| + +**OSR_us_000_0059** + +| 版本 | 输入 | FlowHigh 输出 | +|---|---|---| +| 8k |
|
| + +#### Chinese + +**OSR_cn_000_0072** + +| 版本 | 输入 | FlowHigh 输出 | +|---|---|---| +| 8k |
|
| + +**OSR_cn_000_0073** + +| 版本 | 输入 | FlowHigh 输出 | +|---|---|---| +| 8k |
|
| + +**OSR_cn_000_0074** + +| 版本 | 输入 | FlowHigh 输出 | +|---|---|---| +| 8k |
|
| + +**OSR_cn_000_0075** + +| 版本 | 输入 | FlowHigh 输出 | +|---|---|---| +| 8k |
|
| + +#### Samplelib(1 分钟,频谱图为前 10 s) + +**samplelib_speech_1m** + +| 版本 | 输入 | FlowHigh 输出 | +|---|---|---| +| 8k |
|
| + +### 16 kHz 参照(人声) + +同一批人声降采样到 16 kHz 后输入;8k 行为 8 kHz 输入,16k 行为 16 kHz 输入。 + +**speech_2** + +| 版本 | 输入 | FlowHigh 输出 | +|---|---|---| +| 8k |
|
| +| 16k |
|
| + +**speech_3** + +| 版本 | 输入 | FlowHigh 输出 | +|---|---|---| +| 8k |
|
| +| 16k |
|
| + +## 推理速度:RTF + +| 链路 | Python RTF | +|---|---:| +| 8/16 kHz → 48 kHz | **0.24** | + +20–60 s 音频,1-step flow,BigVGAN 1 s 分块、0.2 s overlap。5 s 短音频因分块/启动开销会略高;C++ 运行时尚未提供。 + +## 数据来源 + +- Open Speech Repository(English / Chinese 8k):http://voiptroubleshooter.com/open_speech/index.html +- Samplelib speech 1m:https://samplelib.com/mp3/sample-speech-1m.mp3 +- 16 kHz 参照:公开人声样例经 48k->16k 降采样。 + +## License + +MIT;FLowHigh 与 BigVGAN 均为 MIT。模型 checkpoint 来自上游/公开镜像,仓库不重复分发训练权重。 diff --git a/assets/time_emb_4.npy b/assets/time_emb_4.npy new file mode 100644 index 0000000000000000000000000000000000000000..089e4af5aa80f5f5af2cfd926c3662bc4655e33d --- /dev/null +++ b/assets/time_emb_4.npy @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06284a683d5610206adac80e4764a61f1d77d8cd4d172376513ad5c83d965f0f +size 16512 diff --git a/config.json b/config.json new file mode 100644 index 0000000000000000000000000000000000000000..9e26dfeeb6e641a33dae4961196235bdb965b21b --- /dev/null +++ b/config.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/models/bigvgan.axmodel b/models/bigvgan.axmodel new file mode 100644 index 0000000000000000000000000000000000000000..8ed9462cb345a01175081e2b645e66b0ea033358 --- /dev/null +++ b/models/bigvgan.axmodel @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fb5f3a130ef732eea8ef9ac9f365e7bab95d34d176f5926f4a3d21db33306b5 +size 20734384 diff --git a/models/flowhigh.axmodel b/models/flowhigh.axmodel new file mode 100644 index 0000000000000000000000000000000000000000..164a0e377a9520aa571318189422936ce307e27e --- /dev/null +++ b/models/flowhigh.axmodel @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ed959fdc9632a961204eb3ea8872395102505db96d42730a8c0e1fb6189bd12 +size 38297185 diff --git a/python/demo_board.py b/python/demo_board.py new file mode 100644 index 0000000000000000000000000000000000000000..855216f4a1e4411666aba3a7d4b2b6d33c388837 --- /dev/null +++ b/python/demo_board.py @@ -0,0 +1,107 @@ +import argparse +import time +from pathlib import Path + +import numpy as np +import soundfile as sf + +from flowhigh_sdk import audio + + +def decode_mel(voc, mel, chunk, overlap): + hop = chunk - overlap + wav = None + for s in range(0, mel.shape[-1], hop): + m = mel[..., s:s + chunk] + if m.shape[-1] < chunk: + m = np.pad(m, ((0, 0), (0, 0), (0, chunk - m.shape[-1])), mode="edge") + c = voc.run(None, {"mel": np.ascontiguousarray(m)})[0][0, 0] + if wav is None: + wav = c + else: + n = min(overlap * 480, len(wav), len(c)) + if n > 0: + fade = np.linspace(0.0, 1.0, n, dtype=np.float32) + wav[-n:] = wav[-n:] * (1.0 - fade) + c[:n] * fade + wav = np.concatenate([wav, c[n:]]) + return wav.astype(np.float32) + + +def main(): + p = argparse.ArgumentParser() + p.add_argument("--input", required=True) + p.add_argument("--output", required=True) + p.add_argument("--models", default="models") + p.add_argument("--steps", type=int, default=1) + p.add_argument("--std", type=float, default=1e-4) + p.add_argument("--seed", type=int, default=0) + p.add_argument("--chunk", type=int, default=100) + p.add_argument("--overlap", type=int, default=20) + p.add_argument("--flow-overlap", type=int, default=50) + p.add_argument("--time-emb", default="assets/time_emb_4.npy") + args = p.parse_args() + + x, sr = sf.read(args.input, always_2d=False) + if x.ndim > 1: + x = x.mean(axis=1) + x = np.asarray(x, dtype=np.float32) + target = int(round(audio.SR / sr * x.size)) + x = audio.resample(x, sr) + peak = float(np.max(np.abs(x))) + if peak > 0: + x = x / peak + cond_wave = x.astype(np.float32) + mel = audio.log_mel(cond_wave)[0].T[None] + frames = 500 + if mel.shape[-1] < frames: + mel = np.pad(mel, ((0, 0), (0, 0), (0, frames - mel.shape[-1])), mode="edge") + total = mel.shape[-1] + if total > frames: + n_chunks = (total - frames + (frames - args.flow_overlap) - 1) // (frames - args.flow_overlap) + 1 + padded = frames + (n_chunks - 1) * (frames - args.flow_overlap) + if padded > total: + mel = np.pad(mel, ((0, 0), (0, 0), (0, padded - total)), mode="edge") + padded_total = mel.shape[-1] + + import axengine + + flow = axengine.InferenceSession(str(Path(args.models) / "flowhigh.axmodel")) + voc = axengine.InferenceSession(str(Path(args.models) / "bigvgan.axmodel")) + emb = np.load(args.time_emb).astype(np.float32) + rng = np.random.RandomState(args.seed) + hop = frames - args.flow_overlap + starts = list(range(0, max(1, padded_total - frames + 1), hop)) + + t0 = time.time() + flow_ms = [] + out = None + for s in starts: + c = mel[..., s:s + frames] + y = c + args.std * rng.randn(*c.shape).astype(np.float32) + for i in range(args.steps): + t1 = time.time() + v = flow.run(None, { + "x": np.ascontiguousarray(y), + "cond": np.ascontiguousarray(c), + "time_emb": np.ascontiguousarray(emb[i]), + })[0] + flow_ms.append((time.time() - t1) * 1000) + y = y + (1.0 / args.steps) * v + wav = decode_mel(voc, y, args.chunk, args.overlap) + if out is None: + out = wav + else: + n = min(args.flow_overlap * 480, len(out), len(wav)) + if n > 0: + fade = np.linspace(0.0, 1.0, n, dtype=np.float32) + out[-n:] = out[-n:] * (1.0 - fade) + wav[:n] * fade + out = np.concatenate([out, wav[n:]]) + out = out[:int(total * 480)] + out = audio.postprocess(out, cond_wave[:len(out)], len(out))[:target] + sf.write(args.output, out, audio.SR, subtype="PCM_16") + dt = time.time() - t0 + print(f"chunks={len(starts)} flow_ms={flow_ms} total_ms={dt*1000:.1f} rtf={dt/(x.size/audio.SR):.4f}") + + +if __name__ == "__main__": + main() diff --git a/python/flowhigh_sdk/__init__.py b/python/flowhigh_sdk/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/python/flowhigh_sdk/audio.py b/python/flowhigh_sdk/audio.py new file mode 100644 index 0000000000000000000000000000000000000000..b7ff48beeb7afb04997355dd673675df772ecb93 --- /dev/null +++ b/python/flowhigh_sdk/audio.py @@ -0,0 +1,138 @@ +import numpy as np +from math import gcd + +SR = 48000 +N_FFT = 2048 +HOP = 480 +N_MELS = 256 +FMIN = 20.0 +FMAX = 24000.0 +LOG_FLOOR = 1e-5 +MAG_EPS = 1e-9 + +_MEL = None +_WIN = None + + +def _hz_to_mel(f): + f = np.asarray(f, dtype=np.float64) + f_sp, min_log_hz = 200.0 / 3.0, 1000.0 + min_log_mel = min_log_hz / f_sp + logstep = np.log(6.4) / 27.0 + mel = np.empty_like(f) + lin = f < min_log_hz + mel[lin] = f[lin] / f_sp + mel[~lin] = min_log_mel + np.log(f[~lin] / min_log_hz) / logstep + return mel + + +def _mel_to_hz(m): + m = np.asarray(m, dtype=np.float64) + f_sp, min_log_hz = 200.0 / 3.0, 1000.0 + min_log_mel = min_log_hz / f_sp + logstep = np.log(6.4) / 27.0 + hz = np.empty_like(m) + lin = m < min_log_mel + hz[lin] = m[lin] * f_sp + hz[~lin] = min_log_hz * np.exp(logstep * (m[~lin] - min_log_mel)) + return hz + + +def mel_filterbank(): + global _MEL + if _MEL is None: + freqs = np.linspace(0.0, SR / 2.0, N_FFT // 2 + 1) + edges = np.linspace(_hz_to_mel([FMIN])[0], _hz_to_mel([FMAX])[0], N_MELS + 2) + hz = _mel_to_hz(edges) + fb = np.zeros((N_MELS, freqs.shape[0]), dtype=np.float32) + for m in range(N_MELS): + left, center, right = hz[m], hz[m + 1], hz[m + 2] + up = (freqs - left) / (center - left) + down = (right - freqs) / (right - center) + fb[m] = np.maximum(0.0, np.minimum(up, down)) * (2.0 / max(1e-8, right - left)) + _MEL = fb + return _MEL + + +def hann(): + global _WIN + if _WIN is None: + _WIN = np.hanning(N_FFT + 1)[:-1].astype(np.float64) + return _WIN + + +def log_mel(audio): + x = np.asarray(audio, dtype=np.float64).reshape(-1) + pad = (N_FFT - HOP) // 2 + x = np.pad(x, (pad, pad), mode="reflect") + frames = 1 + (x.size - N_FFT) // HOP + idx = np.arange(N_FFT)[None, :] + HOP * np.arange(frames)[:, None] + spec = np.fft.rfft(x[idx] * hann(), n=N_FFT, axis=1).T + mag = np.sqrt(spec.real ** 2 + spec.imag ** 2 + MAG_EPS) + mel = np.log(np.clip(mel_filterbank() @ mag, LOG_FLOOR, None)) + return mel.T[None].astype(np.float32) + + +def stft(x, center=True, pad_mode="constant"): + x = np.asarray(x, dtype=np.float64).reshape(-1) + if center: + p = N_FFT // 2 + x = np.pad(x, (p, p), mode=pad_mode) + frames = 1 + (x.size - N_FFT) // HOP + idx = np.arange(N_FFT)[None, :] + HOP * np.arange(frames)[:, None] + return np.fft.rfft(x[idx] * hann(), n=N_FFT, axis=1).T + + +def istft(spec, length=None, center=True): + spec = np.asarray(spec) + frames = np.fft.irfft(spec.T, n=N_FFT, axis=1) * hann() + out_len = N_FFT + HOP * (frames.shape[0] - 1) + ola = np.zeros(out_len, dtype=np.float64) + wsum = np.zeros(out_len, dtype=np.float64) + w2 = hann() ** 2 + for i in range(frames.shape[0]): + s = i * HOP + ola[s:s + N_FFT] += frames[i] + wsum[s:s + N_FFT] += w2 + ola /= np.where(wsum > 1e-11, wsum, 1.0) + if center: + ola = ola[N_FFT // 2:len(ola) - N_FFT // 2] + if length is not None: + if ola.size > length: + ola = ola[:length] + elif ola.size < length: + ola = np.pad(ola, (0, length - ola.size)) + return ola.astype(np.float32) + + +def cutoff_bin(spec): + energy = np.cumsum(np.abs(spec).sum(axis=-1)) + if energy[-1] <= 0: + return 0 + limit = energy[-1] * 0.99 + below = np.nonzero(energy < limit)[0] + return int(below[-1]) + 1 if below.size else 0 + + +def postprocess(pred, src, length): + ps = stft(pred, center=True, pad_mode="constant") + ss = stft(src, center=True, pad_mode="constant") + n = min(ps.shape[-1], ss.shape[-1]) + ps, ss = ps[:, :n], ss[:, :n] + cr = cutoff_bin(ss) + merged = ps.copy() + merged[:cr] = ss[:cr] + out = istft(merged, length=length, center=True) + peak = np.max(np.abs(out)) + if peak > 0: + out = out / peak * 0.99 + return out.astype(np.float32) + + +def resample(x, sr_in, sr_out=SR): + x = np.asarray(x, dtype=np.float32).reshape(-1) + if sr_in == sr_out: + return x + g = gcd(int(sr_out), int(sr_in)) + from scipy.signal import resample_poly + return resample_poly(x, sr_out // g, sr_in // g).astype(np.float32) diff --git a/python/requirements.txt b/python/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..e669475e752d10794f132a778c789fc714ad0924 --- /dev/null +++ b/python/requirements.txt @@ -0,0 +1,3 @@ +numpy +scipy +soundfile diff --git a/reports/quantization.md b/reports/quantization.md new file mode 100644 index 0000000000000000000000000000000000000000..83a58ec9bf51f760953637f9c2a95ba3d658b427 --- /dev/null +++ b/reports/quantization.md @@ -0,0 +1,67 @@ +# FlowHigh AX650 quantization report + +## Target + +- Board: AX650N, NPU3, axengine 2.12.0s, compiler 8.0. +- Flow: U16 activations / S8 weights, 38 MB. +- BigVGAN: U16 activations / S8 weights, 20 MB. +- Input: 8 kHz / 16 kHz -> 48 kHz. +- No denoising. + +## Graph split + +```text +host: resample_poly -> log-mel [1,256,T] -> 1-step flow -> BigVGAN chunks -> STFT merge +NPU: flow velocity (37 MB) + BigVGAN 1 s chunks (20 MB) +``` + +The flow NPU input is channel-first `[1,256,500]`; the wrapper transposes to `[1,500,256]` internally. This is required: Pulsar2 lowers 3D tensors channel-first, and feeding `[1,500,256]` directly makes attention run on the wrong axis. + +## Numerical checks + +| Check | Result | +|---|---| +| Flow ONNX vs PyTorch velocity | max err 1.5e-4 | +| Flow U16/S8 on board vs ONNX | SNR 32.96 dB, corr 0.99977 | +| Flow latency, 5 s | 21 ms (after warmup) | +| BigVGAN ONNX vs PyTorch | max err 8.2e-6 | +| BigVGAN U16/S8 on board vs ONNX, 1 s | SNR 20.55 dB, corr 0.99560 | +| BigVGAN latency, 1 s | ~93 ms | +| BigVGAN chunk overlap | 0.2 s; boundary jump reduced from 0.44 to 0.005 | + +BigVGAN is the sensitive part; its direct waveform SNR is low, but the final speech quality after spectral merging is close to the FP32 pipeline. + +## Full pipeline quality + +VCTK `p232_013`, 48 kHz reference. Board uses 1-step flow with `std=1e-4`, BigVGAN 1 s / 0.2 s overlap. Baseline and board use different RNG seeds, so the PESQ/LSD comparison is indicative; flow and BigVGAN SNR rows are strict same-input comparisons. + +| Input | Pipeline | PESQ-WB | STOI | Mel LSD | +|---|---|---|---:|---:| +| 8 kHz | PyTorch FP32 | 3.872 | 0.9981 | 2.323 | +| 8 kHz | AX650 U16/S8 | **3.876** | **0.9982** | 2.333 | +| 16 kHz | PyTorch FP32 | 4.570 | 1.0000 | 2.315 | +| 16 kHz | AX650 U16/S8 | **4.573** | **1.0000** | 2.302 | + +## Speed + +5 s input, Python/axengine, one flow step: + +| Stage | Time | +|---|---:| +| Flow | 33 ms | +| BigVGAN (6 x 1 s chunks) | 578 ms | +| Host STFT/mel/postprocess | ~600 ms | +| Total | 0.94–1.22 s | +| RTF | 0.19–0.24 | + +The current runtime is Python-only. Moving STFT/postprocess to C++ and using a native flow/vocoder loop is the next optimization; the NPU portion itself is 0.61 s for 5 s. + +## Long audio + +The flow graph is fixed at 500 mel frames (5 s). Longer audio is processed in 5 s chunks with 0.5 s overlap and waveform crossfade; BigVGAN uses 1 s chunks with 0.2 s overlap. The 60 s Samplelib input was processed end-to-end with no boundary clicks above the normal waveform derivative. + +## Limitations + +- The 5 s flow chunk is a hard graph size; longer context would need a different compiled graph. +- No denoising; FLowHigh is BWE only. +- C++ runtime is not included in this first quantization milestone. diff --git a/run_ax650.sh b/run_ax650.sh new file mode 100644 index 0000000000000000000000000000000000000000..a5cedbd3291534346bedfd92027daa0d085ba9ad --- /dev/null +++ b/run_ax650.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -e +cd "$(dirname "$0")" +if [ "$#" -ge 2 ] && [ "${1#-}" = "$1" ]; then + IN="$1"; OUT="$2"; shift 2 + exec python3 python/demo_board.py --models models --steps 1 --std 0.0001 --input "$IN" --output "$OUT" "$@" +fi +exec python3 python/demo_board.py --models models --steps 1 --std 0.0001 "$@" diff --git a/samples/listen/16k/speech_2_input_16k.wav b/samples/listen/16k/speech_2_input_16k.wav new file mode 100644 index 0000000000000000000000000000000000000000..353e1443e30805efcb84065bc6b7dd58c0b508f7 --- /dev/null +++ b/samples/listen/16k/speech_2_input_16k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c7773c82ce75aa5e8a14d5bb53ee5915dbb65f47272ae9f527ac767c7b1f80c +size 163884 diff --git a/samples/listen/16k/speech_3_input_16k.wav b/samples/listen/16k/speech_3_input_16k.wav new file mode 100644 index 0000000000000000000000000000000000000000..2b94eea47a6f989c1dda2ddd3f79d8fa8241cc0d --- /dev/null +++ b/samples/listen/16k/speech_3_input_16k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19cb7158760a383a60f1c2e5de23a780331f492fd5a7ccc63a58cadb8ad2f804 +size 163884 diff --git a/samples/listen/48k_from16k/speech_2_output_48k.wav b/samples/listen/48k_from16k/speech_2_output_48k.wav new file mode 100644 index 0000000000000000000000000000000000000000..c3a2dec7263842f65057474cfdfcbeafe45766de --- /dev/null +++ b/samples/listen/48k_from16k/speech_2_output_48k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9dddb1324a6bd655a1d3e3eebe426ebe7fd1f27cecb5691a8a1c9c65a6900b78 +size 491564 diff --git a/samples/listen/48k_from16k/speech_3_output_48k.wav b/samples/listen/48k_from16k/speech_3_output_48k.wav new file mode 100644 index 0000000000000000000000000000000000000000..e77814a1dabf2b6609fd70bd1c0a834f41f40d26 --- /dev/null +++ b/samples/listen/48k_from16k/speech_3_output_48k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea134e4f9a4c1ce8c683f1b4c8d867614c48fd9c7d86012c5b28f4eac929eba9 +size 491564 diff --git a/samples/listen/48k_from8k/OSR_cn_000_0072_output_48k.wav b/samples/listen/48k_from8k/OSR_cn_000_0072_output_48k.wav new file mode 100644 index 0000000000000000000000000000000000000000..377f382b8c1ebd72f1bb05a7e1e5584f6d4d6247 --- /dev/null +++ b/samples/listen/48k_from8k/OSR_cn_000_0072_output_48k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3aacb425e8d754df060a22409847c89bae4100837eae32326e7d206bcc607afa +size 1916204 diff --git a/samples/listen/48k_from8k/OSR_cn_000_0073_output_48k.wav b/samples/listen/48k_from8k/OSR_cn_000_0073_output_48k.wav new file mode 100644 index 0000000000000000000000000000000000000000..c867fa548fa272dca3d07d9475784a08e1f4ba7f --- /dev/null +++ b/samples/listen/48k_from8k/OSR_cn_000_0073_output_48k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ccd4b0a34f5a6cc92c944410cb2d20a68ccf4a875f3a34ef8597ac2a205b638 +size 2102444 diff --git a/samples/listen/48k_from8k/OSR_cn_000_0074_output_48k.wav b/samples/listen/48k_from8k/OSR_cn_000_0074_output_48k.wav new file mode 100644 index 0000000000000000000000000000000000000000..0f051feefc0e36db695581d6a828b586f242ad81 --- /dev/null +++ b/samples/listen/48k_from8k/OSR_cn_000_0074_output_48k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f34689207317fa1b6d6bbf5cbf9f8214fca395f7883161dea7258e4e3b4a91a7 +size 2207084 diff --git a/samples/listen/48k_from8k/OSR_cn_000_0075_output_48k.wav b/samples/listen/48k_from8k/OSR_cn_000_0075_output_48k.wav new file mode 100644 index 0000000000000000000000000000000000000000..bc2a5b4aa2ea7be15add2a6aaebd6f69ed3f5db5 --- /dev/null +++ b/samples/listen/48k_from8k/OSR_cn_000_0075_output_48k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e5845b5def78204cfae9d3fb4dfa5bf8604bf2f0537ad5abdf2cb7c57b77822 +size 2389484 diff --git a/samples/listen/48k_from8k/OSR_us_000_0010_output_48k.wav b/samples/listen/48k_from8k/OSR_us_000_0010_output_48k.wav new file mode 100644 index 0000000000000000000000000000000000000000..4b2c2dd030c8768cbb637f8770a3e3b78c678241 --- /dev/null +++ b/samples/listen/48k_from8k/OSR_us_000_0010_output_48k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:020b7219f36a61dc11ea0b003a8249ee7de2b8ed4cb4b0a14c27f7250836c18a +size 3227564 diff --git a/samples/listen/48k_from8k/OSR_us_000_0013_output_48k.wav b/samples/listen/48k_from8k/OSR_us_000_0013_output_48k.wav new file mode 100644 index 0000000000000000000000000000000000000000..95724f64674fc8a4f9b5daa79c797a63f7aa2329 --- /dev/null +++ b/samples/listen/48k_from8k/OSR_us_000_0013_output_48k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d23124c3e9a8415a9ca48de6b3c432fb2534f91d660b0ef680a86fdc156aa2c4 +size 3123884 diff --git a/samples/listen/48k_from8k/OSR_us_000_0057_output_48k.wav b/samples/listen/48k_from8k/OSR_us_000_0057_output_48k.wav new file mode 100644 index 0000000000000000000000000000000000000000..7a7ec65d6a56b3b27bf493526fc62b55c6506297 --- /dev/null +++ b/samples/listen/48k_from8k/OSR_us_000_0057_output_48k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11c50ba9a97219286e7e15aaf58043083e871fa36eafdeb0cc571656f821a23a +size 3768044 diff --git a/samples/listen/48k_from8k/OSR_us_000_0059_output_48k.wav b/samples/listen/48k_from8k/OSR_us_000_0059_output_48k.wav new file mode 100644 index 0000000000000000000000000000000000000000..4273c82ab6c70f933af25d06c76ba96b2de6b0bd --- /dev/null +++ b/samples/listen/48k_from8k/OSR_us_000_0059_output_48k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b72a16bda85904b21786ecea508bbe847e1579dc2c34f558284ff765bbd36a2 +size 5348204 diff --git a/samples/listen/48k_from8k/samplelib_speech_1m_output_48k.wav b/samples/listen/48k_from8k/samplelib_speech_1m_output_48k.wav new file mode 100644 index 0000000000000000000000000000000000000000..1f6682c6fd4b653e3c8b5f47ccead6c724b47a2e --- /dev/null +++ b/samples/listen/48k_from8k/samplelib_speech_1m_output_48k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f87bcb7e77799e390f1017231d35931bef3c6d7c1262334c7cc775189a21bdbe +size 5760044 diff --git a/samples/listen/48k_from8k/speech_2_output_48k.wav b/samples/listen/48k_from8k/speech_2_output_48k.wav new file mode 100644 index 0000000000000000000000000000000000000000..778adf4568b7198ef92c74e727f6cd3da789d6a0 --- /dev/null +++ b/samples/listen/48k_from8k/speech_2_output_48k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba2dcda972762f4369839be6776fd77c7291edfd00a7b164ef8ab433963e3641 +size 491564 diff --git a/samples/listen/48k_from8k/speech_3_output_48k.wav b/samples/listen/48k_from8k/speech_3_output_48k.wav new file mode 100644 index 0000000000000000000000000000000000000000..69dc763679153a104ef0bfa70ecc5457dd6d5290 --- /dev/null +++ b/samples/listen/48k_from8k/speech_3_output_48k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6aa796c46e7f7938c242018ba818c97dabedf29cf74c02c298be73658d6ff77b +size 491564 diff --git a/samples/listen/8k/OSR_cn_000_0072_input_8k.wav b/samples/listen/8k/OSR_cn_000_0072_input_8k.wav new file mode 100644 index 0000000000000000000000000000000000000000..4ad8245a0b161d7e1f4708edb00547e526471599 --- /dev/null +++ b/samples/listen/8k/OSR_cn_000_0072_input_8k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7e2e6c7a0476d0286c6b1df92d15ab938888dfecd73efb29e4a0b82740fa761 +size 319526 diff --git a/samples/listen/8k/OSR_cn_000_0073_input_8k.wav b/samples/listen/8k/OSR_cn_000_0073_input_8k.wav new file mode 100644 index 0000000000000000000000000000000000000000..d9f604678c29531e6da10cd01ec12c56dbacc72f --- /dev/null +++ b/samples/listen/8k/OSR_cn_000_0073_input_8k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffacc5400d699ff1b84917308a4f9f0eb996a7957d4ee4bb126c7d3a6ee1e375 +size 350544 diff --git a/samples/listen/8k/OSR_cn_000_0074_input_8k.wav b/samples/listen/8k/OSR_cn_000_0074_input_8k.wav new file mode 100644 index 0000000000000000000000000000000000000000..6980eadd66eca7c3a1f1fe1666ecaf07dc5636c4 --- /dev/null +++ b/samples/listen/8k/OSR_cn_000_0074_input_8k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ef91f9f846a94d5e617fdba65a9acbb1eaffcbbafee50880e92bb857e171c7f +size 367988 diff --git a/samples/listen/8k/OSR_cn_000_0075_input_8k.wav b/samples/listen/8k/OSR_cn_000_0075_input_8k.wav new file mode 100644 index 0000000000000000000000000000000000000000..8db539d69e3eb8502f10a2fc8b0f3d0a731abb70 --- /dev/null +++ b/samples/listen/8k/OSR_cn_000_0075_input_8k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fd3b56518d3aed721b5e3c98c7492796eb85d225b52ee325053d9d595edcb5e +size 398442 diff --git a/samples/listen/8k/OSR_us_000_0010_input_8k.wav b/samples/listen/8k/OSR_us_000_0010_input_8k.wav new file mode 100644 index 0000000000000000000000000000000000000000..16330497f2c409a1d756be93b679cc1f83f12a28 --- /dev/null +++ b/samples/listen/8k/OSR_us_000_0010_input_8k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4bf9becd046d7aedb6d05b6e12347a6294a44f74d263089c636fb0a2b1e6561 +size 538014 diff --git a/samples/listen/8k/OSR_us_000_0013_input_8k.wav b/samples/listen/8k/OSR_us_000_0013_input_8k.wav new file mode 100644 index 0000000000000000000000000000000000000000..4718a0579a61edb02e0dd29da9b531c2d6b656c2 --- /dev/null +++ b/samples/listen/8k/OSR_us_000_0013_input_8k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3af3f5df07da603b7a421a345aad023df28c862ba92f68af360cc8c64c71436e +size 520730 diff --git a/samples/listen/8k/OSR_us_000_0057_input_8k.wav b/samples/listen/8k/OSR_us_000_0057_input_8k.wav new file mode 100644 index 0000000000000000000000000000000000000000..e9703442886db55037b88c2b48db9b915cfb7bbf --- /dev/null +++ b/samples/listen/8k/OSR_us_000_0057_input_8k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebf286a093ca75e7f53b26180c6e54e7f179680b19d57a52f19516dd036381fe +size 628192 diff --git a/samples/listen/8k/OSR_us_000_0059_input_8k.wav b/samples/listen/8k/OSR_us_000_0059_input_8k.wav new file mode 100644 index 0000000000000000000000000000000000000000..75d6392c6dcad25a0347d1932f2ee4197d8f83f4 --- /dev/null +++ b/samples/listen/8k/OSR_us_000_0059_input_8k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84520e52d7f8e7fadbb0d3bfbf18ddf80ff8bd7862d9287a48bfe8060223e554 +size 891442 diff --git a/samples/listen/8k/samplelib_speech_1m_input_8k.wav b/samples/listen/8k/samplelib_speech_1m_input_8k.wav new file mode 100644 index 0000000000000000000000000000000000000000..e9f1b246584f6cac58d264c5d9c8b6d05ac4fce2 --- /dev/null +++ b/samples/listen/8k/samplelib_speech_1m_input_8k.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41fa574399ab8fa2f9263be1d386449f884627d205e72c310233c481cacf9b57 +size 960164 diff --git a/samples/listen/8k/speech_2_input_8k.wav b/samples/listen/8k/speech_2_input_8k.wav new file mode 100644 index 0000000000000000000000000000000000000000..95f5c5bac2bf8a436764c7a8f61eb96575e0de51 Binary files /dev/null and b/samples/listen/8k/speech_2_input_8k.wav differ diff --git a/samples/listen/8k/speech_3_input_8k.wav b/samples/listen/8k/speech_3_input_8k.wav new file mode 100644 index 0000000000000000000000000000000000000000..4a0ef74f1ce2311055b356fc67d54a3c8ce9b1d2 Binary files /dev/null and b/samples/listen/8k/speech_3_input_8k.wav differ diff --git a/samples/listen/spectrograms/OSR_cn_000_0072_input_8k_spec.png b/samples/listen/spectrograms/OSR_cn_000_0072_input_8k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..8e12cebdb3930e95e3bb02ea923f4b2bb3dfaa96 --- /dev/null +++ b/samples/listen/spectrograms/OSR_cn_000_0072_input_8k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af4344a794278809216c8d2cd6b4b4f16ee5e6c1a8c22d70e709759ad1f9157b +size 749918 diff --git a/samples/listen/spectrograms/OSR_cn_000_0072_output_48k_spec.png b/samples/listen/spectrograms/OSR_cn_000_0072_output_48k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..ebd059d434b94a343b820326e4deebba205fe5a8 --- /dev/null +++ b/samples/listen/spectrograms/OSR_cn_000_0072_output_48k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20c8a89640cd98c9cb4ee5f8034298a07f81e6f3cdb35e5b3c1066799b12b539 +size 803398 diff --git a/samples/listen/spectrograms/OSR_cn_000_0073_input_8k_spec.png b/samples/listen/spectrograms/OSR_cn_000_0073_input_8k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..a531df69c788c2bd6ffbfada55b2b1347fa56ff9 --- /dev/null +++ b/samples/listen/spectrograms/OSR_cn_000_0073_input_8k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09d9dc8d700f57565043846656f19121dfd45ffdfb60b76b38460dac1310d437 +size 786860 diff --git a/samples/listen/spectrograms/OSR_cn_000_0073_output_48k_spec.png b/samples/listen/spectrograms/OSR_cn_000_0073_output_48k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..f80c4241dbf7597d3268c42e225f01f6db3f8a19 --- /dev/null +++ b/samples/listen/spectrograms/OSR_cn_000_0073_output_48k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:534492d17c0d2e4d9c87cbc2dfbff885b74c04a38405fd4a051332b0e2ab044a +size 864997 diff --git a/samples/listen/spectrograms/OSR_cn_000_0074_input_8k_spec.png b/samples/listen/spectrograms/OSR_cn_000_0074_input_8k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..4b4b2f1df88c8d8d1d197b58cba3c12d9ea3011a --- /dev/null +++ b/samples/listen/spectrograms/OSR_cn_000_0074_input_8k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c002a33d997213a67115778bffbfa9faa179e7c73917079f948ae7351420813 +size 784331 diff --git a/samples/listen/spectrograms/OSR_cn_000_0074_output_48k_spec.png b/samples/listen/spectrograms/OSR_cn_000_0074_output_48k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..c82b1a7076cda74226aa515e4c397651823dde59 --- /dev/null +++ b/samples/listen/spectrograms/OSR_cn_000_0074_output_48k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cd9536c5cb81466eed57ff0b4b3b8e0f92b6bc240e0d9f4cfd85cbd50d2dd37 +size 703632 diff --git a/samples/listen/spectrograms/OSR_cn_000_0075_input_8k_spec.png b/samples/listen/spectrograms/OSR_cn_000_0075_input_8k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..14037291fa44e19d37afe12744f9fc0fdac670f9 --- /dev/null +++ b/samples/listen/spectrograms/OSR_cn_000_0075_input_8k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74c5148ed9c578f84de95a6d5b660bc46612736470fc196f6f131a3aea6e423f +size 765049 diff --git a/samples/listen/spectrograms/OSR_cn_000_0075_output_48k_spec.png b/samples/listen/spectrograms/OSR_cn_000_0075_output_48k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..1fb283e8fc93be11f49ce73d5335845b125a1447 --- /dev/null +++ b/samples/listen/spectrograms/OSR_cn_000_0075_output_48k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a12fdd53869c559c273179ae58265e65b327ce1ea3011a5e4f526ef6fe72f6bd +size 716338 diff --git a/samples/listen/spectrograms/OSR_us_000_0010_input_8k_spec.png b/samples/listen/spectrograms/OSR_us_000_0010_input_8k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..1566cca904cf21ace01ac6a9c50e6438072fc758 --- /dev/null +++ b/samples/listen/spectrograms/OSR_us_000_0010_input_8k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b733a0a5716c4d8e464be256fd28c44ce02d7a9c23c07d283acb850dc5faec14 +size 812271 diff --git a/samples/listen/spectrograms/OSR_us_000_0010_output_48k_spec.png b/samples/listen/spectrograms/OSR_us_000_0010_output_48k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..1079e888212fac27c21b946f80bc108b00eeae77 --- /dev/null +++ b/samples/listen/spectrograms/OSR_us_000_0010_output_48k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac09d801ed20f3cce08d40056ef963c8e07231b1b5bfac89c62b6a2dd7f6a947 +size 826157 diff --git a/samples/listen/spectrograms/OSR_us_000_0013_input_8k_spec.png b/samples/listen/spectrograms/OSR_us_000_0013_input_8k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..7a8edec5e357a757f9652231b2af6d8c74864cfb --- /dev/null +++ b/samples/listen/spectrograms/OSR_us_000_0013_input_8k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32bceb0029bd981c761198dd3fb941229d3afaba4cbc94a58da586b79572197c +size 787741 diff --git a/samples/listen/spectrograms/OSR_us_000_0013_output_48k_spec.png b/samples/listen/spectrograms/OSR_us_000_0013_output_48k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..10352eac6e198b597ba2640f7037b71e6e2f9316 --- /dev/null +++ b/samples/listen/spectrograms/OSR_us_000_0013_output_48k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66a07296bc3b4ab246e3ab2f19e5006720153ca1e9e9ce3d910dd778792fc707 +size 823177 diff --git a/samples/listen/spectrograms/OSR_us_000_0057_input_8k_spec.png b/samples/listen/spectrograms/OSR_us_000_0057_input_8k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..c3433e30d016f368fa848945e70ab7a0fba984bc --- /dev/null +++ b/samples/listen/spectrograms/OSR_us_000_0057_input_8k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d4c0dadee1a5d51e7f3aa5970e3b898bfd6f65fa8a92a6226e80d138c690246 +size 916219 diff --git a/samples/listen/spectrograms/OSR_us_000_0057_output_48k_spec.png b/samples/listen/spectrograms/OSR_us_000_0057_output_48k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..ca4c6150d832439bb9670643a034fbb890429981 --- /dev/null +++ b/samples/listen/spectrograms/OSR_us_000_0057_output_48k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9a7f2ddc501ac4719fd9bc4195ace019ca06386e9fa8aa2af85a4f4554c149c +size 728008 diff --git a/samples/listen/spectrograms/OSR_us_000_0059_input_8k_spec.png b/samples/listen/spectrograms/OSR_us_000_0059_input_8k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..93a2fd438bb950542212b173547e19b26be5534c --- /dev/null +++ b/samples/listen/spectrograms/OSR_us_000_0059_input_8k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:881be86a949525b331a92c1cf05dd5f01b2ceff93307a2eccddc802b81b0ad4e +size 937556 diff --git a/samples/listen/spectrograms/OSR_us_000_0059_output_48k_spec.png b/samples/listen/spectrograms/OSR_us_000_0059_output_48k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..82766dc4653bb57e07d3c41bf3df10629e747e1b --- /dev/null +++ b/samples/listen/spectrograms/OSR_us_000_0059_output_48k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9dc63482d90a31b2791422fd0df1526ca38510b144f66d3071577b62239e1a9d +size 581897 diff --git a/samples/listen/spectrograms/samplelib_speech_1m_input_8k_spec.png b/samples/listen/spectrograms/samplelib_speech_1m_input_8k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..2e26f56c2782843929ea8b064b340a72de676013 --- /dev/null +++ b/samples/listen/spectrograms/samplelib_speech_1m_input_8k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ec146ffdceb34e157b93622c509176d53bdf6de8c40731c1578b4ae6f3b884f +size 605830 diff --git a/samples/listen/spectrograms/samplelib_speech_1m_output_48k_spec.png b/samples/listen/spectrograms/samplelib_speech_1m_output_48k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..3338d4414891e7c33d2bd62b6b548854a2e66c03 --- /dev/null +++ b/samples/listen/spectrograms/samplelib_speech_1m_output_48k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:025fcd13709c2c7162e9c45b8620f90ef25d576c75a2474acbb91f50a6beb7d8 +size 877592 diff --git a/samples/listen/spectrograms/speech_2_input_16k_spec.png b/samples/listen/spectrograms/speech_2_input_16k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..62c4483641180a589d78c42a0e2852ea5d267ada --- /dev/null +++ b/samples/listen/spectrograms/speech_2_input_16k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fe0c76de28daf1446d37a072fb08a304875c53b34b134218ce705739a4e3130 +size 513272 diff --git a/samples/listen/spectrograms/speech_2_input_8k.png b/samples/listen/spectrograms/speech_2_input_8k.png new file mode 100644 index 0000000000000000000000000000000000000000..12f4e97031d259eacc6d2ee1644138f916e8aea1 --- /dev/null +++ b/samples/listen/spectrograms/speech_2_input_8k.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24a615f5cdbbfc93e1043efc9061d515028509ed024316a6b32a16f215c280f9 +size 322997 diff --git a/samples/listen/spectrograms/speech_2_input_8k_spec.png b/samples/listen/spectrograms/speech_2_input_8k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..f8e106442197e2b8696c9ca889fd7f49f49eaf41 --- /dev/null +++ b/samples/listen/spectrograms/speech_2_input_8k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aded11b5c54ee45609d7efe4d544faeb819b3fb1a8268bd334afea817c9d42ce +size 294149 diff --git a/samples/listen/spectrograms/speech_2_output_16k_48k_spec.png b/samples/listen/spectrograms/speech_2_output_16k_48k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..fde0094f23b736df0d5cccddbedcb9ed81832ec7 --- /dev/null +++ b/samples/listen/spectrograms/speech_2_output_16k_48k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b5ef76d6558a9fba9d858a0cc6e90365813dcc519efe1b77a402b6af1f9adcc +size 528563 diff --git a/samples/listen/spectrograms/speech_2_output_8k_48k.png b/samples/listen/spectrograms/speech_2_output_8k_48k.png new file mode 100644 index 0000000000000000000000000000000000000000..34d690a132c81674a08d44f6b494535d6e97941b --- /dev/null +++ b/samples/listen/spectrograms/speech_2_output_8k_48k.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:308a3dff8a20af7ee5b0531f0c5b82fb20df4a31757d74e053cef3e3b260f92d +size 587469 diff --git a/samples/listen/spectrograms/speech_2_output_8k_48k_spec.png b/samples/listen/spectrograms/speech_2_output_8k_48k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3d8cb5662732ede1f681a3b2369001b492ac9e --- /dev/null +++ b/samples/listen/spectrograms/speech_2_output_8k_48k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83cfca42a4eea6cc198c23f2b0d01e96953869176f09a9d06020c8f4436b9536 +size 518198 diff --git a/samples/listen/spectrograms/speech_3_input_16k_spec.png b/samples/listen/spectrograms/speech_3_input_16k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..507b26cd0f7b36f9795fa043c9041c111fde34ef --- /dev/null +++ b/samples/listen/spectrograms/speech_3_input_16k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae083843e8a4e6eeee9bf953706257d5d20d7bf0bee6049f993315f127d7fc7c +size 412593 diff --git a/samples/listen/spectrograms/speech_3_input_8k_spec.png b/samples/listen/spectrograms/speech_3_input_8k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..65711894fb979dc49b470d6abb2ee9e1f563af03 --- /dev/null +++ b/samples/listen/spectrograms/speech_3_input_8k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c1b3a6440649389d4bbe62efe0ca725e4561d42e4da4b72531d707824f45b8c +size 337617 diff --git a/samples/listen/spectrograms/speech_3_output_16k_48k_spec.png b/samples/listen/spectrograms/speech_3_output_16k_48k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..6df8921245e10ea9bc09a3cbf9452cd0613f2e6a --- /dev/null +++ b/samples/listen/spectrograms/speech_3_output_16k_48k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a666821d253e97a08da404fdabefa2bbc236ca74c9c3404853135b33af941b5 +size 352626 diff --git a/samples/listen/spectrograms/speech_3_output_8k_48k_spec.png b/samples/listen/spectrograms/speech_3_output_8k_48k_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8e44eefac26b1bf1698d051aae5abcee80a097 --- /dev/null +++ b/samples/listen/spectrograms/speech_3_output_8k_48k_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d230f1396250d3fd5590752685f81f3427856bbb9db9d1a514b6ecdd9063b42c +size 340832