2016-07-11 22 views
2

JavaScriptでは、オーディオデータのストリームを符号付きPCM値の配列に変換できるように、2バイトを16ビット整数に変換する必要があります。JavaScriptで符号付き16ビット整数に2バイトを変換する

バイトを16ビット整数に変換するためのほとんどの答えは、以下を使用しますが、負の数では正しく機能しません。

var result = (((byteA & 0xFF) << 8) | (byteB & 0xFF)); 

答えて

1

ネガは2の補数で表され、JavaScriptは32ビットの整数を使用してビット単位の演算を実行することを考慮する必要があります。このため、負の値の場合は、数値の最初の16ビットを1で埋める必要があります。したがって、ここに解決策があります:

var sign = byteA & (1 << 7); 
var x = (((byteA & 0xFF) << 8) | (byteB & 0xFF)); 
if (sign) { 
    result = 0xFFFF0000 | x; // fill in most significant bits with 1's 
} 
関連する問題