0

複数のバイト配列を 1 つに追加しようとすると問題が発生します。ここで連結について話しているのではありません。Byte[] の個々の項目を追加する必要があります。これは私が探しているものです。

    byte[] one = [4,5,6];
    byte[] two = [1,2,1];

結果は

    byte[] sum = [5,7,7];

これは簡単な例です。Android で異なる pcm 録音をミックスする独自のアルゴリズムを作成しています。これは私が立ち往生しているところです。どんな助けでも大歓迎です。

アップデート:

ここに私のコードスニペットがあります:

while(stream[1].read()!=-1) {   
List<byte[]> arrayColl = new ArrayList<byte[]>();
for(int i =0; i<recfiles.length; i++) {
stream[i].read(buffer);
arrayColl.add(buffer);
}
}

ユーザーの選択に基づいて、複数のストリームが存在する可能性があります。上記のループは、バッファ内の複数のストリームを読み取り、そのバッファが ArrayList に追加されます。今私がする必要があるのは、上記の方法で配列リストのバイトを混合することです。bufferは_byte[]

4

2 に答える 2

1

複数のバイト配列を追加するには、それぞれをループして、結果をアキュムレータ配列に追加する必要があります。

public byte[] sum(byte[]... arrays) {
    // optional: check that arrays.length > 0 (at least one array was passed)
    final int len = arrays[0].length;
    final byte[] result = new byte[len];
    for (byte[] array : arrays) {
        // optional: test that array has length len
        for (int i = 0; i < len; ++i) {
            result[i] += array[i];
        }
    }
    return result;
}
于 2013-06-02T01:48:06.307 に答える
0

あなたが探しているのは、単純な行列の追加です。for次のように、ループの添え字演算子の領域 (つまり、from から0配列の長さまで) を反復処理することにより、ループでこれを実現できます。

int length = Math.min(one.length, two.length);
byte[] sum = new byte[length];
for (int i = 0; i<length; i++) {
    sum[i] = one[i] + two[i];
}

または、2 つの配列が同じサイズであることを確認する場合は、次を使用できます。

if (one.length != two.length) {
    throw new IllegalArgumentException("unequal lengths");
}
int length = one.length; // or two.length
byte[] sum = new byte[length];
for (int i = 0; i<length; i++) {
    sum[i] = one[i] + two[i];
}
于 2013-06-02T01:33:04.103 に答える