Views
No views yet
npm i @huggingface/transformers1import { pipeline } from '@huggingface/transformers';
2
3// Create a text-to-speech pipeline
4const synthesizer = await pipeline('text-to-speech', 'Xenova/speecht5_tts', { dtype: 'fp32' }); // Options: "fp32", "fp16", "q8", "q4"
5
6// Generate speech
7const speaker_embeddings = 'https://huggingface.co/datasets/Xenova/transformers.js-docs/resolve/main/speaker_embeddings.bin';
8const result = await synthesizer('Hello, my dog is cute', { speaker_embeddings });
9console.log(result);
10// {
11// audio: Float32Array(26112) [-0.00005657337896991521, 0.00020583874720614403, ...],
12// sampling_rate: 16000
13// }1import wavefile from 'wavefile';
2import fs from 'fs';
3
4const wav = new wavefile.WaveFile();
5wav.fromScratch(1, result.sampling_rate, '32f', result.audio);
6fs.writeFileSync('result.wav', wav.toBuffer());1import { AutoTokenizer, AutoProcessor, SpeechT5ForTextToSpeech, SpeechT5HifiGan, Tensor } from '@huggingface/transformers';
2
3// Load the tokenizer and processor
4const tokenizer = await AutoTokenizer.from_pretrained('Xenova/speecht5_tts');
5const processor = await AutoProcessor.from_pretrained('Xenova/speecht5_tts');
6
7// Load the models
8// NOTE: We use the unquantized versions as they are more accurate
9const model = await SpeechT5ForTextToSpeech.from_pretrained('Xenova/speecht5_tts', { dtype: 'fp32' }); // Options: "fp32", "fp16", "q8", "q4"
10const vocoder = await SpeechT5HifiGan.from_pretrained('Xenova/speecht5_hifigan', { dtype: 'fp32' }); // Options: "fp32", "fp16", "q8", "q4"
11
12// Load speaker embeddings from URL
13const speaker_embeddings_data = new Float32Array(
14 await (await fetch('https://huggingface.co/datasets/Xenova/transformers.js-docs/resolve/main/speaker_embeddings.bin')).arrayBuffer()
15);
16const speaker_embeddings = new Tensor(
17 'float32',
18 speaker_embeddings_data,
19 [1, speaker_embeddings_data.length]
20)
21
22// Run tokenization
23const { input_ids } = tokenizer('Hello, my dog is cute');
24
25// Generate waveform
26const { waveform } = await model.generate_speech(input_ids, speaker_embeddings, { vocoder });
27console.log(waveform)
28// Tensor {
29// dims: [ 26112 ],
30// type: 'float32',
31// size: 26112,
32// data: Float32Array(26112) [ -0.00043630177970044315, -0.00018082228780258447, ... ],
33// }1// Write to file (Node.js)
2import wavefile from 'wavefile';
3import fs from 'fs';
4
5const wav = new wavefile.WaveFile();
6wav.fromScratch(1, processor.feature_extractor.config.sampling_rate, '32f', waveform.data);
7fs.writeFileSync('out.wav', wav.toBuffer());onnx).