对音频的管理

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;

internal class AudioMngr 
{
private static AudioMngr _this = new AudioMngr();

public ResCacher cacher;
private Dictionary<string , SoundData> soundDict = new Dictionary<string , SoundData>(0x200);
private List<KeyValuePair<string , Res>> soundResList;
public ResCacher tempCacher;

public static AudioMngr GetInstance()
{
return _this;
}

/// <summary>
/// 获取音频
/// </summary>
/// <param name="soundName">音频名</param>
/// <returns>返回音频片段</returns>
public AudioClip GetSound(string soundName)
{
SoundData data = null;
if(soundName!=null)
{
soundName = soundName.ToLower();
if(this.soundDict.TryGetValue(soundName,out data)&& (data!=null))
{
return data.clip;
} 
}
return null;
}

/// <summary>
/// h获取音乐片段,并返回他的容量大小
/// </summary>
/// <param name="soundName"></param>
/// <param name="volume"></param>
/// <returns></returns>
public AudioClip GetSound(string soundName,out float volume)
{
SoundData data = null;
if(string.IsNullOrEmpty(soundName))
{
volume = 0f;
return null;
}
soundName = soundName.ToLower();
//在音乐片段中查找
this.soundDict.TryGetValue(soundName , out data);
if(data==null)
{
volume = 0f;
return null;
}
volume = data.volume;
return data.clip;
}

/// <summary>
/// 
/// </summary>
/// <param name="soundName"></param>
/// <param name="volume"></param>
/// <param name="priority">优先级</param>
/// <returns></returns>
public AudioClip GetSound(string soundName,out float volume,out int priority)
{
SoundData data = null;
if(string.IsNullOrEmpty(soundName))
{
volume = 0f;
//80
priority = 0x80;
return null;
}
soundName = soundName.ToLower();
//从音频字典中尝试取出音频
this.soundDict.TryGetValue(soundName , out data);
if(data==null)
{
volume = 0f;
priority = 0x80;
return null;
}
volume = data.volume;
priority = data.priority;
return data.clip;
}

/// <summary>
/// 加载声音
/// </summary>
public void Load()
{
this.LoadSound();
if (GlobalMngr.GetInstance().memMode == SettingLevelEnum.LOW)
{
this.cacher = ResCacheMngr.GetInstance().AddCacher("audio" , 0);
this.tempCacher = ResCacheMngr.GetInstance().AddCacher("audio" , 0);
}
else if (GlobalMngr.GetInstance().memMode == SettingLevelEnum.MEDIUM)
{
this.cacher = ResCacheMngr.GetInstance().AddCacher("audio" , 3);
this.tempCacher = ResCacheMngr.GetInstance().AddCacher("audio" , 0);
}
else if (GlobalMngr.GetInstance().memMode == SettingLevelEnum.HIGH)
{
this.cacher = ResCacheMngr.GetInstance().AddCacher("audio" , 3);
this.tempCacher = ResCacheMngr.GetInstance().AddCacher("audio" , 3);
}
else
{
this.cacher = ResCacheMngr.GetInstance().AddCacher("audio" , 10);
this.tempCacher = ResCacheMngr.GetInstance().AddCacher("audio" , 10);
}

}

/// <summary>
/// 资源加载
/// </summary>
private void LoadSound()
{
this.soundResList = new List<KeyValuePair<string , Res>>(0x80);
//采用assetBundle 方式 路径
string str = "Audio/sound/";
string resourcePath = "Audio/sound";
//将音频text文件加载进入
TextAsset assetToUnload = (TextAsset)ResMngr.GetInstance().LoadSync("audio" , resourcePath).GetObject();
if (assetToUnload == null)
{
Debug.LogWarning("failed to parse file: " + resourcePath + ". file is not found.");
}
else
{
char[] separator = new char[] { '\n' };
string[] strArray = assetToUnload.text.Split(separator);
int num = 0;
foreach (string str3 in strArray)
{
num++;
string str5 = str3.Replace("\r" , string.Empty);
if (str5 != string.Empty)
{
char[] chArray2 = new char[] { ',' };
string[] strArray3 = str5.Split(chArray2);
string key = strArray3[0].ToLower();
SoundData data = new SoundData();
try
{
if (strArray3.Length >= 3)
{
data.priority = int.Parse(strArray3[2]);
}
if (strArray3.Length >= 2)
{
data.volume = float.Parse(strArray3[1]);
}
else
{
data.volume = RunParam.GetInstance().soundVolume;
}
}
catch (Exception exception)
{
data.volume = RunParam.GetInstance().soundVolume;
Debug.LogWarning(string.Format("sound data parse error: {0}, {1}" , str5 , exception.ToString()));
}
if (!this.soundDict.ContainsKey(key))
{
Res res = ResMngr.GetInstance().LoadSync("audio" , str + key);
if (res != null)
{
data.clip = (AudioClip)res.GetObject();
}
if (data.clip == null)
{
Debug.LogWarning(string.Concat(new object[] { "failed to load audio: " , key , ". at line " , num }));
}
this.soundDict.Add(key , data);
}
}
}
if (assetToUnload != null)
{
Resources.UnloadAsset(assetToUnload);
}
}
}

public void Unload()
{
foreach (KeyValuePair<string , SoundData> pair in this.soundDict)
{
if (pair.Value != null)
{
Resources.UnloadAsset(pair.Value.clip);
}
}
this.soundDict.Clear();
ResCacheMngr.GetInstance().RemoveCacher(this.cacher);
ResCacheMngr.GetInstance().RemoveCacher(this.tempCacher);
}

// Nested Types
public class SoundData
{
// Fields
public AudioClip clip;
public int priority = 0x80;
public float volume = 1f;
}

}


using UnityEngine;
using System.Collections;

public class SoundData
{
    /// <summary>声音/ </summary>
    public AudioClip clip;
    /// <summary>播放优先级</summary>
    public int priority;
    public float volume;
}

using UnityEngine;
using System.Collections;

public class UISound 
{
    public const string UI_SOUND_BIANSHEN = "ui/ui_effect_bianshen";
    public const string UI_SOUND_BTN_POP = "ui/ui_base_click";
    public const string UI_SOUND_BUY = "ui/ui_base_buy";
    public const string UI_SOUND_CHANGE_STAR = "ui/ui_effect_changestar";
    public const string UI_SOUND_CLICK = "ui/ui_base_click";
    public const string UI_SOUND_CLICK_STAR = "ui/ui_base_clickstar";
    public const string UI_SOUND_CLOSE = "ui/ui_base_close";
    public const string UI_SOUND_DRUG = "ui/ui_effect_drug";
    public const string UI_SOUND_DUANZAO = "ui/ui_effect_duanzao";
    public const string UI_SOUND_EQUIP_LV_UP = "ui/ui_effect_duanzaomax";
    public const string UI_SOUND_EVENT_DINNER = "ui/ui_base_event_dinner";
    public const string UI_SOUND_FIGHT = "ui/ui_effect_fight";
    public const string UI_SOUND_GACHA10 = "ui/ui_base_gacha10";
    public const string UI_SOUND_JINJIE = "ui/ui_effect_jinjie";
    public const string UI_SOUND_LOSE = "ui/ui_effect_lose";
    public const string UI_SOUND_LV_UP = "ui/ui_effect_levelup";
    public const string UI_SOUND_LV_UP_SHORT = "ui/ui_effect_fightlvup";
    public const string UI_SOUND_OPEN_BOX = "ui/ui_effect_openbox";
    public const string UI_SOUND_REWARD = "ui/ui_base_reward";
    public const string UI_SOUND_ROLL = "ui/ui_base_roll";
    public const string UI_SOUND_SKILL_GO = "ui/ui_base_skillgo";
    public const string UI_SOUND_TAB = "ui/ui_base_tab";
    public const string UI_SOUND_TAB_0 = "ui/ui_base_close";
    public const string UI_SOUND_WIN = "ui/ui_effect_win";
    public const string UI_SOUND_WIN_POP = "ui/ui_base_click";
    public const string UI_SOUND_WIN_STAR = "ui/ui_base_star";
    public const string UI_SOUND_ZHAOMU = "ui/ui_effect_zhaomu";

    // Methods
    public static void PlaySound(string soundIndex_)
    {
        if (!string.IsNullOrEmpty(soundIndex_))
        {
            if ("ui/ui_base_tab" == soundIndex_)
            {
                PlayTabSound();
            }
            else
            {
                AudioClip sound = AudioMngr.GetInstance().GetSound(soundIndex_);
                if (null != sound)
                {
                    NGUITools.PlaySound(sound);
                }
            }
        }
    }

    private static void PlayTabSound()
    {
        AudioClip sound = AudioMngr.GetInstance().GetSound("ui/ui_base_tab");
        if (null != sound)
        {
            NGUITools.PlaySound(sound);
        }
    }
    
}

 

posted @ 2015-11-28 01:56  bambom  阅读(282)  评论(0编辑  收藏  举报