private string getReqSign(List <KeyValuePair <string, string> > m_params, string appkey /* 字符串*/) { // 1. 字典升序排序 m_params.Sort(Compire); // 2. 拼按URL键值对 var str = ""; foreach (var keyvalue in m_params) { if (keyvalue.Value != "") { str += keyvalue.Key + '=' + keyvalue.Value + '&'; } } // 3. 拼接app_key str += "app_key=" + appkey; // 4. MD5运算+转换大写,得到请求签名 var sign = (AudioHelper.md5(str)).ToUpper(); return(sign); }
/// <summary> /// 获取音频 /// </summary> /// <param name="text"></param> /// <param name="OnGet"></param> /// <returns></returns> public IEnumerator GetAudioClip(string text, UnityAction <AudioClip> OnGet, Params paramss = null) { text = text.Replace(" ", "");//腾讯好像不支持空格 if (paramss == null) { paramss = defultParams; } waitSpeekQueue.Enqueue(new KeyValuePair <string, Params>(text, paramss)); if (waitSpeekQueue.Count > 1) { yield break; } while (waitSpeekQueue.Count > 0)//有其他协程在工作 { var item = waitSpeekQueue.Dequeue(); item.Value.text = item.Key; System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 long timeStamp = (long)(DateTime.Now - startTime).TotalSeconds; // 相差毫秒数 item.Value.time_stamp = (int)timeStamp; item.Value.text = text; item.Value.format = (int)Format.WAV;//暂时只支持这种格式 item.Value.sign = ""; item.Value.sign = getReqSign(item.Value.GetParams(), appkey); var url = string.Format("{0}?{1}", urlTemp, item.Value.ToParamsString()); var audioName = AudioHelper.md5(text + item.Value.speaker + item.Value.speed) + ".wav"; //WebGL直接从指定的目录加载对应的文件(缓存) if (Application.platform == RuntimePlatform.WebGLPlayer) { bool local = false; yield return(AudioHelper.LoadFromFile(AudioPath, audioName, new UnityAction <AudioClip>(x => { if (x != null) { local = true; OnGet.Invoke(x); } }))); if (!local) { yield return(IntenalDownLand(url, audioName, data => { var audio = AudioHelper.CreateWavAudio(audioName, data); OnGet(audio); })); } } else { var path = AudioPath + "/" + audioName; if (!File.Exists(path)) { //下载并缓存 yield return(IntenalDownLand(url, audioName, new UnityAction <byte[]>(data => { var audio = AudioHelper.CreateWavAudio(audioName, data); OnGet(audio); File.WriteAllBytes(AudioPath + "/" + audioName, data); }))); } else { yield return(AudioHelper.LoadFromFile(AudioPath, audioName, OnGet)); } } } }