Views
No views yet
1from datasets import load_dataset, Audio
2from transformers import VocosModel, VocosProcessor
3from scipy.io.wavfile import write as write_wav
4
5# can be chosen from [1.5, 3, 6, 12]
6bandwidth = 6.0
7
8# load model and processor
9model_id = "hf-audio/vocos-encodec-24khz"
10processor = VocosProcessor.from_pretrained(model_id)
11model = VocosModel.from_pretrained(model_id, device_map="auto")
12sampling_rate = processor.feature_extractor.sampling_rate
13
14# load audio sample
15ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
16ds = ds.cast_column("audio", Audio(sampling_rate=sampling_rate))
17audio = ds[0]["audio"]["array"]
18
19inputs = processor(audio=audio, bandwidth=bandwidth, sampling_rate=sampling_rate).to(model.device)
20print(inputs.input_features.shape)
21# -- (batch, codes, frame): [1, 128, 440]
22outputs = model(**inputs)
23audio = outputs.audio
24print(audio.shape)
25# -- (batch, time): [1, 140800]
26
27# save audio to file
28write_wav("vocos_encodec.wav", sampling_rate, audio[0].detach().cpu().numpy())VocosProcessor and VocosModel:1from transformers import VocosModel, VocosProcessor, BarkProcessor, BarkModel
2from transformers.models.bark.generation_configuration_bark import BarkSemanticGenerationConfig, BarkCoarseGenerationConfig, BarkFineGenerationConfig
3from scipy.io.wavfile import write as write_wav
4
5bandwidth = 6.0
6
7# load the Bark model and processor
8bark_id = "suno/bark-small"
9bark_processor = BarkProcessor.from_pretrained(bark_id)
10bark = BarkModel.from_pretrained(bark_id, device_map="auto")
11
12text_prompt = "We've been messing around with this new model called Vocos."
13bark_inputs = bark_processor(text_prompt, return_tensors="pt").to(bark.device)
14
15# building generation configs for each stage
16semantic_generation_config = BarkSemanticGenerationConfig(**bark.generation_config.semantic_config)
17coarse_generation_config = BarkCoarseGenerationConfig(**bark.generation_config.coarse_acoustics_config)
18fine_generation_config = BarkFineGenerationConfig(**bark.generation_config.fine_acoustics_config)
19
20# generating the RVQ codes
21semantic_tokens = bark.semantic.generate(
22 **bark_inputs,
23 semantic_generation_config=semantic_generation_config)
24coarse_tokens = bark.coarse_acoustics.generate(
25 semantic_tokens,
26 semantic_generation_config=semantic_generation_config,
27 coarse_generation_config=coarse_generation_config,
28 codebook_size=bark.generation_config.codebook_size)
29fine_tokens = bark.fine_acoustics.generate(
30 coarse_tokens,
31 semantic_generation_config=semantic_generation_config,
32 coarse_generation_config=coarse_generation_config,
33 fine_generation_config=fine_generation_config,
34 codebook_size=bark.generation_config.codebook_size)
35
36codes = fine_tokens.squeeze(0)
37# -- `codes` shape (8 codebooks, * frames)
38
39# Reconstruct audio with Vocos from codes
40vocos_id = "hf-audio/vocos-encodec-24khz"
41processor = VocosProcessor.from_pretrained(vocos_id)
42vocos_model = VocosModel.from_pretrained(vocos_id, device_map="auto")
43sampling_rate = processor.feature_extractor.sampling_rate
44
45# generate audio
46inputs = processor(codes=codes.to("cpu"), bandwidth=bandwidth).to(vocos_model.device)
47audio = vocos_model(**inputs).audio
48
49# save audio to file
50write_wav("vocos_bark.wav", sampling_rate, audio[0].detach().cpu().numpy())padding_mask output VocosProcessor can be used to get equivalent outputs as single-file processing.1from datasets import Audio, load_dataset
2from scipy.io.wavfile import write as write_wav
3from transformers import VocosModel, VocosProcessor
4
5
6n_audio = 2 # number of audio samples to process in a batch
7bandwidth = 12 # can be chosen from [1.5, 3, 6, 12]
8
9# load model and processor
10model_id = "hf-audio/vocos-encodec-24khz"
11processor = VocosProcessor.from_pretrained(model_id)
12model = VocosModel.from_pretrained(model_id, device_map="auto")
13sampling_rate = processor.feature_extractor.sampling_rate
14
15# load audio sample
16ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
17ds = ds.cast_column("audio", Audio(sampling_rate=sampling_rate))
18audio = [audio_sample["array"] for audio_sample in ds[-n_audio:]["audio"]]
19print(f"Input audio shape: {[_sample.shape for _sample in audio]}")
20# Input audio shape: [(170760,), (107520,)]
21
22# prepare batch
23inputs = processor(audio=audio, bandwidth=bandwidth, sampling_rate=sampling_rate, device=model.device)
24print(inputs.input_features.shape)
25# torch.Size([2, 128, 534])
26
27# apply model
28outputs = model(**inputs)
29audio_vocos = outputs.audio
30print(audio_vocos.shape)
31# torch.Size([2, 170880])
32
33# save audio to file
34for i in range(n_audio):
35 # remove padding
36 padding_mask = inputs.padding_mask[i].bool()
37 valid_audio = audio_vocos[i][padding_mask].detach().cpu().numpy()
38 print(f"Output audio shape {i}: {valid_audio.shape}")
39 # Output audio shape 0: (170760,)
40 # Output audio shape 1: (107520,)
41 write_wav(f"vocos_encodec_{i}.wav", sampling_rate, valid_audio)
42
43# save original audio to file
44for i in range(n_audio):
45 write_wav(f"original_{i}.wav", sampling_rate, audio[i])
46