2 Misterwang 1小时前 39次点击
发之前先交代几件事情。
由于 ES五语法的局限性,这里所用的变量关键字都是 var,而不是 let。let 需要在 ES六语法体系下才能使用。
拿到代码以后,可以在自己的 RIghno 环境里去跑一跑,你会得到意想不到的惊喜。不过在跑之前需要把所有的宿主参数都改掉,因为你的宿主不一定是ttsrv,所以你不能使用宿主提供的 API 得改掉。
废话就不多说了,直接看代码。
js
getAudio:function(text, locale, voice, rate, volume, pitch){
var N=parseInt(ttsrv.tts.data[\voice\ || voice || \0\ if(isNaN(N) || N<=0){
if(c && c.length>0) N=parseInt(c[0].id) || 0;
}
logger.w(\acgn getAudio voice=\+voice+\ dataVoice=\+ttsrv.tts.data[\voice\+\ voice_id=\+N);
if(!text || text.length===0) throw \文本为空\ var O=ttsrv.tts.data[\format\ || \mp3\ var P=ttsrv.tts.data[\to_lang\ || \ZH\ var Q=parseInt(ttsrv.tts.data[\auto_translate\ || \0\ var R=parseFloat(ttsrv.tts.data[\rate\ || 1.0);
var S=parseFloat(ttsrv.tts.data[\pitch\ || 0);
var T=parseFloat(ttsrv.tts.data[\volume\ || 0);
var U=parseInt(ttsrv.tts.data[\emotion\ || \0\ if(b) A();
var V=B();
var W={
voice_id:N,
text:text,
format:O,
to_lang:P,
auto_translate:Q,
voice_speed:\0%\ speed_factor:R,
pitch_factor:S,
volume_change_dB:T,
rate:\1.0\ client_ip:\ACGN\ emotion:U
};
var X=ttsrv.httpPost(a+\tts\ JSON.stringify(W), V);
if(X.code()===200){
var Y;
try{
Y=JSON.parse(X.body().string());
}catch(err){
throw \解析响应失败: \err;
}
if(Y.code===200){
var downloadUrl;
if(Y.url && Y.port && Y.voice_path){
var base=Y.url;
if(!base.startsWith(\http\{
if(a.startsWith(\https\ base=\https://\base;
else base=\http://\base;
}
downloadUrl=base+\+Y.port+\flashsummary/retrieveFileData?stream=True&token=null&voice_audio_path=\+encodeURIComponent(Y.voice_path);
}else if(Y.voice_path){
downloadUrl=a+\retrieveFileData?stream=True&token=null&voice_audio_path=\+encodeURIComponent(Y.voice_path);
}else{
throw \未返回音频路径\ }
var aa=ttsrv.httpGet(downloadUrl, {});
if(aa.code()===200 || aa.code()===206){
if(b){ b.count++; y(b); }
return aa.body().bytes();
}else{
throw \下载音频失败(HTTP \aa.code()+\\ }
}else{
throw \合成失败: \+(Y.msg||Y.code);
}
}else{
throw \请求失败: \X.code();
}
}