Java getAudioInputStream 试图读取音频文件,得到 javax.sound.sampled.UnsupportedAudioFileException,

Posted

技术标签:

【中文标题】Java getAudioInputStream 试图读取音频文件,得到 javax.sound.sampled.UnsupportedAudioFileException,【英文标题】:Java getAudioInputStream trying to read audio file, getting javax.sound.sampled.UnsupportedAudioFileException, 【发布时间】:2018-11-25 14:40:38 【问题描述】:

我正在尝试使用我在此处找到的代码在我的 java 程序中加载一个 wav 文件:How do I get a sound file's total time in Java?

但是,在第 14 行:

AudioInputStream audioInputStream = Audiosystem.getAudioInputStream(file);

我得到了错误

“未处理的异常:javax.sound.sampled.UnsupportedAudioFileException, java.io.IOException”

这是我的代码:

import java.nio.file.FileSystems;
import java.io.File;
import java.nio.file.Path;
import javax.sound.sampled.*;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;

public class Main 

    public static void main(String[] args) 
        Path path = FileSystems.getDefault().getPath("").toAbsolutePath();
        File file = new File(path+"/sample/loop1.wav");
        AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
        AudioFormat format = audioInputStream.getFormat();
        long audioFileLength = file.length();
        int frameSize = format.getFrameSize();
        float frameRate = format.getFrameRate();
        float durationInSeconds = (audioFileLength / (frameSize * frameRate));
    


我想制定一种方法来选择音频文件中的开始播放点(例如:在 30 秒开始播放文件)。这就是为什么我不想检索文件的持续时间。

当我执行System.out.println(file); 时,它会打印出我文件的正确路径。 但是,由于我收到一条错误消息,我显然没有做正确的事情。

我已经尝试在网上找到解决方案,但我没有找到任何东西,所以我在这里发布。

感谢您的关注。

【问题讨论】:

【参考方案1】:

AudioSystem.getAudioInputStream 抛出这些异常。

这些是checked exceptions,因此您必须使用try ... catch 块来捕获异常或在方法声明中添加throws 子句。

基本的try ... catch 是:

try
 
   Path path = FileSystems.getDefault().getPath("").toAbsolutePath();
   File file = new File(path + "/sample/loop1.wav");

   AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);

   AudioFormat format = audioInputStream.getFormat();

   long audioFileLength = file.length();
   int frameSize = format.getFrameSize();
   float frameRate = format.getFrameRate();
   float durationInSeconds = (audioFileLength / (frameSize * frameRate));
 
catch (UnsupportedAudioFileException | IOException ex)
 
   ex.printStackTrace();
 

【讨论】:

以上是关于Java getAudioInputStream 试图读取音频文件,得到 javax.sound.sampled.UnsupportedAudioFileException,的主要内容,如果未能解决你的问题,请参考以下文章

getAudioInputStream 无法将 [立体声,4 字节/帧] 流转换为 [单声道,2 字节/帧]

java声音淡出

Java中读文件操作

分析音频文件java

从java中的Url获取音频持续时间

icecast 音频客户端的问题