Android应用程序中使用Libgdx没有声音

4
我正在使用Libgdx创建一个Android应用程序。如果我在桌面版本和模拟器上运行程序,声音效果非常好。
但是,当我在我的安卓手机(Galaxy S3)上测试应用程序时,没有声音。我的设备上其他所有功能都很正常,除了完全没有声音。请问有人知道问题出在哪里吗?
如果需要代码或日志,请向我询问,我可以为您发布它!
以下示例显示了我播放声音的方式:
import com.badlogic.gdx.audio.Sound;

public class LevelDesigner {

    public LevelDesigner() {

    Sound mp3Sound = Gdx.audio.newSound(Gdx.files.internal("data/sounds/sound.mp3"));
    mp3Sound.loop();
    }
}

在这里可能会展示一些代码! - daniel
我也看到了这个 https://github.com/libgdx/libgdx/issues/1366,它提到声音大小太小的问题。这并没有对我有所帮助,但我认为值得参考,以防这是你的问题。 - Martin Capodici
1
如果声音文件大于1MB(Android),使用“Music”类比“Sound”更好。我使用“Music”类解决了这个问题。 - Lakhwinder Singh Dhillon
4个回答

4
有时声音不会在加载它的同一帧播放,尝试等待一帧。或在另一个类中播放它。
参考:加载后声音无法播放

2

在播放之前加载音频并验证是否已加载。我也曾遇到同样的问题,这种方法很有效。

public void create(){
    assetManager = new AssetManager();
    assetManager.load("path/to/sound.mp3", Sound.class);
    assetManager.finishLoading(); //Important!
}

//The load must be tested within the loop;
public void render(){
    if (assetManager.isLoaded("path/to/sound.mp3")){
        sound = assetManager.get("path/to/sound.mp3", Sound.class);
        sound.play();
    }
}

为什么我要检查 finishLoading(),它应该会阻塞直到所有东西都加载完毕。这似乎不合逻辑。 - JohnyTex

1
以下代码在设备上运行良好:
public class LevelDesigner {

   private AssetManager assetManager;

   public LevelDesinger {
      assetManager = new AssetManager();
      assetManager.load("data/sounds/loop.ogg", Music.class);
   }

   public boolean startMusic() {

      if(assetManager.isLoaded("data/sounds/loop.ogg")) {
          Music music = assetManager.get("data/sounds/loop.ogg", Music.class);
          music.play();
          music.setLooping(true);
      }else {
          System.out.println("not loaded yet");
          return false;
      }
      return true;
   }
}

解释:检查声音是否已加载非常重要。如果没有加载并且您尝试播放它,它不会抛出异常,因此对于初学者来说很难找到问题;)...


我无法编辑。这一行:assetManager = new assetManager() 需要更改为 assetManager = new AssetManager(); - Herb Meehan

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接