使用RandomAccessFile直接从文件中读取时音频样本的变化?

时间:2013-03-25 08:36:41

标签: android audio sampling

我试图绘制声音文件的图形。我正在这样做,我使用Fileinputstream获取声音文件的字节,并将其更改为短片并采取声音的样本,并根据该注释绘制图形:前45个字节是标题所以我跳过这些bytes.And我成功了。

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个字节。

1 个答案:

答案 0 :(得分: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));