in reply to Converting 7 & 8-bit values

Here's a pure perl way to do it (Check it. I may have misunderstood you).

There several changes that would speed this up, but if you want the absolute fastest way, you'd be better looking at Inline::C for this.

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 ); }

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: Converting 7 & 8-bit values
by fluffy (Scribe) on Dec 03, 2006 at 17:14 UTC
    Ah yes, you're quite right: Inline C is what I really want. Well remembered, thanks.