unity C# 实现对接阿里云的语音合成webapi 主要功能 获取token语音合成 帮助正在做,或者即将做的同学踩坑

本文介绍如何使用阿里云的API进行语音合成,并详细解释了获取Token的过程,包括时间戳、UUID、签名等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载地址 https://download.youkuaiyun.com/download/qq_39735878/12447404
1,获取token
appkeyid 和 appkeyscrect 换成自己的

 void GetTokenId()
    {
        Timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ");
        Timestamp = UriEspRepacle(Timestamp);
        //Debug.Log("时间:" + Timestamp);
        SignatureNonce = System.Guid.NewGuid().ToString("D");
        //Debug.Log("UUID:" + SignatureNonce);
        string pingjiestr = string.Format("AccessKeyId={0}&Action=CreateToken&Format=JSON&RegionId=cn-shanghai&SignatureMethod=HMAC-SHA1&SignatureNonce={1}&SignatureVersion=1.0&Timestamp={2}&Version=2019-02-28", AccessKeyId, SignatureNonce, Timestamp);
        //Debug.Log("请求原始字符串:" + pingjiestr);
        string StringToSign = createStringToSign("GET", "/", pingjiestr);
        //Debug.Log("编码之后:" + StringToSign);
        Signature = UriEspRepacle(HMACSHA1Texts(StringToSign, AccessScrert + "&"));
        //Debug.Log("加密之后:" + Signature);
        string querysUrl = url + "?Signature=" + Signature + "&" + pingjiestr;
        //Debug.Log("请求路径:" + querysUrl);
        StartCoroutine(GetToken(querysUrl));

        // StartCoroutine(PostToken(url));
    } 
    ////服务器返回
    //string fuwu = "GET&%2F&AccessKeyId%3DLTAI4FvStuRfQKTVvq8uPR5Z%26Action%3DCreateToken%26Format%3DJSON%26RegionId%3Dcn-shanghai%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3D180485e0-1aec-4dc4-8889-e6d167cf383f%26SignatureVersion%3D1.0%26Timestamp%3D2020-05-19T00%253A46%253A17Z%26Version%3D2019-02-28";
    ////自己
    //string ziji = "GET&%2F&AccessKeyId%3DLTAI4FvStuRfQKTVvq8uPR5Z%26Action%3DCreateToken%26Format%3DJSON%26RegionId%3Dcn-shanghai%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3D180485e0-1aec-4dc4-8889-e6d167cf383f%26SignatureVersion%3D1.0%26Timestamp%3D2020-05-19T00%3A46%3A17Z%26Version%3D2019-02-28";
    IEnumerator GetToken(string url)
    {
        UnityWebRequest WebRequest = UnityWebRequest.Get(url);

        yield return WebRequest.SendWebRequest();

        if (string.IsNullOrEmpty(WebRequest.error))
        {
            if (WebRequest.isDone)
            {
                Debug.Log(WebRequest.downloadHandler.text);
                JieXiJsonNode(WebRequest.downloadHandler.text);
            }
        }
        else
        {

            Debug.Log(WebRequest.error);
        }
    }

2 语音合成

IEnumerator GetTTS()
    {
        url = string.Format("https://nls-gateway.cn-shanghai.aliyuncs.com/stream/v1/tts?appkey={0}&token={1}&text={2}&format=wav&sample_rate=16000", appkey, usertokenid, content);
        Debug.Log(url);
        Uri uri = new Uri(url);
        audioSource = gameObject.GetComponent<AudioSource>();
        audioSource.clip = AudioClip.Create("test", 16000 * 60, 1, 16000, true, OnAudioRead);
        audioSource.Play();
        audioSource.loop = false;
        UnityWebRequest WebRequest = UnityWebRequestMultimedia.GetAudioClip(uri, AudioType.WAV);
        WebRequest.SendWebRequest();
        do
        {
            yield return null;
            int length = ((int)WebRequest.downloadedBytes - 开始位置);
            if (length > 0)
            {
                byte[] byteArray = GetByte(开始位置, length, WebRequest.downloadHandler.data);
                float[] sounddata = new float[byteArray.Length / 2];
                for (int i = 0; i < sounddata.Length; i++)
                {
                    sounddata[i] = bytesToFloat(byteArray[i * 2], byteArray[i * 2 + 1]);
                    //添加数据
                    播放队列.Enqueue(sounddata[i]);
                }
                总长度 += sounddata.Length;
            }
        } while (!WebRequest.isDone);
        是否接收结束 = true;
        Debug.Log("数据接受结束");
        Debug.Log("总长度:" + 总长度);
        while (true)
        {
            yield return null;
            if (audioSource.timeSamples > 总长度)
            {
                Debug.Log("音频播放结束");
                audioSource.Stop();
                break;
            }
        }
    }  

appid 换成自己的
链接地址:https://download.youkuaiyun.com/download/qq_39735878/12447404

### 如何在 Unity 中接入阿里云智能语音服务 #### 准备工作 为了能够在 Unity 项目中成功集成阿里云智能语音服务,开发者需先完成一系列准备工作。这包括但不限于注册成为阿里云用户并创建相应的应用来获取访问密钥(AccessKey ID 和 AccessKey Secret),这些信息对于后续配置 SDK 至关重要[^1]。 #### 安装阿里云 C# SDK 针对 Unity 的开发环境而言,推荐使用 NuGet 来安装适用于 .NET 平台下的官方 Aliyun OpenAPI Client SDK 。通过这种方式可以简化依赖管理流程,并确保所使用的库版本是最新的稳定版。需要注意的是,在某些情况下可能需要手动调整项目的框架兼容性设置以适应不同版本间的差异[^2]。 #### 配置音频采集与传输 当涉及到实际处理语音数据时,Unity 提供了多种方式用于捕获麦克风输入流或加载预录制文件作为待分析素材。然而值得注意的一点是在向云端发送请求之前应当正确编码和打包二进制格式的声音片段;依据过往经验分享指出,`binaryDataSize` 属性决定了有效载荷大小而不仅仅是简单存储 `binaryData` 字节数组就能正常工作的[^3]。 ```csharp using UnityEngine; using System.IO; public class AudioCapture : MonoBehaviour { private AudioSource audioSource; // 声音源组件实例 void Start() { audioSource = GetComponent<AudioSource>(); byte[] rawData = Microphone.Start(null, true, 10, AudioSettings.outputSampleRate); int sizeInBytes = (int)(rawData.Length * sizeof(float)); Debug.Log($"Captured {sizeInBytes} bytes of raw PCM data."); using(MemoryStream ms = new MemoryStream(rawData)) { // 这里应该按照 API 文档说明进一步封装成符合要求的数据结构再上传给服务器端解析 } } } ``` #### 发起 RESTful 请求至阿里云 NLP 接口 最后一步就是构建 HTTP POST 方法去调用特定于所需功能的服务端点。此过程中务必遵循官方文档给出的具体参数定义以及认证机制指南,比如采用签名算法对每次交互进行安全加固等措施。此外考虑到网络延迟等因素影响用户体验的可能性,建议异步执行此类操作以便及时反馈进度更新给前端界面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

unity_YTWJJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值