Unity之使用火山引擎实现音频剪辑提问,流式语音回复

执行流程

  1. 输入音频文件,调用语音模型API,输出语音识别文字;
  2. 输入识别文字,调用语言模型API,输出回复文字(流式);
  3. 输入回复文字,调用语音模型API,输出音频数据(流式);
  4. 输入音频数据,通过流式AudioClip播放音频。

音频提问,流式语音回复

Unity之使用火山引擎实现语音识别

Unity之使用火山引擎实现文字提问流式回复

Unity之使用火山引擎实现流式语音合成

整合上述功能,实现音频提问,流式语音回复。

csharp 复制代码
using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
/// <summary>
/// 语音提问
/// </summary>
public class VoiceQuestion : MonoBehaviour
{
    [Header("语音转文字")]
    [SerializeField] SpeechRecognition speechRecognition;

    [Header("文字转语音")]
    [SerializeField] TextToSpeechOut textToSpeech;

    [Header("文字提问")]
    [SerializeField] TextQuestions textQuestions;
    List<Message> messages;
    StringBuilder thinkContentBuffer;
    Message assistantMessage;
    [Header("进行语音合成最少字符")]
    [SerializeField] int minTTSSendLength = 4;
    StringBuilder ttsSendBuffer;

    [Header("使用附加提示词")]
    [SerializeField] bool addtionPrompt;
    [Header("附加提示词")]
    [SerializeField] string prompt;

    public event Action OnTextAnswerCompleted;
    public event Action OnError;

    void Awake()
    {
        messages = new List<Message>();
        thinkContentBuffer = new StringBuilder();
        ttsSendBuffer = new StringBuilder();
        textQuestions.onReceive += OnReceiveAnswer;
        textQuestions.onCompleted += OnReceiveAnswerCompleted;
        textQuestions.OnError += OnReceiveAnswerError;
    }

    //1.输入提问音频
    public void InputQuestionAudio(AudioClip audioClip, bool newDialogue = true)
    {
        Debug.Log("语音转文字 开始");
        if (newDialogue)
        {
            messages.Clear();
            Debug.Log("清除历史对话");
        }
        speechRecognition.Request(audioClip, OnGetAudioToText);
    }

    //2.问题音频转文字后
    void OnGetAudioToText(bool sucess, string content)
    {
        Debug.Log("语音转文字 结束");
        if (sucess)
        {
            Debug.Log("文字提问 开始");
            if (addtionPrompt)
                content += prompt;
            thinkContentBuffer.Clear();

            messages.Add(new Message()
            {
                role = "user",
                content = content,
            });
            assistantMessage = new Message()
            {
                role = "assistant",
            };
            textQuestions.Request(messages);
        }
        else
        {
            Debug.LogError("语音转文字 失败");
            OnError?.Invoke();
        }
    }

    //3.接收回复文本
    void OnReceiveAnswer(string part, bool stop)
    {
        Debug.Log("接收回复文本");
        thinkContentBuffer.Append(part);
        if (part.Contains("*"))
            part = part.Replace("*", "");
        if (part.Contains("#"))
            part = part.Replace("#", "");

        ttsSendBuffer.Append(part);

        if (ttsSendBuffer.Length >= minTTSSendLength || stop)
        {
            var content = ttsSendBuffer.ToString();
            ttsSendBuffer.Clear();
            textToSpeech.ReadText(content);
        }
    }

    //4.接收回复文本结束
    void OnReceiveAnswerCompleted()
    {
        Debug.Log("文本提问 结束");
        assistantMessage.content = thinkContentBuffer.ToString();
        thinkContentBuffer.Clear();
        messages.Add(assistantMessage);
        textToSpeech.EndReadText();
        OnTextAnswerCompleted?.Invoke();
    }

    void OnReceiveAnswerError()
    {
        OnError?.Invoke();
    }

    void OnDestroy()
    {
        if (textQuestions)
        {
            textQuestions.OnError -= OnReceiveAnswerError;
            textQuestions.onReceive -= OnReceiveAnswer;
            textQuestions.onCompleted -= OnReceiveAnswerCompleted;
        }
        messages?.Clear();
        thinkContentBuffer?.Clear();
    }
}
相关推荐
心前阳光2 小时前
Unity之音频剪辑提问,流式语音回复使用示例
unity·游戏引擎·音视频
EasyDSS2 小时前
视频直播点播/音视频点播/云点播/云直播EasyDSS一站式音视频能力解锁社交娱乐多元化新场景
音视频·娱乐
jingling5552 小时前
gitHub开源项目 | 不用剪辑技能,也能做出 Screen Studio 级演示视频:开源 Recordly 值得试试
开源·github·音视频
纳祥科技2 小时前
音频ADC芯片基础解析:为什么计算机需要它来理解真实世界?
网络·单片机·音视频·智能音箱
大蚂蚁2号3 小时前
本地视频转文字免费工具
python·音视频
Digitally3 小时前
如何在电脑上编辑视频:新手入门分步指南
电脑·音视频
YWamy3 小时前
2026 国内主流 RTC 音视频 SDK 技术实测与选型参考指南
音视频·实时音视频
侃谈科技圈3 小时前
2026年短视频矩阵视频混剪头部工具市场动态深度解析:超级智剪、筷子科技、超级编导
科技·矩阵·音视频
小拉达不是臭老鼠14 小时前
Unity学习_ScriptableObject
学习·unity