我也来发一段 JS 代码

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();

}

}

目前还没有评论