0

サウンドファイルをbytearrayにロードしました。波形のポイントをプロットするための情報を取得するために次に何をしなければならないかについて、私は混乱しています。オンラインで見つけたものから、別のアレイを作成する必要がありますか?サンプルがどのように収集されるかがよくわからないので、誰かがこれがどのように機能するかを説明してもらえますか?

4

1 に答える 1

3

サンプルは、ファイル形式に従って収集されます。オーディオ形式が 8 ビット 1 チャンネルのオーディオ ファイルであるとしましょう。

これは最も単純なケースです。byte[] を繰り返し処理し、保存された値を振幅として描画することができます。

ファイルが 16 ビット オーディオ ファイルの場合、各サンプルは 2 バイトで構成されるため、サンプルごとに 2 バイトを調べる必要があります。これを行うには、次のメソッドを呼び出します。

private int getSixteenBitSample(int high, int low) {
    return (high << 8) + (low & 0x00ff);
}

サンプルごとに bytearray の最初と 2 番目のバイトを連結します。したがって、ループは次のようになります。

int sampleArray[] = new int[numSamples];

for(int i = 0, j=0;i < bytearray.length;)
{
    int iLow = bytearray[i];
    i++;
    int iHigh = bytearray[i];
    i++;

    sampleArray[j] = getSixteenBitSample(iHigh, iLow);
    j++;
}

3 番目のケースは、ファイルが 16 ビット ステレオ オーディオ ファイルである場合です。その場合、各サンプルには 2 バイトがあり、各バイトの後にチャネルが変更されます。

例えば:

First read sample 1 from byte 0 and byte 1. -> First sample of channel 1
Second read sample 2 from byte 2 and byte 3 -> First sample of channel 2
Third read sample 3 from byte 4 and byte 5 -> Second sample of channel 1
Forth read sample 4 from byte 6 and byte 7 -> Second sample of channel 2

さらに詳細な説明については、このページをご覧ください

于 2012-11-08T14:19:43.727 に答える