aardio 文档

aardio 范例: Edge 大声朗读

chrome.edge 大声朗读

//Edge 大声朗读
//chrome.edge 大声朗读: https://www.aardio.com/zh-cn/doc/example/WebUI/Edge/speech.html
import fonts.fontAwesome;
import bass.channel; 
import web.edgeTextToSpeech;
import win.clip.file;
import win.ui;
/*DSG{{*/
var winform = win.form(text="Edge 大声朗读";right=757;bottom=467;bgcolor=0xFFFFFF)
winform.add(
btnPlay={cls="plus";left=268;top=427;right=299;bottom=456;bgcolor=0xFFFFFF;color=0x0045FF;db=1;disabled=1;dl=1;font=LOGFONT(h=-16;name='FontAwesome');iconStyle={align="left";font=LOGFONT(h=-16;name='FontAwesome');padding={left=7;top=3}};iconText='\uF04B';notify=1;z=7};
btnVoice={cls="plus";text="大声朗读(Ctrl + Enter)";left=520;top=427;right=744;bottom=456;align="left";bgcolor=0xFFFFFF;color=0xFF8000;db=1;dr=1;font=LOGFONT(h=-16);iconStyle={align="left";font=LOGFONT(h=-16;name='FontAwesome');padding={left=7;top=3}};iconText='\uF028';notify=1;textPadding={left=28};z=6};
cmbVoice={cls="combobox";left=68;top=431;right=258;bottom=457;db=1;dl=1;edge=1;items={};mode="dropdownlist";z=2};
edit={cls="edit";left=8;top=10;right=741;bottom=414;db=1;dl=1;dr=1;dt=1;edge=1;multiline=1;z=1};
static={cls="static";text="速度:";left=290;top=432;right=346;bottom=456;align="right";center=1;db=1;dl=1;transparent=1;z=4};
static2={cls="static";text="语音:";left=3;top=433;right=59;bottom=457;align="right";center=1;db=1;dl=1;transparent=1;z=5};
tbRate={cls="trackbar";left=369;top=428;right=512;bottom=458;bgcolor=0xFFFFFF;db=1;dl=1;dr=1;max=100;min=0;z=3}
)
/*}}*/

//响应按钮点击事件
winform.btnVoice.oncommand = function(id, event) { 

    var text = winform.edit.text;
    if(!string.find(text,":|\a")) return winform.edit.showWarningTip("请输入要朗读的有效文本。");   

    //禁用按钮,并循环显示沙漏 (hourglass)不同状态图标,实现出沙漏流动的动画。
    winform.btnVoice.disabledText = ['\uF254','\uF251','\uF252','\uF253','\uF250',text="正在合成 ..."];
    winform.btnPlay.disabled = true;

    //创建文本转语音服务,必须先更新 aardio 
    var tts = web.edgeTextToSpeech(text,"\edge-tts.mp3");

    //如果设置代理服务器,则必须指定为 HTTP:// 协议
    //tts.SetProxy("HTTP://127.0.0.1:1082","","");

    //设置语音
    tts.voiceOptions.name = winform.cmbVoice.selText;

    //设置速度
    tts.voiceOptions.rate = (winform.tbRate.pos - 100) + "%"

    //识别完成
    tts.OnResponseEnd = function(path){ 

        //win.clip.file.write(path); //复制 MP3

        //禁用按钮,并循环显示 静音»低音量»高音量 图标,显示发音效果动画
        winform.btnVoice.disabledText = ['\uF026','\uF027','\uF028',text="正在朗读 ..."];

        //打开 MP3 
        var audio = bass.channel.open(string.load(path));

        audio.syncCallback(function(data){
            audio.free();

            //启用按钮,停止动画
            winform.btnVoice.disabledText = null;
            winform.btnPlay.disabled = false;

        },2/*_BASS_SYNC_END*/);

        //播放声音
        audio.play();
    }

    //显示错误信息
    tts.OnError = function(sender, e){
        winform.edit.print(e.Message); 
        winform.btnVoice.disabledText = null;
        winform.btnPlay.disabled = false;
    }

    //连接服务器,合成语音
    tts.ConnectAsync();
}

winform.btnVoice.skin({
    color={
        active=0xFF00FF00;
        default=0xFF0080FF;
        disabled=0xFF999999;
        hover=0xFFFF0000        
    }
})

//设置滑块范围(语音速度)
winform.tbRate.setRange(0,200);
winform.tbRate.pos = 100;

//可选语音列表
winform.cmbVoice.items = { 
 "zh-CN-XiaoxiaoNeural";
 "zh-CN-XiaoyiNeural";
 "zh-CN-YunjianNeural";
 "zh-CN-YunxiNeural";
 "zh-CN-YunxiaNeural";
 "zh-CN-YunyangNeural";
 "zh-CN-shaanxi-XiaoniNeural";
 "zh-CN-liaoning-XiaobeiNeural";
 "zh-TW-HsiaoChenNeural";
 "zh-TW-YunJheNeural";
 "zh-TW-HsiaoYuNeural"; 
 "zh-HK-HiuGaaiNeural";
 "zh-HK-HiuMaanNeural";
 "zh-HK-WanLungNeural";
 "en-US-AriaNeural";
 "en-US-JennyNeural";
 "en-US-GuyNeural";
 "en-US-ChristopherNeural";
 "en-US-EricNeural";
 "en-US-MichelleNeural";
 "en-US-RogerNeural";
 "en-US-SteffanNeural";
}

winform.edit.onChange = function(){ 

    var text = winform.edit.text;
    if(!string.find(text,":|\a")) return;   

    //判读输入是否包含中文字符
    if(string.find(winform.edit.text,":")){
        if(!string.startsWith(winform.cmbVoice.text,"zh-")){
            //切换为中文语音
            winform.cmbVoice.selText = "zh-CN-XiaoxiaoNeural"
        }
    }
    else{
        if(!string.startsWith(winform.cmbVoice.text,"en-")){
            //切换为英文语音
            winform.cmbVoice.selText = "en-US-AriaNeural"
        }
    }

}

winform.cmbVoice.selIndex = 1;

winform.onOk = function(){
    winform.btnVoice.oncommand(); 
}

winform.edit.onOk = function(ctrl,alt,shift){ 
    if(ctrl && !shift && !alt) {
        winform.btnVoice.oncommand();
        return true;  
    }   
}

winform.btnPlay.skin(
    iconColor={
        active=0xFF00FF00;
        disabled=0xFF999999;
        hover=0xFFFF0000        
    }
)
winform.btnPlay.oncommand = function(id,event){
    winform.btnVoice.disabled  = true;
    winform.btnPlay.disabledText = ['\uF026','\uF027','\uF028']

    var audio = bass.channel.open(string.load("\edge-tts.mp3"));

    audio.syncCallback(function(data){
        audio.free();

        //启用按钮,停止动画
        winform.btnVoice.disabled = null;
        winform.btnPlay.disabledText = false;

    },2/*_BASS_SYNC_END*/);

    //播放声音
    audio.play();   
}

winform.show();
win.loopMessage();

/*
//可使用 web.edgeTextToSpeech.ui 扩展库快速创建上面的界面
import web.edgeTextToSpeech.ui;
var ttsForm = web.edgeTextToSpeech.ui();
ttsForm.edit.selText = "测试语音";
ttsForm.doModal();
*/
Markdown 格式