Прямо сейчас я программирую видеоигру в Android Studio с помощью LibGDX, которая может работать как на настольных компьютерах, так и на устройствах Android.

В некоторых частях игры я хочу воспроизвести звуковой эффект с помощью переменной Sound:

public Sound sound5;

В функции экрана show () я инициализирую звук, задав путь к звуковому файлу звукового эффекта:

sound5 = Gdx.audio.newSound(Gdx.files.internal("C:/Users/coder/Desktop/Catacombs - Copy/android/res/raw/nff_confirm_02.wav"));

Затем в функции hide () я удаляю звуковую переменную:

sound5.dispose();

В одной из функций моей кнопки я проигрываю звук:

sound5.play();

Когда я запускаю свою игру на рабочем столе, игра работает отлично и воспроизводит звуковой файл всякий раз, когда я нажимаю кнопку, но когда я пытаюсь запустить игру на устройстве Android, игра вылетает с FileNotFoundException, как только она запускается. Вот журнал сбоя:

E/AndroidRuntime: FATAL EXCEPTION: GLThread 24292
              Process: com.efe.gamedev.catacombs, PID: 24651
              com.badlogic.gdx.utils.GdxRuntimeException: Error loading audio file: C:/Users/coder/Desktop/Catacombs - Copy/android/res/raw/nff_confirm_02.wav
              Note: Internal audio files must be placed in the assets directory.
                  at com.badlogic.gdx.backends.android.AndroidAudio.newSound(AndroidAudio.java:181)
                  at com.efe.gamedev.catacombs.MenuScreen.show(MenuScreen.java:117)
                  at com.badlogic.gdx.Game.setScreen(Game.java:61)
                  at com.efe.gamedev.catacombs.CatacombsGame.showMenuScreen(CatacombsGame.java:25)
                  at com.efe.gamedev.catacombs.CatacombsGame.create(CatacombsGame.java:20)
                  at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:311)
                  at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1537)
                  at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1253)
               Caused by: java.io.FileNotFoundException: C:/Users/coder/Desktop/Catacombs - Copy/android/res/raw/nff_confirm_02.wav
                  at android.content.res.AssetManager.openAssetFd(Native Method)
                  at android.content.res.AssetManager.openFd(AssetManager.java:370)
                  at com.badlogic.gdx.backends.android.AndroidFileHandle.getAssetFileDescriptor(AndroidFileHandle.java:237)
                  at com.badlogic.gdx.backends.android.AndroidAudio.newSound(AndroidAudio.java:176)
                  at com.efe.gamedev.catacombs.MenuScreen.show(MenuScreen.java:117) 
                  at com.badlogic.gdx.Game.setScreen(Game.java:61) 
                  at com.efe.gamedev.catacombs.CatacombsGame.showMenuScreen(CatacombsGame.java:25) 
                  at com.efe.gamedev.catacombs.CatacombsGame.create(CatacombsGame.java:20) 
                  at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:311) 
                  at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1537) 
                  at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1253) 

Аудиофайл "nff_confirm_02.wav" действительно существует в папке raw внутри моей папки res. В имени файла нет заглавных букв и пробелов, так что это не должно быть проблемой.

Я пробовал несколько путей к аудиофайлу, например:

sound5 = Gdx.audio.newSound(Gdx.files.internal("android/res/raw/nff_confirm_02.wav"));

Или просто:

sound5 = Gdx.audio.newSound(Gdx.files.internal("raw/nff_confirm_02.wav"));

Однако оба они должны быть неверными, потому что игра вылетает как на рабочем столе, так и на Android. Я не уверен, что мне нужно сделать, чтобы устройство Android не выдало мне исключение FileNotFoundException.

Кстати, я поискал в журнале сбой и обнаружил, что там написано:

Note: Internal audio files must be placed in the assets directory.

В каталоге android моего проекта LibGDX есть каталог «assets», но всякий раз, когда я пытаюсь вставить аудиофайл, который я использую, в каталог ресурсов, он автоматически помещает файл в каталог «res» в каталоге android, так что я не думал, что это проблема.

Приветствуются любые советы, которые помогут мне воспроизвести звуковой файл в LibGDX, при этом мой путь к файлу не даст мне FileNotFoundException.

0
Acer Dash 25 Ноя 2018 в 07:24

1 ответ

Лучший ответ

Все ваши ресурсы должны находиться в папке assets модуля Android в проекте LibGDX.

Взгляните на Project Explorer:

enter image description here

Создавайте звуковой объект таким образом, когда захотите:

Sound sound = Gdx.audio.newSound(Gdx.files.internal("sounds/nff_confirm_02.wav"));
sound.play();

Для рабочего стола конфигурация должна быть такой:

enter image description here

Перекрестно проверьте путь рабочего каталога .

2
Abhishek Aryan 26 Ноя 2018 в 09:10