Звуковой файл работает нормально на рабочем столе с LibGDX, но вылетает на устройстве Android - PullRequest
0 голосов
/ 25 ноября 2018

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

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

public Sound sound5;

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

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", но всякий раз, когда я пытаюсь вставить используемый мной аудиофайл в каталог assets, он автоматически помещает файл в каталог "res"в каталоге android, так что я не думал, что это была проблема.

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

1 Ответ

0 голосов
/ 26 ноября 2018

Все ваши активы должны быть в папке 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

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

...