Skip to content
This repository was archived by the owner on Nov 22, 2021. It is now read-only.

Commit 0266b9d

Browse files
committed
fixed bug of buzzer
1 parent 4b7ef56 commit 0266b9d

File tree

4 files changed

+95
-92
lines changed

4 files changed

+95
-92
lines changed

blocks/msg/zh-hant.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,9 +214,9 @@ Blockly.Msg.WEBDUINO_RGBLED_SETCOLOR = "設定顏色";
214214
Blockly.Msg.WEBDUINO_BUZZER = "蜂鳴器,腳位";
215215
Blockly.Msg.WEBDUINO_BUZZER_MUSIC1 = "建立音樂,音樂名稱";
216216
Blockly.Msg.WEBDUINO_BUZZER_MUSIC1_EDIT = "音符與節奏";
217-
Blockly.Msg.WEBDUINO_BUZZER_MUSIC1_TONE = "音調";
217+
Blockly.Msg.WEBDUINO_BUZZER_MUSIC1_TONE = "音符";
218218
Blockly.Msg.WEBDUINO_BUZZER_MUSIC1_PITCH = " 音高";
219-
Blockly.Msg.WEBDUINO_BUZZER_MUSIC1_TEMPOS = " 節奏 ( 幾分之1秒 )";
219+
Blockly.Msg.WEBDUINO_BUZZER_MUSIC1_TEMPOS = " 節奏";
220220
Blockly.Msg.WEBDUINO_BUZZER_MUSIC1_NO = "無聲";
221221
Blockly.Msg.WEBDUINO_BUZZER_USE = "使用";
222222
Blockly.Msg.WEBDUINO_BUZZER_PLAY = "播放";
@@ -233,7 +233,7 @@ Blockly.Msg.WEBDUINO_BUZZER_STATE_PLAYING = "正在播放";
233233
Blockly.Msg.WEBDUINO_BUZZER_MUSIC2 = "快速建立音樂,音樂名稱";
234234
Blockly.Msg.WEBDUINO_BUZZER_MUSIC2_NOTES = "音符";
235235
Blockly.Msg.WEBDUINO_BUZZER_MUSIC2_TEMPOS = "節奏";
236-
Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC = "選擇資料庫音樂";
236+
Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC = "選擇音樂";
237237
Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC1 = "超級瑪莉";
238238
Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC2 = "真善美";
239239
Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC3 = "哥哥爸爸真偉大";

blocks/webduino.js

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1590,7 +1590,7 @@ Blockly.Blocks['buzzer_music'] = {
15901590
Blockly.Blocks['buzzer_notes_tempos'] = {
15911591
init: function () {
15921592
this.appendDummyInput()
1593-
.appendField(Blockly.Msg.WEBDUINO_BUZZER_MUSIC1_TONE, "音調:")
1593+
.appendField(Blockly.Msg.WEBDUINO_BUZZER_MUSIC1_TONE, "音符:")
15941594
.appendField(new Blockly.FieldDropdown([
15951595
[Blockly.Msg.WEBDUINO_BUZZER_MUSIC1_NO, "0"],
15961596
["C", "C"],
@@ -1606,7 +1606,6 @@ Blockly.Blocks['buzzer_notes_tempos'] = {
16061606
["AS", "AS"],
16071607
["B", "B"]
16081608
]), "tone_")
1609-
.appendField(Blockly.Msg.WEBDUINO_BUZZER_MUSIC1_PITCH, " 音高:")
16101609
.appendField(new Blockly.FieldDropdown([
16111610
["1", "1"],
16121611
["2", "2"],
@@ -1642,7 +1641,7 @@ Blockly.Blocks['buzzer_single'] = {
16421641
this.appendDummyInput()
16431642
.appendField(Blockly.Msg.WEBDUINO_BUZZER_SINGLE, "使用")
16441643
.appendField(new Blockly.FieldVariable("buzzer"), "var_")
1645-
.appendField(Blockly.Msg.WEBDUINO_BUZZER_SINGLE_TONE, "播放單音,音調")
1644+
.appendField(Blockly.Msg.WEBDUINO_BUZZER_SINGLE_TONE, "播放單音,音符")
16461645
.appendField(new Blockly.FieldDropdown([
16471646
["C", "C"],
16481647
["CS", "CS"],
@@ -1657,7 +1656,6 @@ Blockly.Blocks['buzzer_single'] = {
16571656
["AS", "AS"],
16581657
["B", "B"]
16591658
]), "tone_")
1660-
.appendField(Blockly.Msg.WEBDUINO_BUZZER_SINGLE_PITCH, "音高")
16611659
.appendField(new Blockly.FieldDropdown([
16621660
["1", "1"],
16631661
["2", "2"],
@@ -1746,9 +1744,6 @@ Blockly.Blocks['buzzer_state'] = {
17461744
// https://blockly-demo.appspot.com/static/demos/blockfactory/index.html#tgex67
17471745
Blockly.Blocks['buzzer_music_array'] = {
17481746
init: function () {
1749-
this.appendValueInput("music_name_")
1750-
.setAlign(Blockly.ALIGN_RIGHT)
1751-
.appendField(Blockly.Msg.WEBDUINO_BUZZER_MUSIC2, "快速建立音樂,音樂名稱:");
17521747
this.appendValueInput("notes_")
17531748
.setCheck("String")
17541749
.setAlign(Blockly.ALIGN_RIGHT)
@@ -1760,7 +1755,7 @@ Blockly.Blocks['buzzer_music_array'] = {
17601755
this.setPreviousStatement(true);
17611756
this.setNextStatement(true);
17621757
this.setTooltip('');
1763-
this.setColour(65);
1758+
this.setColour(35);
17641759
this.setHelpUrl('http://www.example.com/');
17651760
}
17661761
};
@@ -1776,9 +1771,10 @@ Blockly.Blocks['buzzer_load_music'] = {
17761771
[Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC2, "m2"],
17771772
[Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC3, "m3"]
17781773
]), "music_");
1779-
this.setOutput(true);
1774+
this.setPreviousStatement(true);
1775+
this.setNextStatement(true);
17801776
this.setTooltip('');
1781-
this.setColour(65);
1777+
this.setColour(35);
17821778
this.setHelpUrl('http://www.example.com/');
17831779
}
17841780
};

generators/webduino.js

Lines changed: 85 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,6 @@ Blockly.JavaScript['console'] = function (block) {
476476

477477
Blockly.JavaScript['getdate'] = function (block) {
478478
var dropdown_date_ = block.getFieldValue('date_');
479-
480479
var functionName = Blockly.JavaScript.provideFunction_(
481480
'get_date',
482481
[ 'function ' + Blockly.JavaScript.FUNCTION_NAME_PLACEHOLDER_ + '(t) {',
@@ -934,56 +933,71 @@ Blockly.JavaScript['buzzer_music'] = function (block) {
934933
var value_music_name_ = Blockly.JavaScript.valueToCode(block, 'music_name_', Blockly.JavaScript.ORDER_ATOMIC);
935934
var statements_music_ = Blockly.JavaScript.statementToCode(block, 'music_');
936935
var functionName = Blockly.JavaScript.provideFunction_(
937-
'get_date',
938-
[ 'function ' + Blockly.JavaScript.FUNCTION_NAME_PLACEHOLDER_ + '(t) {',
939-
' var varDay = new Date();',
940-
' var varYear = varDay.getFullYear();',
941-
' var varMonth = varDay.getMonth()+1;',
942-
' var varDate = varDay.getDate();',
943-
' var varNow;',
944-
' if(t=="f1"){',
945-
' varNow = varYear + "/" + varMonth + "/" + varDate;',
946-
' }else if(t=="f2"){',
947-
' varNow = varMonth + "/" + varDate + "/" + varYear;',
948-
' }else if(t=="f3"){',
949-
' varNow = varDate + "/" + varMonth + "/" + varYear;',
950-
' }else if(t=="y"){',
951-
' varNow = varYear;',
952-
' }else if(t=="m"){',
953-
' varNow = varMonth;',
954-
' }else if(t=="d"){',
955-
' varNow = varDate;',
956-
' }',
957-
' return varNow;',
958-
'}']);
959-
var code = functionName + '("'+ dropdown_date_ +'")';
960-
return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL];
961-
var code = 'var ' + value_music_name_ + '={};\n' +
962-
'(function(){\n' +
963-
' var musicNotes = {};\n' +
964-
' musicNotes.notes = [];\n' +
965-
' musicNotes.tempos = [];\n' +
966-
statements_music_ + '\n' +
967-
' ' + value_music_name_ + '.notes = musicNotes.notes;\n' +
968-
' ' + value_music_name_ + '.tempos = musicNotes.tempos;\n' +
969-
'})();\n';
970-
return code;
971-
};
936+
'buzzer_music',
937+
[ 'function ' + Blockly.JavaScript.FUNCTION_NAME_PLACEHOLDER_ + '(m) {',
938+
_buzzer_music.toString().replace('function _buzzer_music(m){\n','')]);
939+
var code = value_music_name_ + ' = ' +functionName + '(['+ statements_music_ +']);\n';
940+
return code;
941+
};
942+
943+
function _buzzer_music(m){
944+
var musicNotes = {};
945+
musicNotes.notes = [];
946+
musicNotes.tempos = [];
947+
if(m.length>1){
948+
for(var i=0; i<m.length; i++){
949+
if(Array.isArray(m[i].notes)){
950+
var cn = musicNotes.notes.concat(m[i].notes);
951+
musicNotes.notes = cn;
952+
}else{
953+
musicNotes.notes.push(m[i].notes);
954+
}
955+
if(Array.isArray(m[i].tempos)){
956+
var ct = musicNotes.tempos.concat(m[i].tempos);
957+
musicNotes.tempos = ct;
958+
}else{
959+
musicNotes.tempos.push(m[i].tempos);
960+
}
961+
}
962+
}else{
963+
musicNotes.notes = m[0].notes;
964+
musicNotes.tempos = m[0].tempos;
965+
}
966+
return musicNotes;
967+
}
972968

973969

974970
Blockly.JavaScript['buzzer_music_array'] = function (block) {
975971
var value_music_name_ = Blockly.JavaScript.valueToCode(block, 'music_name_', Blockly.JavaScript.ORDER_ATOMIC);
976972
var value_notes_ = Blockly.JavaScript.valueToCode(block, 'notes_', Blockly.JavaScript.ORDER_ATOMIC);
977973
var value_tempos_ = Blockly.JavaScript.valueToCode(block, 'tempos_', Blockly.JavaScript.ORDER_ATOMIC);
978-
var a = value_notes_.split(',');
979-
value_notes_ = '[' + a.join('\',\'') + ']';
980-
var b = value_tempos_.split(',');
981-
value_tempos_ = '[' + b.join('\',\'') + ']';
982-
var code = 'var ' + value_music_name_ + '={};\n' +
983-
'(function(){\n' +
984-
' ' + value_music_name_ + '.notes = ' + value_notes_ + ';\n' +
985-
' ' + value_music_name_ + '.tempos = ' + value_tempos_ + ';\n' +
986-
'})();\n';
974+
var next = block.getNextBlock();
975+
var notes = value_notes_.replace(/\'/g,'');
976+
var tempos = value_tempos_.replace(/\'/g,'');
977+
var notesGen = notes.split(',');
978+
var temposGen = tempos.split(',');
979+
if(notesGen.length>temposGen.length){
980+
var nt = notesGen.length - temposGen.length;
981+
var tl = temposGen.length - 1;
982+
for(var i=0; i<nt; i++){
983+
temposGen.push(temposGen[tl])
984+
}
985+
}else if(notesGen.length<temposGen.length){
986+
var nb = temposGen.length - notesGen.length;
987+
temposGen.splice(notesGen.length,nb);
988+
}
989+
for(var i=0; i<notesGen.length; i++){
990+
notesGen[i] = '"'+notesGen[i]+'"';
991+
}
992+
for(var i=0; i<temposGen.length; i++){
993+
temposGen[i] = '"'+temposGen[i]+'"';
994+
}
995+
var code;
996+
if (next === null) {
997+
code = '{notes : [' + notesGen + '] , tempos : [' + temposGen + '] }';
998+
} else {
999+
code = '{notes : [' + notesGen + '] , tempos : [' + temposGen + '] },';
1000+
}
9871001
return code;
9881002
};
9891003

@@ -992,11 +1006,16 @@ Blockly.JavaScript['buzzer_notes_tempos'] = function (block) {
9921006
var dropdown_tone_ = block.getFieldValue('tone_');
9931007
var dropdown_pitch_ = block.getFieldValue('pitch_');
9941008
var dropdown_tempos_ = block.getFieldValue('tempos_');
1009+
var next = block.getNextBlock();
1010+
var code;
9951011
if (dropdown_tone_ == '0') {
9961012
dropdown_pitch_ = '';
9971013
}
998-
var code = 'musicNotes.notes.push("' + dropdown_tone_ + dropdown_pitch_ + '");\n' +
999-
'musicNotes.tempos.push("' + dropdown_tempos_ + '");\n';
1014+
if (next === null) {
1015+
code = '{notes:"'+dropdown_tone_+dropdown_pitch_+'",tempos:"'+dropdown_tempos_+'"}';
1016+
} else {
1017+
code = '{notes:"'+dropdown_tone_+dropdown_pitch_+'",tempos:"'+dropdown_tempos_+'"},';
1018+
}
10001019
return code;
10011020
};
10021021

@@ -1043,35 +1062,28 @@ Blockly.JavaScript['buzzer_state'] = function (block) {
10431062

10441063
Blockly.JavaScript['buzzer_load_music'] = function (block) {
10451064
var dropdown_music_ = block.getFieldValue('music_');
1046-
var notes, tempos, a, b;
1047-
var m = function () {
1048-
a = notes.split(',');
1049-
notes = '["' + a.join('","') + '"]';
1050-
b = tempos.split(',');
1051-
tempos = '["' + b.join('","') + '"]';
1052-
}
1065+
var notes, tempos;
1066+
var next = block.getNextBlock();
10531067
if (dropdown_music_ == 'm1') {
1054-
notes = "E7,E7,0,E7,0,C7,E7,0,G7,0,0,0,G6,0,0,0,C7,0,0,G6,0,0,E6,0,0,A6,0,B6,0,AS6,A6,0,G6,E7,0,G7,A7,0,F7,G7,0,E7,0,C7,D7,B6,0,0,C7,0,0,G6,0,0,E6,0,0,A6,0,B6,0,AS6,A6,0,G6,E7,0,G7,A7,0,F7,G7,0,E7,0,C7,D7,B6,0,0";
1055-
tempos = "8";
1056-
m();
1057-
}
1058-
if (dropdown_music_ == 'm2') {
1059-
notes = "c4,e4,e4,0,e4,g4,g4,0,d4,f4,f4,0,a4,b4,b4,0,c4,d4,e4,c4,e4,c4,e4,0,d4,e4,f4,f4,e4,d4,f4,0,e4,f4,g4,e4,g4,e4,g4,0,f4,g4,a4,a4,g4,f4,a4,0,g4,c4,d4,e4,f4,g4,a4,0,a4,d4,e4,f4,g4,a4,b4,0,b4,e4,f4,g4,a4,b4,c5,0,c5,b4,a4,f4,b4,g4,c5";
1060-
tempos = "6, 6, 6,6,6 ,6 ,6 ,6,6 ,6 ,6 ,6,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6,6,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6,6 ,6 ,6 , 6, 6, 6, 6,6, 6, 6, 6, 6, 6, 6, 6,6, 6, 6, 6, 6,6 ,6 ,6 ,6,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6,6 ,6 ,6 ,6 ,6 ,6 ,6";
1061-
m();
1068+
notes = '["E7","E7","0","E7","0","C7","E7","0","G7","0","0","0","G6","0","0","0","C7","0","0","G6","0","0","E6","0","0","A6","0","B6","0","AS6","A6","0","G6","E7","0","G7","A7","0","F7","G7","0","E7","0","C7","D7","B6","0","0","C7","0","0","G6","0","0","E6","0","0","A6","0","B6","0","AS6","A6","0","G6","E7","0","G7","A7","0","F7","G7","0","E7","0","C7","D7","B6","0","0"]';
1069+
tempos = '["8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8"]';
1070+
}else if (dropdown_music_ == 'm2') {
1071+
notes = '["c4","e4","e4","0","e4","g4","g4","0","d4","f4","f4","0","a4","b4","b4","0","c4","d4","e4","c4","e4","c4","e4","0","d4","e4","f4","f4","e4","d4","f4","0","e4","f4","g4","e4","g4","e4","g4","0","f4","g4","a4","a4","g4","f4","a4","0","g4","c4","d4","e4","f4","g4","a4","0","a4","d4","e4","f4","g4","a4","b4","0","b4","e4","f4","g4","a4","b4","c5","0","c5","b4","a4","f4","b4","g4","c5"]';
1072+
tempos = '["6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6"]';
1073+
}else if (dropdown_music_ == 'm3') {
1074+
notes = '["C5","C5","G4","G4","A4","A4","G4","0","E4","G4","C5","A4","G4","0","0","A4","0","G4","0","E4","A4","G4","0","E4","0","G4","0","E4","D4","C4","0","E4","E4","G4","G4","A4","A4","G4","G4","0","D5","0","C5","A4","G4","A4","C5","G4","0","A4","A4","G4","A4","C5","G4","0","A4","A4","G4","A4","D5","C5"]';
1075+
tempos = '["6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6"]';
1076+
}else if (dropdown_music_ == 'm4') {
1077+
notes = '["FS6","FS6","0","FS6","0","D6","FS6","0","B6","0","0","0","G6","0","0","0","G6","0","0","E6","0","0","C6","0","0","F6","0","G6","0","FS6","F6","0","E6","C7","0","E7","F7","0","D7","E7","0","C7","0","A6","B6","G6","0","0","G6","0","0","E6","0","0","C6","0","0","F6","0","G6","0","FS6","F6","0","E6","G6","0","E7","F7","0","D7","E7","0","C7","0","A6","B6","G6","0","0"]';
1078+
tempos = '["8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8", "8"]';
10621079
}
1063-
if (dropdown_music_ == 'm3') {
1064-
notes = "C5,C5,G4,G4,A4,A4,G4,0,E4,G4,C5,A4,G4,0,0,A4,0,G4,0,E4,A4,G4,0,E4,0,G4,0,E4,D4,C4,0,E4,E4,G4,G4,A4,A4,G4,G4,0,D5,0,C5,A4,G4,A4,C5,G4,0,A4,A4,G4,A4,C5,G4,0,A4,A4,G4,A4,D5,C5";
1065-
tempos = "6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6";
1066-
m();
1067-
}
1068-
if (dropdown_music_ == 'm4') {
1069-
notes = "FS6,FS6,0,FS6,0,D6,FS6,0,B6,0,0,0,G6,0,0,0,G6,0,0,E6,0,0,C6,0,0,F6,0,G6,0,FS6,F6,0,E6,C7,0,E7,F7,0,D7,E7,0,C7,0,A6,B6,G6,0,0,G6,0,0,E6,0,0,C6,0,0,F6,0,G6,0,FS6,F6,0,E6,G6,0,E7,F7,0,D7,E7,0,C7,0,A6,B6,G6,0,0";
1070-
tempos = "8";
1071-
m();
1080+
var code;
1081+
if (next === null) {
1082+
code = '{notes:'+ notes + ' , tempos:' + tempos + '}';
1083+
} else {
1084+
code = '{notes:'+ notes + ' , tempos:' + tempos + '},';
10721085
}
1073-
var code = notes + ',' + tempos;
1074-
return [code, Blockly.JavaScript.ORDER_ATOMIC];
1086+
return code;
10751087
};
10761088

10771089

views/index.handlebars

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,6 @@
539539
</block>
540540
</value>
541541
</block>
542-
<block type="buzzer_load_music"></block>
543542
<block type="buzzer_music">
544543
<value name="music_name_">
545544
<block type="variables_get">
@@ -549,11 +548,6 @@
549548
</block>
550549
<block type="buzzer_notes_tempos"></block>
551550
<block type="buzzer_music_array">
552-
<value name="music_name_">
553-
<block type="variables_get">
554-
<field name="VAR">music</field>
555-
</block>
556-
</value>
557551
<value name="notes_">
558552
<block type="text">
559553
<field name="TEXT">C6,D6,E6,F6,G6,A6,B6</field>
@@ -565,6 +559,7 @@
565559
</block>
566560
</value>
567561
</block>
562+
<block type="buzzer_load_music"></block>
568563
<block type="buzzer_play">
569564
<value name="play_music_">
570565
<block type="variables_get">

0 commit comments

Comments
 (0)