0

我正在尝试从特定格式的文件中获取 AudioInputStream。当我在其中打开文件时,fileStream我得到一个正的 frameLength,这意味着可以读取文件并且 AudioInputStream 有效地包含数据。现在我想用 AudioSystem 转换它,AudioSystem.getAudioInputStream(format, fileStream);并且获得的流audioStream的 frameLength 为-1。我什至确保支持转换,而且确实如此。

public void openFile() throws IOException, UnsupportedAudioFileException, LineUnavailableException {
    AudioInputStream fileStream = AudioSystem.getAudioInputStream(audioFile);
    AudioFormat format = new AudioFormat(sampleRate, 8, 1, true, true);
    boolean supported = AudioSystem.isConversionSupported(format, fileStream.getFormat());
    if(supported) {
        audioStream = AudioSystem.getAudioInputStream(format, fileStream);
        System.out.println("Opened file: " + audioFile.getName());
    }else{
        System.out.println("Couldn't open file: " + audioFile.getName());
        throw new IOException();
    }
}

我完全被卡住了,我还没有找到任何有同样问题的人。我欢迎任何关于不同库的建议,但我更愿意继续使用这个,因为我已经习惯了。

4

1 回答 1

1

好吧想通了,我傻了。

根据 AudioSystem 常量,frameLength 为 -1,NOT_SPECIFIED这意味着在转换音频时,您会丢失该信息。

我当时认为这是问题所在,因为另一个不相关的问题。

于 2021-06-28T15:04:52.980 回答