0

バイト[2]配列形式の生のオーディオ入力にDSPエフェクトを適用しています。DSPを適用するには、バイト配列を浮動小数点配列に変換して戻す必要があります。バイト配列を浮動小数点配列に変換するには、次のコードを使用します。

private byte[] buffer;
/*
 * 
 * Converts a byte[2] to a float, in LITTLE_ENDIAN format
 */
private float getFloat(byte argB1, byte argB2) {
    return (float) (argB1 | (argB2 << 8));
}
for (int i = 0; i < N / 2; i++) { 
    curSample[i] = getFloat(buffer[i * 2],
    buffer[i * 2 + 1]);}

curSample (float 配列) を byte[2] 配列に戻す必要があります。その方法を教えてください。

4

1 に答える 1

2

byte 配列を float 配列に変換するために、行っていることはエンディアンを考慮していません。

int myInt = (byte[0] << 24) |
((byte[1] & 0xff) << 16) |
((byte[2] & 0xff) << 8) |
(byte[3] & 0xff);

または (リトルエンディアンの場合):

int myInt = (byte[3] << 24) |
((byte[2] & 0xff) << 16) |
((byte[1] & 0xff) << 8) |
(byte[0] & 0xff);

次に、これを使用して float に変換できます。

float asFloat = Float.intBitsToFloat(asInt);

バイト配列に戻すには

  int j=0;
  byte[] byteArray=new byte[4];
  int data=Float.floatToIntBits(asFloat);
  byteArray[j++]=(byte)(data>>>24);
  byteArray[j++]=(byte)(data>>>16);
  byteArray[j++]=(byte)(data>>>8);
  byteArray[j++]=(byte)(data>>>0);

ここにも同様の情報があります

于 2013-01-25T11:32:19.253 に答える