Unity之音频剪辑提问,流式语音回复使用示例

引用

Unity之语音提问,语音答复

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

示例

通过RecordVoice组件录制音频,

将录制音频作为参数传入VoiceQuestion组件中,播放音频

csharp 复制代码
using UnityEngine;

public class UseVoiceQuestion : MonoBehaviour
{
    [SerializeField] RecordVoice recordVoice;
    [SerializeField] VoiceQuestion voiceQuestion;

    KeyCode voiceInputKey = KeyCode.Space;
    bool enableVoiceInput = true;
    bool isRecordIng = false;

    void Awake()
    {
        recordVoice.OnRecordAudioCompleted += OnRecordVoiceCompleted;
        voiceQuestion.OnTextAnswerCompleted += OnTextAnswerCompleted;
        voiceQuestion.OnError += OnVoiceQuestionError;
    }

    void OnRecordVoiceCompleted(AudioClip audioClip)
    {
        voiceQuestion.InputQuestionAudio(audioClip);
    }

    void OnTextAnswerCompleted()
    {
        enableVoiceInput = true;
    }

    void OnVoiceQuestionError()
    {
        enableVoiceInput = true;
    }

    void Update()
    {
        if (enableVoiceInput == false) return;

        if (Input.GetKeyDown(voiceInputKey))
        {
            if (isRecordIng == false)
            {
                if (recordVoice.ExistMicrophoneDevice())
                {
                    Debug.Log("录音开始");
                    isRecordIng = true;
                    recordVoice.BeginRecord();
                }
                else
                {
                    Debug.LogError("没有录音设备,无法录音");
                }
            }
        }

        if (Input.GetKeyUp(voiceInputKey))
        {
            if (isRecordIng)
            {
                Debug.Log("录音结束");
                isRecordIng = false;
                enableVoiceInput = false;
                recordVoice.EndRecord();
            }
        }
    }

    void OnGUI()
    {
        GUI.skin.label.fontSize = 40;
        if (enableVoiceInput)
        {
            if (isRecordIng == false)
                GUILayout.Label("按下空格键,进行语音输入");
            else
                GUILayout.Label("语音录制中");
        }
        else
        {
            GUILayout.Label("等待提问结束");
        }
    }

    void OnDestroy()
    {
        voiceQuestion.OnError -= OnVoiceQuestionError;
        voiceQuestion.OnTextAnswerCompleted -= OnTextAnswerCompleted;
        recordVoice.OnRecordAudioCompleted -= OnRecordVoiceCompleted;
    }
}
相关推荐
unityのkiven9 小时前
Unity 共享材质修改问题与 MaterialPropertyBlock 解决方案
unity·游戏引擎·材质
丁小未10 小时前
Unity 极致高效的IM设计方案教程
unity·性能优化·游戏引擎·im
unityのkiven10 小时前
Unity UGUI 中 EventTrigger 导致 ScrollRect 鼠标滚轮失效的问题分析与解决
unity·计算机外设·游戏引擎
ZENERGY-众壹13 小时前
30MW 渔光互补监控实录:高湿环境下视频与传感器集成的三个坑
音视频
丁小未14 小时前
Unity动态图集方案
unity·游戏引擎
元气少女小圆丶17 小时前
停止单机,开始学一点后台通信吧
unity
丁小未18 小时前
Unity高效的DOTS动画方案Rukhanka深度剖析
unity·游戏引擎·rukhanka·dots动画·gpu动画·gpuecsanimation
美狐美颜SDK开放平台18 小时前
直播APP开发教程:视频美颜SDK接入需要注意哪些问题?
人工智能·音视频·美颜sdk·第三方美颜sdk·短视频美颜sdk
Elastic 中国社区官方博客19 小时前
从多模态 LLM 中引导构建音频嵌入
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·音视频