2016-08-12 14 views
1

私のアプリはPCMバイナリデータをサーバーからWeb Audio APIにストリームします。オーディオを正規化する私のJSオーディオストリーミングコードがx86システムとx86_64システムで異なるのはなぜですか?

、私は再生のために戻ってのfloat32にそれらをキャストする前に、32768によって各サンプルを分割し、Int16型に入ってくるデータをキャストするデータビューを使用します。

var data = new DataView(arrayBuffer); 

var tempArray = new Int16Array(data.byteLength/Int16Array.BYTES_PER_ELEMENT); 

var len = tempArray.length; 
for (var jj = 0; jj < len; ++jj) { 
    tempArray[jj] = data.getInt16(jj * Int16Array.BYTES_PER_ELEMENT, true); 
} 


var bufferToPlay = new Float32Array(tempArray.length); 
var channelCounter = 0; 
for (var i = 0; i < tempArray.length;) { 
    var normalizedAudio = tempArray[i]/32768; 
    i = i + 1; 
    bufferToPlay[channelCounter] = normalizedAudio; 
    channelCounter++; 
} 

ここすごみです

これを私の64ビットWinマシンで実行すると、オーディオは完璧です。しかし、私が古い32ビットのWin XPマシンを使用すると、オーディオはリサンプリング/ビット変換アーチファクトのようなサウンドでいっぱいです。

私はエンディアンについて多くのことを読んできましたが、どちらのマシンもPentiumなので、両方ともリトルエンディアンでなければなりませんよね?だからこれはどのように可能ですか?

答えて

1

各マシンのWebAudioコンテキストについては、sampleRateを確認してください。彼らは同じですか?さらに、エンディアンが間違っていると、リサンプリング/ビット変換のようには聞こえません。再サンプリングのように聞こえる場合は、2台のマシンのサンプルレートが非常に異なる可能性があります。

+0

ありがとうございます。それはサウンドカードのサンプリングレートの不一致であったことが分かります。 – user3174541

関連する問題