package com.lfk.justweengine.utils.music; import android.content.res.AssetManager; import android.media.AudioManager; import android.media.SoundPool; import com.lfk.justweengine.engine.Engine; import com.lfk.justweengine.info.UIdefaultData; import com.lfk.justweengine.utils.logger.Logger; import java.io.IOException; import java.util.HashMap; /** * SoundManager sound manger * * @author liufengkai * Created by liufengkai on 16/2/5. */ public class SoundManager { private AssetManager assetManager; // sound pool private SoundPool soundPool; // musicName musicID private HashMap<String, Integer> musicMap; public SoundManager(Engine engine, int size) { engine.setVolumeControlStream(AudioManager.STREAM_MUSIC); // init this.assetManager = engine.getAssets(); this.soundPool = new SoundPool(size, AudioManager.STREAM_MUSIC, 0); this.musicMap = new HashMap<>(); } public void addSound(String musicName) { try { musicMap.put(musicName, soundPool.load(assetManager.openFd(musicName), 0)); } catch (IOException e) { e.printStackTrace(); Logger.e("Couldn't found music"); } } public void removeSound(String musicName) { if (musicMap.containsKey(musicName)) { soundPool.unload(musicMap.get(musicName)); musicMap.remove(musicName); } else { Logger.e("Couldn't found music"); } } /** * play sound * * @param musicName name in assets * @param volume sound's volume */ public void play(String musicName, float volume) { if (musicMap.containsKey(musicName)) { soundPool.play(musicMap.get(musicName), volume, volume, 0, 0, 1); } } /** * play sound with defaultMusicVolume * * @param musicName name in assets */ public void play(String musicName) { if (musicMap.containsKey(musicName)) { soundPool.play(musicMap.get(musicName), UIdefaultData.defaultMusicVolume, UIdefaultData.defaultMusicVolume, 0, 0, 1); } } /** * play sound with musicID in SoundPool * * @param musicID musicID in SoundPool */ public void play(int musicID) { if (musicMap.containsValue(musicID)) { soundPool.play(musicID, UIdefaultData.defaultMusicVolume, UIdefaultData.defaultMusicVolume, 0, 0, 1); } } /** * play sound with musicID in SoundPool * * @param musicID musicID in SoundPool * @param volume volume */ public void play(int musicID, float volume) { if (musicMap.containsValue(musicID)) { soundPool.play(musicID, volume, volume, 0, 0, 1); } } /** * Is music in map? * * @param soundName soundName * @return Is music in map? */ public boolean containSound(String soundName) { return musicMap.containsKey(soundName); } /** * Is music in map? * * @param soundID soundID * @return Is music in map? */ public boolean containSoundID(int soundID) { return musicMap.containsValue(soundID); } /** * get Music from Name * * @param soundName soundName * @return soundID */ public int getSoundID(String soundName) { return musicMap.get(soundName); } }