Views
No views yet
1from transformers import AutoTokenizer, AutoModelForCausalLM
2import torch
3
4model = AutoModelForCausalLM.from_pretrained(
5 "timBoML/2cent-tts-60m"
6)
7tokenizer = AutoTokenizer.from_pretrained("timBoML/2cent-tts-60m")
8
9phones = "həlˈoʊ aɪɐm tˈuː sˈɛnt tˌiːtˌiːˈɛs" # using espeak-ng
10
11input_ids = (
12 tokenizer.encode(phones, add_special_tokens=False)
13 + tokenizer.encode("<s>", add_special_tokens=False)
14 + [4136]
15)
16
17input_ids = torch.tensor(input_ids).unsqueeze(0)
18
19generated_ids = model.generate(
20 input_ids=input_ids,
21 max_new_tokens=2048,
22
23 )
24
25generated_ids = generated_ids.squeeze()
26
27tokens = generated_ids[input_ids.shape[1]:]
28
29first_audio_token = tokenizer.encode("<audio_0>")[-1]
30
31tokens = tokens - first_audio_token
32
33
34import locale
35import torchaudio.transforms as T
36import os
37import torch
38from snac import SNAC
39locale.getpreferredencoding = lambda: "UTF-8"
40
41snac_model = SNAC.from_pretrained("hubertsiuzdak/snac_24khz")
42
43def redistribute_codes(code_list):
44 layer_1 = []
45 layer_2 = []
46 layer_3 = []
47 for i in range((len(code_list)+1)//7):
48 layer_1.append(code_list[7*i])
49 layer_2.append(code_list[7*i+1])
50 layer_3.append(code_list[7*i+2])
51 layer_3.append(code_list[7*i+3])
52 layer_2.append(code_list[7*i+4])
53 layer_3.append(code_list[7*i+5])
54 layer_3.append(code_list[7*i+6])
55 codes = [torch.tensor(layer_1).unsqueeze(0),
56 torch.tensor(layer_2).unsqueeze(0),
57 torch.tensor(layer_3).unsqueeze(0)]
58 audio_hat = snac_model.decode(codes)
59 return audio_hat
60
61sample = redistribute_codes(tokens)
62
63from IPython.display import Audio, display
64display(Audio(sample.detach().squeeze().to("cpu").numpy(), rate=24000))