Skip to content

Commit 7ade00a

Browse files
committed
edit speech and recongnitize
1 parent 5a7acaa commit 7ade00a

4 files changed

Lines changed: 60 additions & 41 deletions

File tree

blocks/msg/en.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ Blockly.Msg.WEBDUINO_RECONGNITION_IF = "If words include text:";
2929
Blockly.Msg.WEBDUINO_RECONGNITION_DO = "do:";
3030
Blockly.Msg.WEBDUINO_SPEECH_MALE = "male";
3131
Blockly.Msg.WEBDUINO_SPEECH_FEMALE = "female";
32-
Blockly.Msg.WEBDUINO_SPEECH = "speech:";
32+
Blockly.Msg.WEBDUINO_SPEECH = " speech:";
33+
Blockly.Msg.WEBDUINO_SPEECH_APPID = "AppID:";
34+
Blockly.Msg.WEBDUINO_SPEECH_SET = "Language:";
35+
Blockly.Msg.WEBDUINO_SPEECH_SEX = " sex:";
3336

3437
Blockly.Msg.WEBDUINO_TIMER_AFTER = "After";
3538
Blockly.Msg.WEBDUINO_TIMER_SECOND = "seconds";

blocks/msg/zh-hant.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ Blockly.Msg.WEBDUINO_RECONGNITION_IF = "如果辨識的文字包含:";
2929
Blockly.Msg.WEBDUINO_RECONGNITION_DO = "執行:";
3030
Blockly.Msg.WEBDUINO_SPEECH_MALE = "男聲";
3131
Blockly.Msg.WEBDUINO_SPEECH_FEMALE = "女聲";
32-
Blockly.Msg.WEBDUINO_SPEECH = "發音:";
32+
Blockly.Msg.WEBDUINO_SPEECH = " 發音:";
33+
Blockly.Msg.WEBDUINO_SPEECH_APPID = "語音 appID:";
34+
Blockly.Msg.WEBDUINO_SPEECH_SET = "語音:";
35+
Blockly.Msg.WEBDUINO_SPEECH_SEX = " 性別:";
3336

3437
Blockly.Msg.WEBDUINO_TIMER_AFTER = "在";
3538
Blockly.Msg.WEBDUINO_TIMER_SECOND = "秒之後";

blocks/webduino.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,9 @@ Blockly.Blocks['board_ready'] = {
7878
Blockly.Blocks['board_error'] = {
7979
init: function () {
8080
this.appendDummyInput()
81-
.appendField(Blockly.Msg.WEBDUINO_BOARD_ERROR,"如果這塊板子斷線");
81+
.appendField(Blockly.Msg.WEBDUINO_BOARD_ERROR, "如果這塊板子斷線");
8282
this.appendStatementInput("do_")
83-
.appendField(Blockly.Msg.WEBDUINO_BOARD_ERROR_DO,"執行:");
83+
.appendField(Blockly.Msg.WEBDUINO_BOARD_ERROR_DO, "執行:");
8484
this.setPreviousStatement(true);
8585
this.setNextStatement(true);
8686
this.setTooltip('');
@@ -1375,21 +1375,29 @@ Blockly.Blocks['sound_recognition_check'] = {
13751375
// https://blockly-demo.appspot.com/static/demos/blockfactory/index.html#rbw7g9
13761376
Blockly.Blocks['translate_speech'] = {
13771377
init: function () {
1378+
this.appendDummyInput()
1379+
.appendField(Blockly.Msg.WEBDUINO_SPEECH_APPID, "語音 appID:")
1380+
.appendField(new Blockly.FieldTextInput(""), "id_");
13781381
this.appendValueInput("speech_")
13791382
.setCheck("String")
1383+
.setAlign(Blockly.ALIGN_RIGHT)
1384+
.appendField(Blockly.Msg.WEBDUINO_SPEECH_SET, "語音:")
13801385
.appendField(new Blockly.FieldDropdown([
13811386
["中文", "zh-TW"],
1387+
["廣東話", "zh-HK"],
1388+
["日文", "ja-JP"],
13821389
["English", "en-US"]
13831390
]), "lang_")
1391+
.appendField(Blockly.Msg.WEBDUINO_SPEECH_SEX, " 性別:")
13841392
.appendField(new Blockly.FieldDropdown([
13851393
[Blockly.Msg.WEBDUINO_SPEECH_MALE, "male"],
13861394
[Blockly.Msg.WEBDUINO_SPEECH_FEMALE, "female"]
13871395
]), "sex_")
1388-
.appendField(Blockly.Msg.WEBDUINO_SPEECH, "發音:");
1389-
this.setColour(230);
1396+
.appendField(Blockly.Msg.WEBDUINO_SPEECH, " 發音:");
13901397
this.setPreviousStatement(true);
13911398
this.setNextStatement(true);
13921399
this.setTooltip('');
1400+
this.setColour(230);
13931401
this.setHelpUrl('http://www.example.com/');
13941402
}
13951403
};

generators/webduino.js

Lines changed: 40 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -750,47 +750,48 @@ Blockly.JavaScript['temp_data_get'] = function (block) {
750750
' return ' + getCookie + '(' + value_name_ + ');\n' +
751751
'})()';
752752
} else if (dropdown_type_ == 2) {
753-
code = 'localStorage.' + value_name_ + '\n';
753+
code = 'localStorage.' + value_name_ ;
754754
} else if (dropdown_type_ == 3) {
755-
code = 'sessionStorage.' + value_name_ + '\n';
755+
code = 'sessionStorage.' + value_name_;
756756
}
757757
return [code, Blockly.JavaScript.ORDER_ATOMIC];
758758
};
759759

760760
Blockly.JavaScript['sound_recognition'] = function (block) {
761761
var dropdown_lang_ = block.getFieldValue('lang_');
762762
var statements_recognition_ = Blockly.JavaScript.statementToCode(block, 'recognition_');
763-
var recognizing = Blockly.JavaScript.variableDB_.getDistinctName(
764-
'recognizing', Blockly.Variables.NAME_TYPE);
765763
var recognition = Blockly.JavaScript.variableDB_.getDistinctName(
766764
'recognition', Blockly.Variables.NAME_TYPE);
767-
var code = 'var ' + recognizing + ' = false,\n' +
768-
' ' + recognition + ';\n' +
769-
'if (!("webkitSpeechRecognition" in window)) {\n' +
770-
' alert("本瀏覽器不支援語音辨識,請更換瀏覽器!(Chrome 25 版以上才支援語音辨識)");\n' +
771-
'} else{\n' +
772-
' ' + recognition + ' = new webkitSpeechRecognition();\n' +
773-
' ' + recognition + '.continuous = true;\n' +
774-
' ' + recognition + '.interimResults = true;\n' +
775-
' ' + recognition + '.lang = "'+dropdown_lang_+'";\n\n' +
776-
' ' + recognition + '.onstart = function() {\n' +
777-
' ' + recognizing + ' = true;\n' +
778-
' console.log("Start recognize...");\n' +
779-
' };\n\n' +
780-
' ' + recognition + '.onend = function() {\n' +
781-
' ' + recognizing + ' = false;\n' +
782-
' console.log("Stop recognize");\n' +
783-
' };\n\n' +
784-
' ' + recognition + '.onresult = function(event) {\n' +
785-
' var interim_transcript="";\n' +
786-
' for (var i = event.resultIndex; i < event.results.length; ++i){\n' +
787-
' interim_transcript += event.results[i][0].transcript;\n' +
788-
' console.log(interim_transcript);\n' +
789-
statements_recognition_ +
790-
' }\n' +
791-
' };\n' +
792-
'}\n\n' +
793-
recognition + '.start();\n';
765+
var code = '(function(){\n'+
766+
' if (!("webkitSpeechRecognition" in window)) {\n' +
767+
' alert("本瀏覽器不支援語音辨識,請更換瀏覽器!(Chrome 25 版以上才支援語音辨識)");\n' +
768+
' } else{\n' +
769+
' var ' + recognition + ' = new webkitSpeechRecognition();\n' +
770+
' var checkFinal;\n' +
771+
' ' + recognition + '.continuous = true;\n' +
772+
' ' + recognition + '.interimResults = true;\n' +
773+
' ' + recognition + '.lang = "'+dropdown_lang_+'";\n\n' +
774+
' ' + recognition + '.onstart = function() {\n' +
775+
' console.log("Start recognize...");\n' +
776+
' checkFinal=0;\n'+
777+
' };\n\n' +
778+
' ' + recognition + '.onend = function() {\n' +
779+
' console.log("Stop recognize");\n' +
780+
' };\n\n' +
781+
' ' + recognition + '.onresult = function(event) {\n' +
782+
' var resultLength = event.results.length-1;\n' +
783+
' var resultTranscript = event.results[resultLength][0].transcript;\n' +
784+
' if(event.results[resultLength].isFinal===false){\n'+
785+
' console.log(resultTranscript);\n'+
786+
' '+statements_recognition_+
787+
' }else if(event.results[resultLength].isFinal===true){\n' +
788+
' checkFinal=0;\n'+
789+
' console.log("final");\n'+
790+
' }\n'+
791+
' };\n' +
792+
' '+recognition + '.start();\n'+
793+
' }\n'+
794+
'})();\n';
794795
return code;
795796
};
796797

@@ -802,15 +803,18 @@ Blockly.JavaScript['sound_recognition_check'] = function (block) {
802803
var b = value_text_.split(', ');
803804
var code;
804805
if (b.length == 1) {
805-
code = ' if(interim_transcript.indexOf("' + b[0] + '")!==-1){\n' +
806+
code = ' if(resultTranscript.indexOf("' + b[0] + '")!==-1 && checkFinal===0){\n' +
807+
' checkFinal=1;\n'+
806808
' ' + statements_do_ +
807809
' }\n';
808810
} else {
809-
code = ' if(interim_transcript.indexOf("' + b[0] + '")!==-1){\n' +
811+
code = ' if(resultTranscript.indexOf("' + b[0] + '")!==-1 && checkFinal===0){\n' +
812+
' checkFinal=1;\n'+
810813
' ' + statements_do_ +
811814
' }\n';
812815
for (var i = 1; i < b.length; i++) {
813-
code += ' if(interim_transcript.indexOf("' + b[i] + '")!==-1){\n' +
816+
code += ' if(resultTranscript.indexOf("' + b[i] + '")!==-1 && checkFinal===0){\n' +
817+
' checkFinal=1;\n'+
814818
' ' + statements_do_ +
815819
' }\n';
816820
}
@@ -820,6 +824,7 @@ Blockly.JavaScript['sound_recognition_check'] = function (block) {
820824

821825

822826
Blockly.JavaScript['translate_speech'] = function(block) {
827+
var text_id_ = block.getFieldValue('id_');
823828
var dropdown_lang_ = block.getFieldValue('lang_');
824829
var dropdown_sex_ = block.getFieldValue('sex_');
825830
var value_speech_ = Blockly.JavaScript.valueToCode(block, 'speech_', Blockly.JavaScript.ORDER_ATOMIC);
@@ -831,7 +836,7 @@ Blockly.JavaScript['translate_speech'] = function(block) {
831836
'audio', Blockly.Variables.NAME_TYPE);
832837
var text = Blockly.JavaScript.variableDB_.getDistinctName(
833838
'text', Blockly.Variables.NAME_TYPE);
834-
var appID = 'TMXse1GmyYnY4U6jdDskPxJGke0UmpU5BznkpvoTSIyg*';
839+
var appID = text_id_;
835840
var language = dropdown_lang_;
836841
var format = 'audio/mp3&options=MinSize|'+dropdown_sex_;
837842
var a = value_speech_.split('');

0 commit comments

Comments
 (0)