1

Iamはサウンドファイルのグラフを描画しようとしています。Fileinputstreamを使用してサウンドファイルのバイトを取得し、それをショートパンツに変更してサウンドのサンプルを取得し、その注に従ってグラフを描画するようにしています:最初の45バイトはヘッダーなので、これらをスキップしますそして、私はこれを行うことに成功しました。

File-->skip header(44)-->Bytes-->to shorts-->seek to point-->take samples in Shorts-->DRAW THE GRAPH

しかし、問題は、大きなオーディオファイル(2GB)のバイトをメモリに取り込むことができないことです。メモリクラッシュが発生します。

そこで、RandomAcessfileを使用してファイルから直接ショートパンツを読み取ってみました。しかし、私がこれが好きなとき、正しいグラフが得られません。読んでいるサンプルに何らかの変化があることを願っています。

File-->skip header(44)-->seek to point-->take samples in Shorts-->DRAW THE GRAPH

私の疑問は、ファイルから直接読み取ると、オーディオデータの短いサンプルに変更が発生することです?? RandomAcessFileは良い方法ですか?サンプルを変更せずに2GBのオーディオファイルのサンプルを取得する方法はありますか?

注:ヘッダーの最初の44バイトをスキップします。

4

1 に答える 1

0
                    double mPerwidth = (double) iPixel / 960;
                    int SampletoDraw;
                    long totalLen = mRfs.length() - 44;
                    SampletoDraw = (int) (totalLen * mPerwidth) * 2;
                    System.out.println(iPixel);

                    // val=mRfs.readShort()/2;
                    mRfs.seek(SampletoDraw);
                    bData[0] = mRfs.readByte();
                    mRfs.seek(SampletoDraw + 1);
                    bData[1] = mRfs.readByte();

                    val = (short) ((bData[1] & 0xff) << 8 | (bData

                                    [0] & 0xff));
于 2013-04-06T08:43:10.367 に答える