{number_of_tracks=(2);ticks_per_beat=(24);beats_per_second=(80);heap=[];midi_file=[];is_digit=(function (s){return (((0) <= s) && (s <= (9)))});is_note_literal=(function (s){var note_or_var=undefined;var tokens=s.toString().split(" ");if((tokens["length"] == (1))){note_or_var=tokens[(0)]}else{note_or_var=tokens[(1)]};var i=(0);var is_number=true;while((i < note_or_var["length"])){if((!is_digit(note_or_var[i]))){is_number=false;break}else{undefined};i++};return is_number});do_math=(function (math_tree,what,octave_size){var ret=[];if((math_tree["length"] == (1))){ret=math_tree}else{if((math_tree[(0)] == "?")){ret=get_var_from_heap(math_tree[(1)])[(1)][(1)][what]}else{if(((((math_tree[(0)] == "+") || (math_tree[(0)] == "-")) || (math_tree[(0)] == "*")) || (math_tree[(0)] == "/"))){var i=undefined;var num=undefined;var num_list=undefined;var left=do_math(math_tree[(1)],what,octave_size);var right=do_math(math_tree[(2)],what,octave_size);if((right["length"] == (1))){num_list=left;num=right[(0)]}else{if((left["length"] == (1))){num=left[(0)];num_list=right}else{}};for(i=(0);(i < num_list["length"]);i++){if((math_tree[(0)] == "+")){if((num_list == right)){if((num == (0))){ret=ret.concat((0))}else{if(((num < (0)) && ((num + num_list[i]) >= (0)))){ret=ret.concat(((num + num_list[i]) + (1)))}else{ret=ret.concat((num + num_list[i]))}}}else{ret=ret.concat((num_list[i] + num))}}else{if((math_tree[(0)] == "*")){ret=ret.concat((num_list[i] * num))}else{if((math_tree[(0)] == "-")){var result=undefined;if((num_list == right)){if((num == (0))){ret=ret.concat((0))}else{if(((num > (0)) && ((num - num_list[i]) <= (0)))){ret=ret.concat(((num - num_list[i]) - (1)))}else{ret=ret.concat((num - num_list[i]))}}}else{if((num_list[i] == (0))){ret=ret.concat((0))}else{if(((num_list[i] > (0)) && ((num_list[i] - num) <= (0)))){ret=ret.concat(((num_list[i] - num) - (1)))}else{ret=ret.concat((num_list[i] - num))}}}}else{if((math_tree[(0)] == "/")){if((num_list == right)){ret=ret.concat(((num - (num % num_list[i])) / num_list[i]))}else{ret=ret.concat(((num_list[i] - (num_list[i] % num)) / num))}}else{undefined}}}}}}else{if(((math_tree[(0)] == "^") || (math_tree[(0)] == "v"))){var i=undefined;for(i=(1);(i < math_tree["length"]);i++){var temp=do_math(math_tree[i],what,octave_size);var j=undefined;for(j=(0);(j < temp["length"]);j++){if((math_tree[(0)] == "^")){if((temp[j] == (0))){ret=ret.concat((0))}else{if(((temp[j] < (0)) && ((temp[j] + octave_size) >= (0)))){ret=ret.concat(((temp[j] + octave_size) + (1)))}else{ret=ret.concat((temp[j] + octave_size))}}}else{if((temp[j] == (0))){ret=ret.concat((0))}else{if(((temp[j] > (0)) && ((temp[j] - octave_size) <= (0)))){ret=ret.concat(((temp[j] - octave_size) - (1)))}else{ret=ret.concat((temp[j] - octave_size))}}}}}}else{undefined}}}};return ret});expand_variable_part=(function (melody,what,octave_size){var ret=[];var i=undefined;var melody_part=melody[(1)][what];for(i=(0);(i < melody_part["length"]);i++){if((melody_part[i]["length"] == (1))){ret=ret.concat(melody_part[i][(0)])}else{ret=ret.concat(do_math(melody_part[i],what,octave_size))}};return ret});expand_variables_whole=(function (melody){var ret=[];if((melody[(0)] == "!")){var scale=expand_variable_part(melody,(2));var octave_size=(scale["length"] - (1));ret=["!",[expand_variable_part(melody,(0),octave_size),expand_variable_part(melody,(1),octave_size),expand_variable_part(melody,(2),octave_size),expand_variable_part(melody,(3),octave_size)]]}else{if((melody[(0)] == "?")){ret=get_var_from_heap(melody[(1)])[(1)]}else{ret=[melody[(0)],expand_variables_whole(melody[(1)]),expand_variables_whole(melody[(2)])]}};return ret});get_var_from_heap=(function (variable_name){var get_var_from_heap_ret=[];for(i=(0);(i < heap["length"]);i++){if((heap[i][(0)] == variable_name)){get_var_from_heap_ret=heap[i];break}else{undefined}};return get_var_from_heap_ret});add_var_to_heap=(function (arg){var result=[];result=result.concat(arg[(0)]);result=result.concat([expand_variables_whole(arg[(1)])]);heap=heap.concat([result])});num2ff=(function (num){first_loop=true;num2ff_ret=[(0)];while((num > (0))){remainder=(num % (256));num=(num - remainder);num=(num / (256));if(first_loop){num2ff_ret=[remainder];first_loop=false}else{num2ff_ret=[remainder].concat(num2ff_ret)}};return num2ff_ret});num2vlen=(function (num){first_loop=true;num2vlen_ret=[(0)];while((num > (0))){remainder=(num % (128));num=(num - remainder);num=(num / (128));if(first_loop){num2vlen_ret=[remainder];first_loop=false}else{num2vlen_ret=[(remainder + (128))].concat(num2vlen_ret)}};return num2vlen_ret});key2num=(function (key){key2num_ret=(-(1));if(((key == "c") || (key == "C"))){key2num_ret=(0)}else{if(((((key == "c#") || (key == "C#")) || (key == "db")) || (key == "Db"))){key2num_ret=(1)}else{if(((key == "d") || (key == "D"))){key2num_ret=(2)}else{if(((((key == "d#") || (key == "D#")) || (key == "eb")) || (key == "Eb"))){key2num_ret=(3)}else{if(((key == "e") || (key == "E"))){key2num_ret=(4)}else{if(((key == "f") || (key == "F"))){key2num_ret=(5)}else{if(((((key == "f#") || (key == "F#")) || (key == "gb")) || (key == "Gb"))){key2num_ret=(6)}else{if(((key == "g") || (key == "G"))){key2num_ret=(7)}else{if(((((key == "g#") || (key == "G#")) || (key == "ab")) || (key == "Ab"))){key2num_ret=(8)}else{if(((key == "a") || (key == "A"))){key2num_ret=(9)}else{if(((((key == "a#") || (key == "A#")) || (key == "bb")) || (key == "Bb"))){key2num_ret=(10)}else{if(((key == "b") || (key == "B"))){key2num_ret=(11)}else{undefined}}}}}}}}}}}};return parseInt(key2num_ret)});track_header=(function (size_of_track){track_header_ret=[(77),(84),(114),(107)];ff_size_of_track=num2ff(size_of_track);while((ff_size_of_track["length"] < (4))){ff_size_of_track=[(0)].concat(ff_size_of_track)};track_header_ret=track_header_ret.concat(ff_size_of_track);return track_header_ret});bpm2ff=(function (bpm){return num2ff((((60000000) - ((60000000) % bpm)) / bpm))});file_header=(function (){file_header_ret=[(77),(84),(104),(100)];file_header_ret=file_header_ret.concat([(0),(0),(0),(6)]);file_header_ret=file_header_ret.concat([(0),(1)]);file_header_ret=file_header_ret.concat([(0),number_of_tracks]);fftpb=num2ff(ticks_per_beat);if((fftpb["length"] < (2))){fftpb=[(0)].concat(fftpb)}else{undefined};file_header_ret=file_header_ret.concat(fftpb);file_header_ret=file_header_ret.concat(track_header((17)));file_header_ret=file_header_ret.concat([(0),(255),(89),(2),(0),(0)]);file_header_ret=file_header_ret.concat([(0),(255),(81),(3)]);fftempo=bpm2ff(beats_per_second);while((fftempo["length"] < (3))){fftempo=[(0)].concat(fftempo)};file_header_ret=file_header_ret.concat(fftempo);file_header_ret=file_header_ret.concat(end_of_track());return file_header_ret});note_on=(function (vlength_time,ffnote,channel){return vlength_time.concat([((144) + channel),ffnote,(127)])});note_off=(function (vlength_time,ffnote,channel){return vlength_time.concat([((128) + channel),ffnote,(0)])});end_of_track=(function (){return [(0),(255),(47),(0)]});program_change=(function (channel,instrument){return [(0),((192) + channel),instrument]});note2ff=(function (note,scale,position){var ret=undefined;if((note == (0))){ret=(-(1))}else{if((note < (0))){var positive=((0) - note);var scale_width=(scale["length"] - (1));var scale_height=(scale[scale_width] - scale[(0)]);var remainder=(positive % scale_width);var octave_count=(((positive - remainder) / scale_width) + (1));if((remainder == (0))){ret=(((position - ((octave_count - (1)) * scale_height)) + scale[(0)]) - (1))}else{ret=(((position - (octave_count * scale_height)) + scale[(scale_width - remainder)]) - (1))}}else{var scale_width=(scale["length"] - (1));var scale_height=(scale[scale_width] - scale[(0)]);var remainder=((note - (1)) % scale_width);var octave_count=(((note - (1)) - remainder) / scale_width);ret=(((position + (octave_count * scale_height)) + scale[remainder]) - (1))}};return ret});heap2ir=(function (melody){var note_on_ir=[];var note_off_ir=[];var sub_count=(melody["length"] - (1));var sub_melody=[];var sub_length=[];var sub_index=[];var sub_timing=[];var i=undefined;var j=undefined;for(i=(0);(i < sub_count);i++){sub_melody=sub_melody.concat([melody[(i + (1))]]);var start_timing=[];var end_timing=[];var current_time=(0);var timing=sub_melody[i][(1)];for(j=(0);(j < timing["length"]);j++){start_timing=start_timing.concat(current_time);end_timing=end_timing.concat((parseInt(current_time) + parseInt(timing[j])));current_time+=timing[j]};sub_timing=sub_timing.concat([[start_timing,end_timing]]);sub_length=sub_length.concat(sub_melody[i][(0)]["length"]);sub_index=sub_index.concat([[(0),(0)]])};var winner_start=undefined;var winner_stop=undefined;var time_to_exit=false;while((!time_to_exit)){var min_start=(999999);var min_stop=(999999);winner_start=(-(1));winner_stop=(-(1));for(i=(0);(i < sub_count);i++){var index_of_timing=sub_index[i][(0)];var length_of_timing=sub_length[i];if((index_of_timing < length_of_timing)){var current_start_timing=sub_timing[i][(0)][index_of_timing];if((current_start_timing < min_start)){min_start=current_start_timing;winner_start=i}else{undefined}}else{undefined};index_of_timing=sub_index[i][(1)];length_of_timing=sub_length[i];if((index_of_timing < length_of_timing)){var current_stop_timing=sub_timing[i][(1)][index_of_timing];if((current_stop_timing < min_stop)){min_stop=current_stop_timing;winner_stop=i}else{undefined}}else{undefined}};var winner_start_note_ff=note2ff(sub_melody[winner_start][(0)][sub_index[winner_start][(0)]],sub_melody[winner_start][(2)],sub_melody[winner_start][(3)]);if((winner_start_note_ff != (-(1)))){note_on_ir=note_on_ir.concat([[min_start,winner_start_note_ff]])}else{undefined};sub_index[winner_start][(0)]++;var winner_stop_note_ff=note2ff(sub_melody[winner_stop][(0)][sub_index[winner_stop][(1)]],sub_melody[winner_stop][(2)],sub_melody[winner_stop][(3)]);if((winner_stop_note_ff != (-(1)))){note_off_ir=note_off_ir.concat([[min_stop,winner_stop_note_ff]])}else{undefined};sub_index[winner_stop][(1)]++;time_to_exit=true;for(j=(0);(j < sub_count);j++){if(((sub_index[j][(0)] < sub_length[j]) || (sub_index[j][(1)] < sub_length[j]))){time_to_exit=false;break}else{undefined}}};return [note_on_ir,note_off_ir]});ir2midi=(function (ir,channel){i_on=(0);i_off=(0);note_on_ir=ir[(0)];note_off_ir=ir[(1)];current_time=(0);ir2midi_ret=[];while(((i_on < note_on_ir["length"]) || (i_off < note_off_ir["length"]))){if((i_on == note_on_ir["length"])){delta=(note_off_ir[i_off][(0)] - current_time);ir2midi_ret=ir2midi_ret.concat(note_off(num2vlen(delta),note_off_ir[i_off][(1)],channel));i_off++;current_time+=delta;continue}else{undefined};if((i_off == note_off_ir["length"])){delta=(note_on_ir[i_on][(0)] - current_time);ir2midi_ret=ir2midi_ret.concat(note_on(num2vlen(delta),note_on_ir[i_on][(1)],channel));i_on++;current_time+=delta;continue}else{undefined};if((note_on_ir[i_on][(0)] < note_off_ir[i_off][(0)])){delta=(note_on_ir[i_on][(0)] - current_time);ir2midi_ret=ir2midi_ret.concat(note_on(num2vlen(delta),note_on_ir[i_on][(1)],channel));i_on++;current_time+=delta}else{delta=(note_off_ir[i_off][(0)] - current_time);ir2midi_ret=ir2midi_ret.concat(note_off(num2vlen(delta),note_off_ir[i_off][(1)],channel));i_off++;current_time+=delta}};return ir2midi_ret});write2file=(function (input){midi_file=midi_file.concat(input)});create_binary=(function (){var raw_data=undefined;eval("\n uuencode64 = function(bytes) {\n var keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"\n var output = \"\"\n var b1, b2, b3\n var e1, e2, e3, e4\n var i = 0\n while (i < bytes.length) {\n b1 = bytes[i++]\n b2 = bytes[i++]\n b3 = bytes[i++]\n e1 = b1 >> 2\n e2 = ((b1 & 3) << 4) | (b2 >> 4)\n e3 = ((b2 & 15) << 2) | (b3 >> 6)\n e4 = b3 & 63\n if (isNaN(b2)) { e3 = e4 = 64 }\n else if (isNaN(b3)) { e4 = 64 }\n output += keyStr.charAt(e1) + keyStr.charAt(e2) + keyStr.charAt(e3) + keyStr.charAt(e4)\n }\n return output\n }\n\n raw_data = uuencode64(midi_file)\n ");midi=document.createElement("embed");midi.setAttribute("src",("data:audio/midi;base64," + raw_data));$("playArea").appendChild(midi)});melody2ir=(function (melody){var note_on_ir=[];var note_off_ir=[];if((melody[(0)] == "!")){var i=undefined;var elapsed=(0);var tune=melody[(1)][(0)];var timing=melody[(1)][(1)];var scale=melody[(1)][(2)];var position=melody[(1)][(3)];for(i=(0);(i < tune["length"]);i++){var note_ff=note2ff(tune[i],scale,position[(0)]);note_on_ir=note_on_ir.concat([[elapsed,note_ff]]);elapsed+=timing[i];note_off_ir=note_off_ir.concat([[elapsed,note_ff]])}}else{if((melody[(0)] == "&")){var left=melody2ir(melody[(1)]);var right=melody2ir(melody[(2)]);var i=(0);var j=(0);while(((i < left[(0)]["length"]) || (j < right[(0)]["length"]))){if((i == left[(0)]["length"])){note_on_ir=note_on_ir.concat([right[(0)][j]]);j++;continue}else{undefined};if((j == right[(0)]["length"])){note_on_ir=note_on_ir.concat([left[(0)][i]]);i++;continue}else{undefined};if((left[(0)][i][(0)] < right[(0)][j][(0)])){note_on_ir=note_on_ir.concat([left[(0)][i]]);i++}else{note_on_ir=note_on_ir.concat([right[(0)][j]]);j++}};i=(0);j=(0);while(((i < left[(1)]["length"]) || (j < right[(1)]["length"]))){if((i == left[(1)]["length"])){note_off_ir=note_off_ir.concat([right[(1)][j]]);j++;continue}else{undefined};if((j == right[(1)]["length"])){note_off_ir=note_off_ir.concat([left[(1)][i]]);i++;continue}else{undefined};if((left[(1)][i][(0)] < right[(1)][j][(0)])){note_off_ir=note_off_ir.concat([left[(1)][i]]);i++}else{note_off_ir=note_off_ir.concat([right[(1)][j]]);j++}}}else{undefined}};return [note_on_ir,note_off_ir]})}