我有一些wav阅读的麻烦。 我必须为每个样本读取一个wav文件样本。
要做到这一点,我首先尝试打印我的128个第一个样本,看看我是否有好的价值(我知道它们是什么)。要做到这一点:
private int bytesToInt(byte[] fenetre, int debut, int nbByte) {
int res = 0;
for (int i = 0; i < nbByte; i++) {
res <<= 8;
res += fenetre[debut + i];
}
return res;
}
public void afficherPremiereFenetre() throws IOException {
int tailleFenetre = 128;
int nbBytePerSample = au.getFormat().getFrameSize();
int nbBytePerFrame = tailleFenetre * nbBytePerSample;
byte[] fenetre = new byte[nbBytePerFrame];
au.read(fenetre, 0, nbBytePerFrame);
for (int i = 0; i < nbBytePerFrame; i += nbBytePerSample) {
System.out
.println((double) bytesToInt(fenetre, i, nbBytePerSample));
}
}
所以我的问题是:如何真正将我的byte []帧翻译为double?
答案 0 :(得分:1)
您可以使用java.nio.ByteBuffer
ByteBuffer.wrap(fenetre).getDouble();
给定一个直接字节缓冲区,Java虚拟机将做到最好 努力直接执行本机I / O操作。这就对了 将尝试避免将缓冲区的内容复制到(或来自) 中间缓冲区之前(或之后)每次调用其中一个 底层操作系统的本机I / O操作。