问题描述
在这里多次询问了读取.WAV文件并将其放入Java数组的问题。我研究了许多方法。我想做的是获取使用MATLAB的本机WAVread函数打开WAV文件所产生的相同值。我要分析的特定文件(为了进行信号处理)是立体声的,采样率为10000 Hz,并且是32位浮点数(我怀疑这是问题的一部分)。
在MATLAB中,此特定文件的所有值均为Double格式,最大值为3.0991,最小值为-3.0530。我也使用scipy.io.wavfile.read包在Python中获得了相同的值。
利用以下Java代码读取文件,然后将其转换为Double数组类型时:
public static double[] toDoubleArray(byte[] byteArray){
int times = Double.SIZE / Byte.SIZE;
double[] doubles = new double[byteArray.length / times];
for(int i=0;i<doubles.length;i++){
doubles[i] = ByteBuffer.wrap(byteArray,i*times,times).getDouble();
}
return doubles;
}
public static void main(String[] args) throws UnsupportedAudioFileException,IOException {
Path path = FileSystems.getDefault().getPath("").toAbsolutePath();
File file = new File(path + "/antonio_deep_fast_1.wav");
ByteArrayOutputStream out = new ByteArrayOutputStream();
AudioInputStream in = AudioSystem.getAudioInputStream(file);
int read;
byte[] buff = new byte[1024];
try {
while ((read = in.read(buff)) > 0)
{
out.write(buff,read);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.flush();
byte[] audioBytes = out.toByteArray();
for(byte byteMe:audioBytes)
System.out.println(byteMe);
double[]doubles = toDoubleArray(audioBytes);
我得到的值最高为8,最低为-9。我在Java的AudioInputStream类的其他改编版中也遇到了类似的问题,而如果我尝试使用Java Wav File IO包,则它不支持32位浮点WAV文件。
我可能已经花费了十几个小时来尝试正确读取此内容。毫无疑问,部分问题是我对WAV文件性质的不正确理解。有人能指出我的正确方向,以类似MATLAB(或scipy)的方式读取文件吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)