2024-03-03 20:00:36 +08:00
// Copyright (c) 2023-2024 Xiaomi Corporation (authors: Fangjun Kuang)
2023-11-21 23:20:08 +08:00
const sherpa _onnx = require ( 'sherpa-onnx' ) ;
function createOfflineTts ( ) {
2024-03-03 20:00:36 +08:00
let offlineTtsVitsModelConfig = {
model : './vits-piper-en_US-amy-low/en_US-amy-low.onnx' ,
lexicon : '' ,
tokens : './vits-piper-en_US-amy-low/tokens.txt' ,
dataDir : './vits-piper-en_US-amy-low/espeak-ng-data' ,
2024-04-25 12:28:31 +08:00
dictDir : '' ,
2024-03-03 20:00:36 +08:00
noiseScale : 0.667 ,
noiseScaleW : 0.8 ,
lengthScale : 1.0 ,
} ;
let offlineTtsModelConfig = {
offlineTtsVitsModelConfig : offlineTtsVitsModelConfig ,
numThreads : 1 ,
debug : 1 ,
provider : 'cpu' ,
} ;
2023-11-21 23:20:08 +08:00
2024-03-03 20:00:36 +08:00
let offlineTtsConfig = {
offlineTtsModelConfig : offlineTtsModelConfig ,
ruleFsts : '' ,
2024-04-08 11:01:30 +08:00
ruleFars : '' ,
2024-03-03 20:00:36 +08:00
maxNumSentences : 1 ,
} ;
2023-11-21 23:20:08 +08:00
2024-03-03 20:00:36 +08:00
return sherpa _onnx . createOfflineTts ( offlineTtsConfig ) ;
2023-11-21 23:20:08 +08:00
}
2024-03-03 20:00:36 +08:00
2023-11-21 23:20:08 +08:00
const tts = createOfflineTts ( ) ;
2023-11-30 23:57:43 +08:00
const speakerId = 0 ;
2023-11-21 23:20:08 +08:00
const speed = 1.0 ;
2024-03-03 20:00:36 +08:00
const audio = tts . generate ( {
text :
'“Today as always, men fall into two groups: slaves and free men. Whoever does not have two-thirds of his day for himself, is a slave, whatever he may be: a statesman, a businessman, an official, or a scholar.”' ,
sid : speakerId ,
speed : speed
} ) ;
tts . save ( './test-en.wav' , audio ) ;
2023-11-21 23:20:08 +08:00
console . log ( 'Saved to test-en.wav successfully.' ) ;
2024-03-03 20:00:36 +08:00
2023-11-21 23:20:08 +08:00
tts . free ( ) ;