2

私は 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 ビット Wavs をサポートしていないのか、それとも回避策があるのか​​疑問に思っています。参考までに、私のクラスは次のとおりです。

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();
        }
    }
}

洞察をありがとう。

4

1 に答える 1