package com.ceshi.tsgame.shake;

import java.util.HashMap;
import com.jx.jyhd.R;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;

/**
 * 声音所需工具
 * @author wangyue
 * */
public class NeedForSound {

	/** 摇一摇需要的声音池view */
	private  SoundPool sndPool = null;

	private HashMap<Integer, Integer> soundPoolMap = null;
	
	private static NeedForSound needForSound = null;

	public static NeedForSound getInstance() {
		if (needForSound == null) {
			needForSound = new NeedForSound();
		} 
		return needForSound;
	}

	/** 添加声音 */
	public  void addSound(final Context context) {
		soundPoolMap = new HashMap<Integer, Integer>();
		//第一个参数指定支持多少个声音；第二个参数指定声音类型：第三个参数指定声音品质。
		sndPool = new SoundPool(3, AudioManager.STREAM_SYSTEM, 5);
		new Thread() {
			public void run() {
				try {
					//http://www.tuicool.com/articles/yuyQ3a
					soundPoolMap.put(0, sndPool.load(context.getResources().openRawResourceFd(R.raw.shake_sound_male), 1));
					soundPoolMap.put(1, sndPool.load(context.getResources().openRawResourceFd(R.raw.shake_match), 1));
					soundPoolMap.put(2, sndPool.load(context.getResources().openRawResourceFd(R.raw.shake_nomatch), 1));
				} catch (NullPointerException e) {
				}
			}
		}.start();
	}

	/** 播放摇一摇开始声音 */
	public  void playStartSound() {
		try {
			sndPool.play(soundPoolMap.get(0), (float) 1, (float) 1, 1, 0, (float) 1.2);// 播放摇一摇过程声音
		} catch (NullPointerException e) {
		} catch (IndexOutOfBoundsException e) {
		}
	}

	/** 播放摇一摇结束声音 */
	public  void playEndSound() {
		try {
			//该方法的第一个参数指定播放哪个声音； leftVolume 、 rightVolume 指定左、右的音量： priority 指定播放声音的优先级，数值越大，优先级越高； loop 指定是否循环， 0 为不循环， -1 为循环； rate 指定播放的比率，数值可从 0.5 到 2 ， 1 为正常比率。
			sndPool.play(soundPoolMap.get(1), (float) 1, (float) 1, 0, 0, (float) 1.0);// 播放摇一摇结果声音
		} catch (NullPointerException e) {
		} catch (IndexOutOfBoundsException e) {
		}
	}

	/** 什么都没摇到 */
	public  void playNothingSound() {
		try {
			sndPool.play(soundPoolMap.get(2), (float) 1, (float) 1, 0, 0, (float) 1.0);// 播放摇一摇结果声音
		} catch (NullPointerException e) {
		} catch (IndexOutOfBoundsException e) {
		}
	}
}
