/// <summary> /// TTS 语音合成 /// </summary> /// <param name="appid">appId</param> /// <param name="apikey">apiKey</param> /// <param name="apisecret">apiSecret</param> /// <param name="config">配置文件,不传则选择默认配置</param> public XunFeiTTS(string appid, string apikey, string apisecret, ConfigSetting config = null) { appId = appid; apiKey = apikey; apiSecret = apisecret; if (config != null) { configSetting = config; } date = TimeSpanHelper.GetTimeRFC1123(); string sign = $"host: {host}\ndate: {date}\n{requestLine}"; string signature = RSAHelper.HMACSha256(apiSecret, sign); string authorization_org = $"api_key=\"{apiKey}\", algorithm=\"hmac-sha256\", headers=\"host date request-line\", signature=\"{signature}\""; string authorization = Base64Helper.EncodeBase64("utf-8", authorization_org); string reqUrl = string.Format(baseUrl + "?authorization={0}&date={1}&host={2}", authorization, HttpUtility.UrlEncode(date).Replace("+", "%20"), host); try { websocket = new WebSocket(reqUrl); websocket.OnMessage += Websocket_OnMessage; websocket.OnOpen += Websocket_OnOpen; websocket.Connect(); } catch (Exception ex) { throw ex; } }
/// <summary> /// 发送数据 /// </summary> /// <param name="message">文本内容,最大约2000汉字</param> public void SendData(string message) { if (message.Length > 2000) { //默认传输都是汉字 throw new Exception("传入字数过长,不得超过2000汉字!"); } try { JObject frame = new JObject(); JObject business = new JObject(); JObject common = new JObject(); JObject data = new JObject(); // 填充common common.Add("app_id", appId); //填充business business.Add("aue", configSetting.aue); business.Add("tte", configSetting.tte); business.Add("ent", configSetting.ent); business.Add("vcn", configSetting.vcn); business.Add("pitch", configSetting.pitch); business.Add("speed", configSetting.speed); business.Add("volume", configSetting.volume); business.Add("auf", configSetting.auf); business.Add("ram", configSetting.ram); business.Add("rdn", configSetting.rdn); business.Add("reg", configSetting.reg); business.Add("sfl", configSetting.sfl); data.Add("status", 2);//数据状态,固定位2 data.Add("text", Base64Helper.EncodeBase64("utf-8", message)); frame.Add("common", common); frame.Add("business", business); frame.Add("data", data); byte[] value = Encoding.Default.GetBytes(frame.ToString()); sendMessage(value); } catch (Exception ex) { throw ex; } }