отставание звука в libgdx (менее одной секунды, но заметно) ... Java / LibGDX - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть приложение Java / Libgdx среднего размера, в котором все звуковые клипы немного задерживаются при воспроизведении. Каждый из них загружается с менеджером активов в начале приложения. Они варьируются в размерах от 7 до 220 кб. Я попытался уменьшить и увеличить размер файлов. Я пробовал как WAV, так и OGG. Два класса обрабатывают операции, связанные со звуками, AssetMgr и Sounds. После загрузки звуков через диспетчер ресурсов выполняются действия класса Sounds. При необходимости я могу опубликовать ссылки на классы в GitHub. Что касается потребления памяти, в то время как в остальном довольно маленькая игра, существует довольно крупная графика, но в целом она составляет менее 1 МБ. Я загружаю карты пикселей для нескольких меньших.

Звучит очередь для загрузки с менеджером активов ... // elements = Список звуков для загрузки. Должен включать полный путь и расширение. Пример: "assets \ beep.wav", "assets \ click.wav". public void queueSounds (String ... elements) {

    // The function adds the passed sounds to the asset manager for future loading.

    // Loop through each element passed to function.
    for (String element : elements)
    {
        // Add current element in loop to queue.
        manager.load(element, Sound.class);
    }

}

Копирование ссылок на хеш-карты в классе Sounds (пожалуйста, игнорируйте музыкальную часть) ...

    String filePath; // (Relative) path to sound or music -- used as key in asset manager.
    String musicKey; // Key to use with hash map -- one of the MusicEnum values, as a String.
    String soundKey; // Key to use with hash map -- one of the SoundEnum values, as a String.

    // Initialize the hash maps.
    soundMap = new HashMap<>();
    musicMap = new HashMap<>();

    // Populate hash map for sounds.

    // Loop through sound enumerations.
    for (HeroineEnum.SoundEnum soundEnum : HeroineEnum.SoundEnum.values())

    {

        // Get key / file path for sound.
        filePath = soundEnum.getValue_FilePath();

        // Get enumerated value for the sound, as a String.
        soundKey = soundEnum.toString();

        // Add sound related to current enumeration to hash map.
        soundMap.put(soundKey, hdg.getAssetMgr().manager.get(filePath));

    }

Воспроизведение звука ...

// whichSound = Name of sound to play.  Corresponds to one of the enumerated 
values in SoundEnum.
public void playSound(HeroineEnum.SoundEnum whichSound)
{

    // The function plays the passed sound -- matching the enumerated key value to the key in the hash map.

    // Play sound.
    soundMap.get(whichSound.toString()).play(audioVolume);

}
...