У меня есть приложение 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);
}