sub toMidi { my $out = ''; for my $batch ( unpack '(a7)*', $_[ 0 ] ) { $batch .= chr(0) x ( 7 - length( $batch )); my @bytes = unpack 'C7', $batch; my $h = 0; $h = ( $h >> 1 ) | ( 0x80 & $bytes[ $_ ] ) for 0 .. 6; $bytes[ $_ ] &= 0x7f for 0 .. 6; $out .= pack 'C8', $h >> 1, @bytes; } return $out . chr( 0xf7 ); }