我正在尝试开发一款使用歌曲的游戏。这首歌作为背景音乐播放。
我正在尝试分析音频频谱的当前频率并输出其值。我已经使用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
中的文件路径,则会返回错误。
我哪里错了?我该如何解决这个问题?
答案 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