Unity 语音转文字

1. Window 自带的微软语音识别

参考官方手册:Windows.Speech.DictationRecognizer - Unity 脚本 API (unity3d.com)

这个中英识别都比较准确,不过应该只支持Win10以上。

需在设置里开启在线语音识别。

 代码部分:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
using UnityEngine.Windows.Speech;

public class DictationScript : MonoBehaviour
{
    public Text hypothesesText;//显示输入过程中猜想结果的
    public Text recognitionsText;//显示识别结果的
    public Button startBtn;
    public Button stopBtn;

    private DictationRecognizer dictationRecognizer;

    void Start()
    {
        dictationRecognizer = new DictationRecognizer();

        dictationRecognizer.DictationResult += OnDictationResult;
        dictationRecognizer.DictationHypothesis += OnDictationHypothesis;
        dictationRecognizer.DictationComplete += OnDictationComplete;
        dictationRecognizer.DictationError += OnDictationError;

        //dictationRecognizer.Start();
        startBtn.onClick.AddListener(DictationStart);
        stopBtn.onClick.AddListener(DictionStop);
    }

    private void OnDestroy()
    {
        dictationRecognizer.Stop();
        dictationRecognizer.Dispose();
    }

    /// <summary>
    /// 语音识别结果
    /// </summary>
    /// <param name="text">识别结果</param>
    /// <param name="confidence"></param>
    private void OnDictationResult(string text, ConfidenceLevel confidence)
    {
        Debug.LogFormat("识别结果: {0}", text);
        recognitionsText.text = text;

        DictionStop();//我是希望得到结果就自动停止输入
    }

    /// <summary>
    /// 语音输入过程中对结果猜想时触发的事件。
    /// </summary>
    /// <param name="text">识别猜想</param>
    private void OnDictationHypothesis(string text)
    {
        Debug.LogFormat("识别猜想: {0}", text);
        hypothesesText.text = text;
    }

    private void OnDictationComplete(DictationCompletionCause cause)
    {
        if (cause != DictationCompletionCause.Complete)
            Debug.LogErrorFormat("识别失败: {0}.", cause);
    }

    private void OnDictationError(string error, int hresult)
    {
        Debug.LogErrorFormat("识别错误: {0}; HResult = {1}.", error, hresult);
    }

    /// <summary>
    /// 开启听写识别会话
    /// </summary>
    public void DictationStart()
    {
        dictationRecognizer.Start();
        startBtn.gameObject.SetActive(false);
        stopBtn.gameObject.SetActive(true);
    }

    /// <summary>
    /// 结束听写识别会话
    /// </summary>
    public void DictionStop()
    {
        dictationRecognizer.Stop();
        startBtn.gameObject.SetActive(true);
        stopBtn.gameObject.SetActive(false);
    }

}

2. 百度SDK

也可以考虑其他平台的SDK,我只测试了百度的,这个英文识别不大好(最起码Unity识别不出来,IPad可以识别出来),上面那个中英识别都不错,不过只支持Window,百度的这个我也没测试其他平台,自行测试吧。

官方文档:https://ai.baidu.com/ai-doc/SPEECH/ilbxfvpau

  1. 在百度智能云控制台创建一个应用,勾上短语音识别
  2. 下载C# SDK:https://ai.baidu.com/sdk#asr
  3. 将SDK 放入Unity中Plugins文件夹下

然后直接上代码吧

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Baidu.Aip.Speech;
using UnityEngine.UI;

public class BaiduSpeech : MonoBehaviour
{
    public Text text;//显示结果用的

    // 设置APPID/AK/SK
    string APP_ID = "你的 AppID";
    string API_KEY = "你的 API Key";
    string SECRET_KEY = "你的 Secret Key";

    int rate = 8000;

    Asr client;
    AudioSource aud;
    int audioLength;//录音的长度

    private void Awake()
    {
        if (GetComponent<AudioSource>() == null)
            aud = gameObject.AddComponent<AudioSource>();
        else
            aud = gameObject.GetComponent<AudioSource>();
        aud.playOnAwake = false;
    }
    // Start is called before the first frame update
    void Start()
    {
        client = new Asr(APP_ID, API_KEY, SECRET_KEY);
        client.Timeout = 60000;  // 修改超时时间
    }

    /// <summary>
    /// 开始录音
    /// </summary>
    public void StartMic()
    {
        if (Microphone.devices.Length == 0) return;
        Microphone.End(null);
        Debug.Log("Start");
        aud.clip = Microphone.Start(null, false, 10, rate);
    }

    /// <summary>
    /// 结束录音
    /// </summary>
    public void EndMic()
    {
        int lastPos = Microphone.GetPosition(null);
        if (Microphone.IsRecording(null))
            audioLength = lastPos / rate;//录音时长  
        else
            audioLength = 10;
        Debug.Log("Stop");
        Microphone.End(null);

        AsrData(GetClipData());
    }

    /// <summary>
    /// 把录音转换为Byte[]
    /// </summary>
    /// <returns></returns>
    public byte[] GetClipData()
    {
        if (aud.clip == null)
        {
            Debug.LogError("录音数据为空");
            return null;
        }

        float[] samples = new float[aud.clip.samples];
        aud.clip.GetData(samples, 0);

        byte[] outData = new byte[samples.Length * 2];
        int rescaleFactor = 32767; //to convert float to Int16   
        for (int i = 0; i < samples.Length; i++)
        {
            short temshort = (short)(samples[i] * rescaleFactor);

            byte[] temdata = System.BitConverter.GetBytes(temshort);

            outData[i * 2] = temdata[0];
            outData[i * 2 + 1] = temdata[1];
        }
        if (outData == null || outData.Length <= 0)
        {
            Debug.LogError("录音数据为空");
            return null;
        }

        return outData;
    }

    // 识别本地文件
    public void AsrData(byte[] data)
    {
        // 可选参数
        var options = new Dictionary<string, object>
        {
            {"dev_pid", 1537}
        };
        client.Timeout = 120000; // 若语音较长,建议设置更大的超时时间. ms
        var result = client.Recognize(data, "pcm", rate, options);
        if (result["result"] != null)
        {
            text.text = result["result"][0].ToString();
        }
        else
        {
            Debug.Log("识别错误");
        }
        Debug.Log(result);
    }

}

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
### 回答1: Unity是一款非常强大的游戏开发引擎,而讯飞则是融合语音云、人工智能和大数据等技术的语音识别软件。通过使用Unity和讯飞的语音文字功能,我们可以实现一个语音识别的应用。 首先,我们需要将讯飞语音识别的SDK集成到Unity中。这样我们就可以使用讯飞提供的语音识别API来进行文字换。在集成完成后,我们可以创建一个录音功能,允许用户在游戏中进行语音输入。 当用户点击录音按钮后,Unity会启动录音功能,并将用户的语音输入通过麦克风传输到讯飞的服务器。讯飞的语音识别API会对接收到的语音进行分析和处理,并将识别出来的文字结果返回给Unity。 在Unity中,我们可以运用这些文字结果进行各种操作,例如显示在游戏界面上、作为游戏角色的对话或者完成任务等。这样,语音文字功能不仅可以为用户提供更便捷的输入方式,同时也可以增加游戏的互动性和创新性。 除了文字换功能外,讯飞还提供了其他强大的语音识别功能,如语音翻译、语音合成等,这些功能可以进一步丰富我们在Unity中开发的语音相关应用。 总而言之,利用Unity和讯飞的语音文字功能,我们可以为游戏和其他应用增加语音输入的功能,提供更丰富的用户体验。无论是游戏角色的对话,还是辅助工具的实现,语音文字的应用都能够为我们带来许多便利和创新。 ### 回答2: Unity语音文字讯飞是指在Unity引擎中使用讯飞科大的语音文字技术。讯飞科大是中国领先的人工智能公司,其语音文字技术被广泛应用于各种语音识别场景。 通过在Unity中集成讯飞科大的语音文字技术,我们可以实现将用户的语音输入化为文字。这个过程可以用于语音识别语音控制、智能机器人等应用领域。 在Unity中使用讯飞语音文字技术,首先需要在讯飞科大的官网注册账号,并获取相应的API密钥。然后,在Unity项目中导入讯飞科大提供的SDK,并进行配置。配置过程包括设置密钥、选择语音识别模式、设置语言等。 一旦配置完成,我们就可以在Unity中使用语音识别功能。可以监听用户的语音输入,在适当的时机,将语音输入传递给讯飞语音文字服务进行处理。服务会将语音化为文字,并将结果返回给Unity,供我们进一步使用。 Unity语音文字讯飞的优势在于其简单易用性和高效性。借助于Unity强大的开发环境,我们可以轻松地实现语音文字功能,并将其应用于我们的项目中。无论是开发语音交互游戏,还是打造智能助手应用,Unity语音文字讯飞都可以帮助我们更加方便地实现相关功能。 ### 回答3: Unity 语音文字讯飞是指在Unity游戏开发环境下,利用讯飞的语音识别API将语音换为文字的技术。讯飞是中国领先的人工智能语音技术提供商,其提供了强大的语音识别功能,可以运用在各种应用场景中。 在Unity中使用讯飞的语音文字功能,可以实现游戏内的语音交互功能。玩家可以通过语音输入指令或对话,而不必使用键盘或手柄输入文字。这样的交互方式既提高了游戏的趣味性,也增加了游戏的可玩性。 要在Unity中使用讯飞语音文字功能,首先需要将讯飞的语音识别SDK集成到Unity项目中。然后,通过编写Unity脚本,将麦克风捕捉到的音频传递给讯飞的语音识别API,进行语音识别。API会将识别结果返回给Unity,然后我们可以将其用于游戏中的文字显示、语音指令解析等功能。 除了游戏中的语音交互,Unity中的讯飞语音文字功能还可以应用在其他场景中。比如,在教育应用中,可以利用这一功能实现语音辅助学习;在智能家居系统中,可以通过语音输入指令控制家电等;在汽车领域,可以实现语音导航等。 总之,Unity 语音文字讯飞是一项强大的技术,可以为Unity游戏开发者带来更多的创新和可能性。无论是在游戏中还是其他应用场景中,这一技术都能提升用户体验,实现更加智能和便捷的交互方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ineloquent_0

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

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

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

打赏作者

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

抵扣说明:

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

余额充值