Ich kann keine Audiodateien in LibGdx laden

Ich möchte mit AssetManager Dateien direkt aus der Erweiterungs-OBB-Datei laden. Ich habe meine eigene implementiertFileHandleResolver

public class CustomFileHandleResolver implements FileHandleResolver
{
    @Override
    public FileHandle resolve(String fileName) {
        return new CustomFileHandle(fileName);
    }
}

Ich habe es auf meinen AssetManager eingestellt. Ich habe mein eigenes FileHandle erstellt und die Funktion read () überschrieben

@Override
public InputStream read()
{
    InputStream input = null;

    try {           
        input = GameInfo.expansionFile.getInputStream(file.getPath().replace('\\', '/'));
    } catch (IOException e) {
        e.printStackTrace();
    }   

    return input;
}

Es lädt alle Dateien wie .PNG, .PACK, .FNT, mit Ausnahme von .OGG-Dateien, so dass ich vermute, dass nicht alle Sounddateien geladen werden. Ich erhalte diesen Fehler:

com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load dependencies of asset: SFx/button_click.ogg

Und dieser Fehler:

com.badlogic.gdx.utils.GdxRuntimeException: java.lang.ClassCastException: com.solidgamesstudio.threedefendersn.framework.CustomFileHandle cannot be cast to com.badlogic.gdx.backends.android.AndroidFileHandle

Ich habe gelesen, dass zip nicht komprimiert werden kann. In 7zip habe ich die Komprimierung auf "Speichern" gewählt, damit sie überhaupt nicht komprimiert wird, aber trotzdem tritt dieses Problem auf.

Ich habe überflogen, was passiert, wenn Dateien geladen werden, und festgestellt, dass AssetManager my aufruftCustomFileHandleResolver was schafftCustomFileHandle. Für jede Datei, die nicht .OGG ist, wird aufgerufenInputStream read(). In dieser Funktion wird die Datei von der Zip geladen und es ist in Ordnung. Aber wie gesagt, beim Laden von .OGG wird diese Funktion nicht aufgerufen. Es wird also noch nicht einmal versucht, die Datei aus der Zip zu holen. Die Frage ist, warum die .OGG-Datei nicht aufruftInputStream read() imCustomFileHandle()?

AKTUALISIEREN

Ich bin mehr durchgegangen und habe herausgefunden, dass es nicht klingeltInputStream read() weil es irgendwie keinen Sound von FileHandle erzeugen kann. Anhaltspunkt dafür ist

CustomFileHandle cannot be cast to AndroidFileHandle

Während Sie einen Sound erstellen, müssen Sie fileHandle übergeben.

public Sound newSound (FileHandle fileHandle);

Dies wird abgerufenSoundLoader

@Override
public void loadAsync (AssetManager manager, String fileName, FileHandle file, SoundParameter parameter) {
    sound = Gdx.audio.newSound(file);
}

Und dieser SoundLoader benutzt meinen CustomFileHandleResolver. Ich weiß nicht, ob Sounds anders behandelt werden als andere Dateitypen. Aber standardmäßig verwendet AssetManager

public class InternalFileHandleResolver implements FileHandleResolver {
    @Override
    public FileHandle resolve (String fileName) {
        return Gdx.files.internal(fileName);
    }
}

Ich kann nicht hineinkommenGdx.files.internal um zu sehen, ob es eine spezielle Behandlung für Sounds gibt.

AKTUALISIEREN

Weitere Analysen geben mir Anhaltspunkte dafür, dass das Hauptproblem das oben erwähnte ist.

CustomFileHandle cannot be cast to AndroidFileHandle

Ich weiß nicht, warum mein FileHandle beim Laden der OGG-Datei in AndroidFileHandle umgewandelt wird. Wenn andere Dateitypen geladen werden, bedeutet dies wahrscheinlich, dass kein Casting für sie durchgeführt wird. Das bedeutet, dass OGG etwas Besonderes ist und gegossen werden muss. Irgendwelche Hinweise?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage