@@ -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
760760Blockly . 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
822826Blockly . 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