我正在使用Java AudioInputStream读取.wav音频文件。音频文件是16位PCM签名的,采样率= 44100,帧大小= 2,帧长=114048。我设法以字节数组的形式获取音频数据,但我我不确定应该为该字节数组分配多少大小,以便可以将其转换为floatinf点值。我正在使用Goertzel算法进行一些音频操作,该算法需要输入float数组,例如“ float [] x”。以下是我正在使用的一些代码片段。提前致谢。
try {
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(fileIn);
}
while ( numBytesRead != -1) {
numBytesRead = audioInputStream.read(audioBytes);
// Logic goes here
floatValue = byteArrayToFloat(audioBytes);
}
音频文件是16位PCM签名的,采样率= 44100,帧大小= 2,帧长度= 114048。
我从上面假设您只有一个通道(2个字节样本* 1个通道= 2个字节帧)。
第一步是将数据作为16位整数类型的序列(short
在Java中)进行获取。
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.ShortBuffer;
...
byte[] audioBytes = ...
ShortBuffer sbuf =
ByteBuffer.wrap(audioBytes).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer();
short[] audioShorts = new short[sbuf.capacity()];
sbuf.get(audioShorts);
现在,如何将其转换为float
s取决于下游函数如何表示音频。例如,如果他们期望浮点数> = -1和<= 1,则可以执行以下操作:
float[] audioFloats = new float[audioShorts.length];
for (int i = 0; i < audioShorts.length; i++) {
audioFloats[i] = ((float)audioShorts[i])/0x8000;
}
不幸的是,有很多方法可以表示音频。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句