Как загрузить объект Sound в tinySound в коде Visual Studio? - PullRequest
0 голосов
/ 10 июля 2020

Вот пример, предоставленный библиотекой tinySound : https://github.com/finnkuusisto/TinySound/blob/master/example/TinySoundExample.java

Я прочитал пример и написал базовый c фрагмент кода для тестирования его функции:

TinySound.init();
Music forest = TinySound.loadMusic("absolutepath/day.ogg");
forest.play(true);

После выполнения я получаю:

Unable to find resource /absolutepath/day.ogg!

Я работаю с кодом Visual Studio, и мне было интересно, почему java не может найти файл, хотя путь ввод является абсолютным, и ресурс находится в рабочей области.

Вот сокращенная древовидная структура проекта:

/Project
 |------/ResourceMusic-----/forest----day.ogg
 |------/lib
 |------/bin
 |------/src----Main.java (location of my test of tinySound)

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Немного поработав, я нашел альтернативу абсолютным путям для tinySound в vs c.

Это выглядит следующим образом:

File aFilesound = new File("relativePath/file.wav");
Music fileMusic = TinySound.loadMusic(aFilesound);
fileMusic.play();

Таким образом, папка ресурсов не обязательно находиться в папке sr c для работы musi c.

0 голосов
/ 11 июля 2020

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

Project/src/Main.java
Project/ResourceMusic/forest/day.ogg

Я бы попробовал следующее:

  Music forest = TinySound.loadMusic("ResourceMusic/forest/day.ogg");

Но я не 100 % уверен, что это сработает.

Вот мое лучшее понимание того, что происходит.

Литеральный класс TinySound содержит следующий код для чтения ресурса (после выполнения нескольких проверок):

URL url = TinySound.class.getResource(name);

Теперь, если бы name был относительным адресом, можно было бы ожидать, что файл будет расположен относительно папки, в которой находится сам класс TinySound. Но поскольку перед ним стоит «/» (что можно увидеть, посмотрев на источник), используется адрес absolute . Таким образом, верхняя папка исходного кода проекта используется как адрес root.

Например, у меня есть проект Eclipse под названием «ScratchPad». В этом пакете, называемом «dodads», со следующим классом:

package dodads;

import java.net.URL;

public class TestAbsoluteAddressing
{

    public static void main(String[] args)
    {
        TestAbsoluteAddressing taa = new TestAbsoluteAddressing();
        taa.doAbsTest();
    }

    private void doAbsTest()
    {
        URL url = this.getClass().getResource("myAudio.wav");
        URL url2 = this.getClass().getResource("/myAudio.wav");
    
        if (url != null) System.out.println("relative found");
        else System.out.println("relative not found");
    
        if (url2 != null) System.out.println("absolute found");
        else System.out.println("absolute not found");
    }
}

Следующая файловая структура выявляет «относительное найдено» и «абсолютно не найдено»:

ScratchPad/src/doodads/TestAbsoluteAddressing.java
ScratchPad/src/doodads/myAudio.wav

следующая файловая структура выявляет «относительный не найден» и «абсолютный найден»:

ScratchPad/src/doodads/TestAbsoluteAddressing.java
ScratchPad/src/myAudio.wav

Теперь вызывает беспокойство то, что структура файлов, которую вы мне предоставили, не включает папку с файлами «sr c» . Так что я не совсем уверен, что указанная мной адресация сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...