2016-09-01 7 views
1

JavaScriptでオーディオフロート配列をバイト文字列に変換したい。JavaScript float PCMオーディオ配列をリトルエンディアンのバイト文字列に変換するにはどうすればよいですか?

Input: [0.0007124987314455211, 0.0005752402357757092, -0.0010658394312486053, -0.0004562278045341372 ,...] 
Output: '\x02\x04\x35...' 

しかし、私は4桁の番号を取得しています:私は2桁の数字を期待していたバイトに変換して、その後、私は、この例の出力を参照して、文字列に追加することができます。どうすればバイトに正しく変換できますか?

function floatToByteString(input){ 
    //first convert to 16 bit int array 
    var intarray = new Int16Array(input.length); 
    for (var i = 0; i < input.length; i++){ 
    var s = Math.max(-1, Math.min(1, input[i])); 
    var newint = s < 0 ? s * 0x8000 : s * 0x7FFF; 
    intarray[i] = newint; 
    } 

    //second: convert 16 bit int array to little endian byte string 
    var bytestring = ""; 
    for (var i = 0; i < input.length; i++){ 
    var thisint = intarray[i] 
    var bytel = thisint & 0xff; 
    var byteb = (thisint >> 8) & 0xff; 
    bytestring += "\\x"+bytel + "" + byteb 
    } 

    return bytestring; 
} 

答えて

0

このように非常に大きな文字列を生成し、多くの不要なデータが含まれています。絶対に文字列でなければならない場合は、base64を使う方が良いでしょう。また、あなたの一時的なint配列は不必要なメモリを使用し、処理が遅くなります。

16ビット値は4桁の16進値を生成します。あなたが望む4桁の数字ではないのですか?

関連する問題