aar调用网站语音合成

By admin at 2018-02-25 • 0人收藏 • 524人看过

在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
2018-02-26   #1

做了个界面:

发现貌似文本过长的话,有时候就会转换失败导致播放不了....

解决办法: 可以利用标点符号进行分隔, 然后将分隔的字串按照顺序一个个转换,这个播放的时候转换下一个,..依次进行知道结束...

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


2018-07-31   #2
网址接口变化了,大神知道新的接口吗?


登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
Htmlayout皮肤Htmlayout皮肤引擎介绍
黑猫Aar教程网:简码编程
C大Aardio论坛:Aar爱好者论坛
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...