Java音频系统:读取32位Wav文件

Java音频系统:读取32位Wav文件,java,wav,javax.sound.sampled,Java,Wav,Javax.sound.sampled,我正在读取16位和24位采样位深度的音频文件,并对它们进行解析以确定它们的长度。然而,当读取32位文件时,我得到 javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1170) ... 32位测试文件以与其

我正在读取16位和24位采样位深度的音频文件,并对它们进行解析以确定它们的长度。然而,当读取32位文件时,我得到

javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1170)
...
32位测试文件以与其他测试文件(线性PCM)相同的方式手动编码。我想知道AudioSystem是否不支持32位WAV,或者是否有解决办法。作为参考,以下是我的课程:

import java.io.*;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;

public class soundUtility {
    public static double getWavDuration(File filename)
    {   
        AudioInputStream stream = null;
        try 
        {
            stream = AudioSystem.getAudioInputStream(filename);
            AudioFormat format = stream.getFormat();
            return filename.length() / format.getSampleRate() / (format.getSampleSizeInBits() / 8.0) / format.getChannels();
        }
        catch (Exception e) 
        {
            e.printStackTrace();
            return -1;
        }
        finally
        {
            try { stream.close(); } catch (Exception ex) { }
        }
    }

    public static void main(String[] args) {

    try {
        // ===== TESTS: toggle these calls to test the included files =====
        // File soundFile = new File("16bit.mono.441k.30secs.wav");
        // File soundFile = new File("24bit.48k.11secs.stereo.wav");
        File soundFile = new File("32bit.Floating.Stereo.48k.wav");
        // ===========

        System.out.println(getWavDuration(soundFile));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

谢谢你的见解。

这是一个老问题,但这只是我自己在研究的问题。我的测试可以确认16位48kHz PCM工作,32位不工作

然而,我的测试也表明24位不起作用:

 No line matching interface Clip supporting format PCM_SIGNED 48000.0 Hz, 24 bit, stereo, 6 bytes/frame, little-endian is supported.
这是一个以96Khz、32位创建的.wav文件,从Audacity导出,在Audacity中它被渲染为24位48Khz的wav

这似乎反映在文件中:

“声音格式:8位和16位音频数据,单声道和立体声,采样率从8 kHz到48 kHz”


因此,恐怕没有可用的32位浮点运算,我无法重现24位浮点运算有效的结果。

没有,对不起。最后,我将文件转换为16位。