aar调用网站语音合成
By
admin
at 2018-02-25 • 0人收藏 • 1711人看过
在aar的官方论坛看到有人问怎么调用网站那个语音合成?
网站是 peiyinge.com/make/
于是去搜索了调用的js代码,看到了如下的js代码:
位于peiyinge.com/bin/js/flashPlay.js
var objItem = makeArray[playnum];
$.ajax({
type : "post",
url : base_url+"/make/getSynthSign",
data :{"content": ClearBr1(objItem.text)},
dataType : "json",
success : function(result) {
var resultInfo = eval(result);
if(hasaudio) {//支持audio标签
synthServer = objItem.engineUrl;
// synthServer = 'http://172.31.4.35:17063/synth';
// synthServer = 'http://proxy.peiyinge.com:17063/synth';
var txtcnt = ClearBr(objItem.text);
if(isIE()){
txtcnt = encodeURI(ClearBr1(objItem.text).replace( /\[0.5秒]/g, "[p500]").replace( /\[1秒]/g, "[p1000]").replace( /\[2秒]/g, "[p2000]")).replace(/\#/g, "%23").replace(/\+/g, "%2B").replace(/\&/g, "%26");
}
var defaultVolume = '';
for(var i = 0;i < speakernos.length;i++){
if(objItem.vid == speakernos[ i ].speakerNo){
defaultVolume = speakernos[ i ].defaultVolume
}
}
var anchorsize = 0;
if(parseInt($('.anchorsize').val()) < 50){
anchorsize = 0 - Math.round((20 - parseInt($('.anchorsize').val())*(20/50)));
}if(parseInt($('.anchorsize').val()) == 50){
anchorsize = 0;
}if(parseInt($('.anchorsize').val()) == 0){
anchorsize = -20;
}if(parseInt($('.anchorsize').val()) > 50){
anchorsize = Math.floor(parseInt($('.anchorsize').val())*(20/50)-20);
}if(parseInt($('.anchorsize').val()) == 100){
anchorsize = 20
};
if(type == '1'){
mainaudio1 = document.createElement('audio');
mainaudio1.setAttribute('src',synthServer+ '?ts='+resultInfo.ts+'&sign='+resultInfo.sign+'&vid='+objItem.vid+'&volume='+anchorsize+'&speed='+objItem.speed+'&content='+txtcnt);
mainaudio1.volume = .5;
for(var i = 0;i < speakernos.length;i++){
if(objItem.vid == speakernos[ i ].speakerNo){
mainaudio1.setAttribute('speekwork',speakernos[ i ].watermark)
}
}
if(iffirst == true){
if($('.jp-play').hasClass('cur')){
mainplayworks(playnum,'1');
}
}else {
mainaudio1.load();
}
}if(type == '2'){
mainaudio2 = document.createElement('audio');
mainaudio2.setAttribute('src',synthServer+ '?ts='+resultInfo.ts+'&sign='+resultInfo.sign+'&vid='+objItem.vid+'&volume='+anchorsize+'&speed='+objItem.speed+'&content='+txtcnt);
mainaudio2.volume = .5;
for(var i = 0;i < speakernos.length;i++){
if(objItem.vid == speakernos[ i ].speakerNo){
mainaudio2.setAttribute('speekwork',speakernos[ i ].watermark)
}
}
if(iffirst == true){
if($('.jp-play').hasClass('cur')){
mainplayworks(playnum,'2');
}
}else {
mainaudio2.load();
}
}
}else {
if(indexNo== 0) {
setHighlight(indexNo,objItem,makeArray.length);
}
thisName("Player").play(type,arrayLength,indexNo,objItem.engineUrl,objItem.text,objItem.vid,objItem.volume,objItem.speed,objItem.pitch,resultInfo.ts,resultInfo.sign);
}
}
});
}那么应该如何写成aar的形式呢?
下面简单的用控制台实现了基本功能, 弹出浏览器打开网址任何会提示一个下载,我们下载之,然后用播放器打开这个文件即可听到朗读的声音.
import console;
import inet.url;
import inet.http;
import process.openUrl;
import web.rest.jsonLiteClient;
var http = ..web.rest.jsonLiteClient();
var ret = http.post( "http://www.peiyinge.com/make/getSynthSign", {
content = "你好,我就是测试一下!";
})
console.dump(ret)
var text=inet.url.encode(ret.synthText)
str = "http://proxy.peiyinge.com:17063/synth?ts="++ret.ts++"&sign="++ret.sign++"&vid=65090&volume=0&speed=0&content="++text;
console.log(str)
var whttp=inet.http()
var html =whttp.get(str) ;
string.save("C:\888.mp3",html,true)
//process.openUrl(str);
console.pause(true);当然,你也可以获取到朗读文件保存为mp3格式,嗯,做个界面也不错.
2 个回复 | 最后更新于 2018-07-31
登录后方可回帖
做了个界面:
发现貌似文本过长的话,有时候就会转换失败导致播放不了....
解决办法: 可以利用标点符号进行分隔, 然后将分隔的字串按照顺序一个个转换,这个播放的时候转换下一个,..依次进行知道结束...
import win.ui; /*DSG{{*/ mainForm = win.form(text="aardio form";right=553;bottom=334) mainForm.add( button={cls="button";text="语音合成";left=393;top=285;right=540;bottom=321;z=1}; edit_nr={cls="edit";text="你好";left=17;top=24;right=377;bottom=311;autohscroll=false;edge=1;multiline=1;vscroll=1;z=3}; groupbox={cls="groupbox";text="预转换的文字";left=7;top=1;right=387;bottom=322;edge=1;z=2} ) /*}}*/ import console; console.open() var wmplay = com.CreateObject("{6BF52A52-394A-11d3-B153-00C04F79FAA6}") mainForm.button.oncommand = function(id,event){ mainForm.button.disabledText = "正在转换中" wmplay.Url = win.invoke( function(mainForm){ import inet.http; import web.rest.jsonLiteClient; import inet.url; var http = web.rest.jsonLiteClient(); var ret = http.post( "http://www.peiyinge.com/make/getSynthSign", { content = mainForm.edit_nr.text; }) var text=inet.url.encode(ret.synthText) var str = "http://proxy.peiyinge.com:17063/synth?ts="++ret.ts++"&sign="++ret.sign++"&vid=65090&volume=0&speed=0&content="++text; //wmplayer可以直接播放音频源,所以直接提供给它数据地址即可 //但是,实际中使用发现如果不保存到本地,有时候播放不了... //return str; var whttp=inet.http() var html =whttp.get(str); string.save("C:\888.mp3",html,true) return "C:\888.mp3"; } ,mainForm ) wmplay.controls.play() mainForm.button.disabledText = null; } mainForm.show(); win.loopMessage();