From 43483bb394e7b8b1fbc75be8ce63d5307bedd109 Mon Sep 17 00:00:00 2001 From: enhuiz Date: Wed, 11 Jan 2023 23:51:56 +0800 Subject: [PATCH] Add audio decoding --- README.md | 2 +- data/test/test.ar.recon.wav | Bin 0 -> 95404 bytes vall_e/ar/__init__.py | 0 vall_e/ar/model.py | 25 ++++++++++++++++++------- vall_e/emb/qnt.py | 12 ++++++++++++ 5 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 data/test/test.ar.recon.wav create mode 100644 vall_e/ar/__init__.py diff --git a/README.md b/README.md index 7f991b8..bb12cd9 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,6 @@ An unofficial (toy) implementation of VALL-E, based on the [encodec](https://git ## TODO - [x] AR model for the first quantizer. -- [ ] Built-in decode. +- [x] Audio decoding from tokens. - [ ] NAR model for the rest quantizers. - [ ] Trainers for both models. diff --git a/data/test/test.ar.recon.wav b/data/test/test.ar.recon.wav new file mode 100644 index 0000000000000000000000000000000000000000..87cf1d8a9916b9a807b020174843707006d36ed3 GIT binary patch literal 95404 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 literal 0 HcmV?d00001 diff --git a/vall_e/ar/__init__.py b/vall_e/ar/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vall_e/ar/model.py b/vall_e/ar/model.py index f017ba9..36dcbd1 100644 --- a/vall_e/ar/model.py +++ b/vall_e/ar/model.py @@ -279,13 +279,16 @@ class VALLEAR(nn.Module): return logits @staticmethod - def _prune(l: list[int], stop_token: int | None): + def _prune(l: Tensor, stop_token: int | None): if stop_token is None: return l - n = next((i for i, x in enumerate(l) if x == stop_token), None) - if n is not None: - l = l[:n] - return l + + indices = (l == stop_token).nonzero() + + if len(indices) == 0: + return l + + return l[: indices[0].item()] def generate( self, @@ -313,11 +316,13 @@ class VALLEAR(nn.Module): output_list[i] = torch.cat([output_list[i], oi[None]]) if all(stopped): break - pruned = [self._prune(o.tolist(), stop_token) for o in output_list] + pruned = [self._prune(o, stop_token) for o in output_list] return pruned def example_usage(): + import soundfile + device = "cuda" test_qnt = torch.load("data/test/test.qnt.pt")[0, 0].to(device) @@ -348,7 +353,7 @@ def example_usage(): stop_token=eoq, ) - print(test_qnt) + print(out) optimizer = torch.optim.Adam(model.parameters(), lr=1e-4) @@ -372,6 +377,12 @@ def example_usage(): print(out) + from ..emb.qnt import decode + + codes = rearrange(out[1], "t -> 1 1 t") + wavs, sr = decode(codes) + soundfile.write("data/test/test.ar.recon.wav", wavs.cpu()[0, 0], sr) + if __name__ == "__main__": example_usage() diff --git a/vall_e/emb/qnt.py b/vall_e/emb/qnt.py index 128c8bf..1cba87e 100644 --- a/vall_e/emb/qnt.py +++ b/vall_e/emb/qnt.py @@ -6,6 +6,7 @@ import torch import torchaudio from encodec import EncodecModel from encodec.utils import convert_audio +from torch import Tensor from tqdm import tqdm @@ -18,6 +19,17 @@ def _load_model(device="cuda"): return model +@torch.inference_mode() +def decode(codes: Tensor, device="cuda"): + """ + Args: + codes: (b k t) + """ + assert codes.dim() == 3 + model = _load_model(device) + return model.decode([(codes, None)]), model.sample_rate + + def replace_file_extension(path, suffix): return (path.parent / path.name.split(".")[0]).with_suffix(suffix)