aar调用网站语音合成

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

在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
网址接口变化了,大神知道新的接口吗?


登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...