我有一个在Eclipse中运行良好的程序;音乐很好用。但是,当我将它导出到一个可运行的jar中,并将库打包到jar中时,音乐无法播放。音乐文件在正确的目录中,我提取了jar并进行了检查。声音效果也很好。这只是音乐不起作用。
我不认为这是文件的问题,因为我导出jar,解压缩jar,用提取的文件打开文件夹,然后点击音乐文件播放它,它工作得很好...... 。任何帮助?
以下是代码:
package com.me.mygame;
import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Music;
public class MyGame extends Game {
Game game;
Music music;
@Override
public void create() {
music = Gdx.audio.newMusic(Gdx.files.internal("Music.wav"));
music.setLooping(true);
music.play();
game = this;
setScreen(new Splash(game));
}
@Override
public void dispose() {
music.dispose();
}
}
Music.wav文件位于android项目的assets文件夹中,这是传统上应该用LibGdx存储资源的方式。令我困惑的是SFX的工作,但它只是音乐不起作用,而且它们在同一个目录中。正如我所说,音乐文件被放入jar文件,因为我能够提取它,找到它,并从提取的文件夹中播放它。
答案 0 :(得分:2)
没关系,大家好。我解决了;我将文件从WAV转换为MP3。我猜Eclipse有WAV文件的问题,如果它们太大了,因为我的Music.wav大约7mb不行,但我的Soundeffect.wav小于1mb工作正常。不管怎样,谢谢你的所有答案。
答案 1 :(得分:0)
以下是您需要了解的一些事项:
当你从eclipse运行时,你只是简单地处理文件,你可以简单地处理它们。
当你编制你的jar时,事情会变得稍微复杂一些。例如,您需要以不同的方式访问它们,我不确定LibGDX的工作原理,但我希望这些示例可以提供帮助:
在src
目录中创建一个文件夹,我通常称之为res
,将您的声音文件放在/src/res/...
现在,当您想要访问它们时,您可以
getClass().getResource(String location);
所以你可以做到
getClass().getResource("/res/soundfile.wav");
这将返回一个可以使用的给定文件的URL。
如果您需要流,则可以
getClass().getResourceAsStream("/res/soundfile.wav");
这将为您编译jar中的文件作为InputStream!这个方法适用于编译和eclipse版本。