引用filepath时的filenotfoundexception

时间:2014-03-01 19:40:45

标签: java audio libgdx filepath

我正在尝试开发一款使用歌曲的游戏。这首歌作为背景音乐播放。

我正在尝试分析音频频谱的当前频率并输出其值。我已经使用FFT算法来获得频率,但现在我需要得到歌曲的长度。所以我正在使用这段代码:

FileHandle filemain = Gdx.files.internal("data/determination.mp3");
        File file = new File(filemain.toString());
        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));

然后它返回FILENOTFOUNDEXCEPTION。使用Gdx.files.internal("data/determination.mp3");它工作正常。但我不能在AudioInputSream声明中使用它,因为它需要一个文件,而不是文件句柄。如果我像上面一样使用AudioInputStream中的文件路径,则会返回错误。

我哪里错了?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:-1)

查看File对象的Java 7 API,特别是关于构造函数的部分,看起来这个对象需要使用String来构造,该String为文件或URI提供正确的文件路径。

在此处查看指向文件的所有可用重载构造函数的链接:docs.oracle.com/javase/7/docs/api/java/io/File.html#constructor_summary

尝试这样:将mp3文件位置作为String对象提供给File对象的构造函数,就像对FileHandle对象构造函数一样。或者,将.mp3放在文件系统上的其他位置,并尝试使用绝对路径调用它。

如果这不起作用,请参阅此文档,了解有关从文件中读取文件和在游戏引擎中创建FileHandle对象的各种方法:Different ways to construct FileHandle objects

这也有关于FileHandle对象API的大量信息:FileHandle API

祝你的电子游戏好运。我想有一天尝试你用于游戏的游戏引擎。无论是这个还是jMonkey3D游戏引擎。 :D