我试图绘制声音文件的图形。我正在这样做,我使用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个字节。
答案 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));