$arr) { //tick delay---------------------------------// $b_arr = array(0); //only if previous note was a rest or another voice if ($i > 0 && strcmp($c2_data[$i-1][1],"0") > 0) { $b_ticks = strrev(decbin($ticksSinceLastNote)); $b_arr = str_split($b_ticks,7); for ($j = 0; $j < count($b_arr); $j++) { if (strlen($b_arr[$j]) < 7) $b_arr[$j] = str_pad($b_arr[$j],7,"0",STR_PAD_RIGHT); if ($j > 0) $b_arr[$j][7] = "1"; $b_arr[$j] = strrev($b_arr[$j]); } } //--------------------------------------------// $ticksSinceLastNote += (1/$arr[3])*960; if (strcmp($arr[1],"0") == 0) //play a note (square) { //note on event for ($j = count($b_arr)-1; $j >= 0; $j--) //tick delay array_push($bin_data,bindec($b_arr[$j])); array_push($bin_data,148); //note on, channel 4 array_push($bin_data,$note_array['square'][$arr[2]][5]); //MIDI note index array_push($bin_data,100); //velocity //pitch bend array_push($bin_data,0); //delta time (immediate bend) array_push($bin_data,228); //pitch bend, channel 4 array_push($bin_data,$note_array['square'][$arr[2]][6]); //left bits array_push($bin_data,$note_array['square'][$arr[2]][7]); //right bits //tick delay for note off $b_ticks = strrev(decbin((1/$arr[3])*960)); $b_arr = str_split($b_ticks,7); for ($j = 0; $j < count($b_arr); $j++) { if (strlen($b_arr[$j]) < 7) $b_arr[$j] = str_pad($b_arr[$j],7,"0",STR_PAD_RIGHT); if ($j > 0) $b_arr[$j][7] = "1"; $b_arr[$j] = strrev($b_arr[$j]); } //note off for ($j = count($b_arr)-1; $j >= 0; $j--) //tick delay array_push($bin_data,bindec($b_arr[$j])); array_push($bin_data,132); //note off, channel 4 array_push($bin_data,$note_array['square'][$arr[2]][5]); array_push($bin_data,100); //velocity of release $ticksSinceLastNote = 0; } } //Header fwrite($filehandle,pack("I",77),1); fwrite($filehandle,pack("I",84),1); fwrite($filehandle,pack("I",114),1); fwrite($filehandle,pack("I",107),1); //# of bytes in track data $numbytes = count($bin_data)+11; //the seven lines of changing voice and volume, plus the track end bytes $h = str_pad(dechex($numbytes),8,"0",STR_PAD_LEFT); $byte4 = hexdec(substr($h,6,2)); $byte3 = hexdec(substr($h,4,2)); $byte2 = hexdec(substr($h,2,2)); $byte1 = hexdec(substr($h,0,2)); fwrite($filehandle,pack("I",$byte1),1); fwrite($filehandle,pack("I",$byte2),1); fwrite($filehandle,pack("I",$byte3),1); fwrite($filehandle,pack("I",$byte4),1); //change to square voice fwrite($filehandle,pack("I",0),1); //delta time fwrite($filehandle,pack("I",196),1); //change voice, channel 4 fwrite($filehandle,pack("I",80),1); //square voice //change volume fwrite($filehandle,pack("I",0),1); //delta time fwrite($filehandle,pack("I",180),1); //controller event, channel 4 fwrite($filehandle,pack("I",7),1); //change volume fwrite($filehandle,pack("I",80),1); //volume level foreach ($bin_data as $val) fwrite($filehandle,pack("I",$val),1); //End track fwrite($filehandle,pack("I",0),1); fwrite($filehandle,pack("I",255),1); fwrite($filehandle,pack("I",47),1); fwrite($filehandle,pack("I",0),1); //END TRACK 2 DATA ?>