Views
No views yet
novateur/WavTokenizer-large-unify-40token (wavtokenizer_large_unify_600_24k.ckpt). The conversion is verified
bit-exact on encoding and within 1e-4 on decoded waveforms against the original implementation.1import torch
2from datasets import Audio, load_dataset
3from transformers import AutoFeatureExtractor, WavTokenizerModel
4
5model = WavTokenizerModel.from_pretrained("swiss-ai/wavtokenizer-large-unify-40token")
6feature_extractor = AutoFeatureExtractor.from_pretrained("swiss-ai/wavtokenizer-large-unify-40token")
7
8dataset = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
9dataset = dataset.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate))
10audio = dataset[0]["audio"]["array"]
11
12inputs = feature_extractor(audio=audio, sampling_rate=feature_extractor.sampling_rate, return_tensors="pt")
13with torch.no_grad():
14 audio_codes = model.encode(inputs["input_values"]).audio_codes # (batch, 1, ceil(samples / 600))
15 reconstruction = model.decode(audio_codes).audio_values[!WARNING] Run the model infloat32, the default and the only precision used by the original implementation. As with any codec based on nearest-neighbour vector quantization, code assignment is an argmin over codebook distances: half precision (bfloat16/float16) perturbs the embeddings enough to flip codes near decision boundaries, so tokenization is not reproducible across precisions. Decoded audio is always returned infloat32(the inverse STFT head upcasts internally).
| Checkpoint | Domain | Rate | Hop | Original release |
|---|---|---|---|---|
| wavtokenizer-small-speech-40token | speech | 40/s | 600 | novateur/WavTokenizer |
| wavtokenizer-small-speech-75token | speech | 75/s | 320 | novateur/WavTokenizer |
| wavtokenizer-medium-speech-75token | speech | 75/s | 320 | novateur/WavTokenizer-medium-speech-75token |
| wavtokenizer-medium-speech-75token-v2 | speech | 75/s | 320 | novateur/WavTokenizer-medium-speech-75token |
| wavtokenizer-medium-music-audio-75token | music/audio | 75/s | 320 | novateur/WavTokenizer-medium-music-audio-75token |
| wavtokenizer-medium-music-audio-75token-v2 | music/audio | 75/s | 320 | novateur/WavTokenizer-medium-music-audio-75token |
| wavtokenizer-large-unify-40token (this repo) | unified | 40/s | 600 | novateur/WavTokenizer-large-unify-40token |
| wavtokenizer-large-speech-75token-v2 | speech | 75/s | 320 | novateur/WavTokenizer-large-speech-75token |
1@article{ji2024wavtokenizer,
2 title={Wavtokenizer: an efficient acoustic discrete codec tokenizer for audio language modeling},
3 author={Ji, Shengpeng and Jiang, Ziyue and Wang, Wen and Chen, Yifu and Fang, Minghui and Zuo, Jialong and Yang, Qian and Cheng, Xize and Wang, Zehan and Li, Ruiqi and others},
4 journal={arXiv preprint arXiv:2408.16532},
5 year={2024}
6}
7
8@article{ji2024language,
9 title={Language-codec: Reducing the gaps between discrete codec representation and speech language models},
10 author={Ji, Shengpeng and Fang, Minghui and Jiang, Ziyue and Huang, Rongjie and Zuo, Jialung and Wang, Shulei and Zhao, Zhou},
11 journal={arXiv preprint arXiv:2402.12208},
12 year={2024}
13}