Beispiel #1
0
function _makeDigest($pwd, $nonce, $timestamp)
{
    $txt = sha1($nonce . $timestamp . $pwd);
    $digest = base64_encode(_hex2bin($txt));
    return $digest;
}
 function _getMsgStr($line)
 {
     $msg = explode(' ', $line);
     switch ($msg[1]) {
         case 'PrCh':
             // 0x0C
             eval("\$" . $msg[2] . ';');
             // chan
             eval("\$" . $msg[3] . ';');
             // prog
             return chr(0xc0 + $ch - 1) . chr($p);
             break;
         case 'On':
             // 0x09
             eval("\$" . $msg[2] . ';');
             // chan
             eval("\$" . $msg[3] . ';');
             // note
             eval("\$" . $msg[4] . ';');
             // vel
             return chr(0x90 + $ch - 1) . chr($n) . chr($v);
             break;
         case 'Off':
             // 0x08
             eval("\$" . $msg[2] . ';');
             // chan
             eval("\$" . $msg[3] . ';');
             // note
             eval("\$" . $msg[4] . ';');
             // vel
             return chr(0x80 + $ch - 1) . chr($n) . chr($v);
             break;
         case 'PoPr':
             // 0x0A = PolyPressure
             eval("\$" . $msg[2] . ';');
             // chan
             eval("\$" . $msg[3] . ';');
             // note
             eval("\$" . $msg[4] . ';');
             // val
             return chr(0xa0 + $ch - 1) . chr($n) . chr($v);
             break;
         case 'Par':
             // 0x0B = ControllerChange
             eval("\$" . $msg[2] . ';');
             // chan
             eval("\$" . $msg[3] . ';');
             // controller
             eval("\$" . $msg[4] . ';');
             // val
             return chr(0xb0 + $ch - 1) . chr($c) . chr($v);
             break;
         case 'ChPr':
             // 0x0D = ChannelPressure
             eval("\$" . $msg[2] . ';');
             // chan
             eval("\$" . $msg[3] . ';');
             // val
             return chr(0xd0 + $ch - 1) . chr($v);
             break;
         case 'Pb':
             // 0x0E = PitchBend
             eval("\$" . $msg[2] . ';');
             // chan
             eval("\$" . $msg[3] . ';');
             // val (2 Bytes!)
             $a = $v & 0x7f;
             // Bits 0..6
             $b = $v >> 7 & 0x7f;
             // Bits 7..13
             return chr(0xe0 + $ch - 1) . chr($a) . chr($b);
             break;
             // META EVENTS
         // META EVENTS
         case 'Seqnr':
             // 0x00 = sequence_number
             $num = chr($msg[2]);
             if ($msg[2] > 255) {
                 _err("code broken around Seqnr event");
             }
             return "ÿ{$num}";
             break;
         case 'Meta':
             $type = $msg[2];
             switch ($type) {
                 case 'Text':
                     //0x01: // Meta Text
                 //0x01: // Meta Text
                 case 'Copyright':
                     //0x02: // Meta Copyright
                 //0x02: // Meta Copyright
                 case 'TrkName':
                     //0x03: // Meta TrackName ???SeqName???
                 //0x03: // Meta TrackName ???SeqName???
                 case 'InstrName':
                     //0x04: // Meta InstrumentName
                 //0x04: // Meta InstrumentName
                 case 'Lyric':
                     //0x05: // Meta Lyrics
                 //0x05: // Meta Lyrics
                 case 'Marker':
                     //0x06: // Meta Marker
                 //0x06: // Meta Marker
                 case 'Cue':
                     //0x07: // Meta Cue
                     $texttypes = array('Text', 'Copyright', 'TrkName', 'InstrName', 'Lyric', 'Marker', 'Cue');
                     $byte = chr(array_search($type, $texttypes) + 1);
                     $start = strpos($line, '"') + 1;
                     $end = strrpos($line, '"');
                     $txt = substr($line, $start, $end - $start);
                     // MM: Todo: Len could also be more than one Byte (variable length; see. "Sequence/Track name specification)
                     $len = chr(strlen($txt));
                     if ($len > 127) {
                         _err("code broken (write varLen-Meta)");
                     }
                     return "ÿ{$byte}{$len}{$txt}";
                     break;
                 case 'TrkEnd':
                     //0x2F
                     return "ÿ/";
                     break;
                 case '0x20':
                     // 0x20 = ChannelPrefix
                     $v = chr($msg[3]);
                     return "ÿ {$v}";
                     break;
                 case '0x21':
                     // 0x21 = ChannelPrefixOrPort
                     $v = chr($msg[3]);
                     return "ÿ!{$v}";
                     break;
                 default:
                     _err("unknown meta event: {$type}");
                     exit;
             }
             break;
         case 'Tempo':
             // 0x51
             $tempo = _getBytes((int) $msg[2], 3);
             return "ÿQ{$tempo}";
             break;
         case 'SMPTE':
             // 0x54 = SMPTE offset
             $h = chr($msg[2]);
             $m = chr($msg[3]);
             $s = chr($msg[4]);
             $f = chr($msg[5]);
             $fh = chr($msg[6]);
             return "ÿT{$h}{$m}{$s}{$f}{$fh}";
             break;
         case 'TimeSig':
             // 0x58
             $zt = explode('/', $msg[2]);
             $z = chr($zt[0]);
             $t = chr(log($zt[1]) / log(2));
             $mc = chr($msg[3]);
             $c = chr($msg[4]);
             return "ÿX{$z}{$t}{$mc}{$c}";
             break;
         case 'KeySig':
             // 0x59
             $vz = chr($msg[2]);
             $g = chr($msg[3] == 'major' ? 0 : 1);
             return "ÿY{$vz}{$g}";
             break;
         case 'SeqSpec':
             // 0x7F = Sequencer specific data (Bs: 0 SeqSpec 00 00 41)
             $cnt = count($msg) - 2;
             $data = '';
             for ($i = 0; $i < $cnt; $i++) {
                 $data .= _hex2bin($msg[$i + 2]);
             }
             // MM: ToDo: Len >127 has to be variable length-encoded !!!
             $len = chr(strlen($data));
             if ($len > 127) {
                 _err('code broken (write varLen-Meta)');
             }
             return "ÿ{$len}{$data}";
             break;
         case 'SysEx':
             // 0xF0 = SysEx
             $start = strpos($line, 'f0');
             $end = strrpos($line, 'f7');
             $data = substr($line, $start + 3, $end - $start - 1);
             $data = _hex2bin(str_replace(' ', '', $data));
             $len = chr(strlen($data));
             return "ð{$len}" . $data;
             break;
         default:
             _err('unknown event: ' . $msg[1]);
             exit;
     }
 }