如何将Watson文本与语音和语音与文本统一集成

时间:2019-01-08 16:32:11

标签: unity3d ibm-watson watson-conversation watson-dialog

我正在使用watson SDK统一构建AR CV应用程序。我是一个完全菜鸟,但是我设法按照视频讲了一些有趣的东西。

想法是,这将给候选人一种比一张纸更有趣的自我描述方式。我的问题是,尽管我设法完成了对文本流的语音处理,但是我不知道下一步是什么。这是用于大学项目,但我的导师也不知道。另外,如果TAJ读到这篇文章,也非常感谢您的youtube视频!

我的问题是如何在语音和助手中添加文本?

1 个答案:

答案 0 :(得分:1)

这里的基本思想是,您将使用Watson Unity SDK服务通过麦克风传递语音并将其转换为文本。您不应该将此文本发送回语音转换中,因为这只是您输入的内容(除非您要这样做)。该文本可以以多种方式使用。一种方法是使用Watson Assistant服务并创建一种可以用自然语言使用的脚本。 message方法的输出是文本,您可以将其输入到Watson Text to Speech中,从而生成可以播放的音频文件。本质上是从StreamingExample

private void OnRecognize(SpeechRecognitionEvent result, Dictionary<string, object> customData)
{
    if (result != null && result.results.Length > 0)
    {
        foreach (var res in result.results)
        {
            foreach (var alt in res.alternatives)
            {
                // Is final for the utternace?
                if (res.final)
                {
                    MessageRequest messageRequest = new MessageRequest()
                    {
                        Input = new MessageInput()
                        {
                            Text = alt.transcript
                        }
                    };
                    // Send the text to Assistant
                    assistant.Messsage(OnMessage, OnFail, assistantId, sessionId, messageRequest);
                }
            }
        }
    }
}

private void OnMessage(MessageResponse response, Dictionary<string, object> customData)
{
    // Send Assistant output to TextToSpeech
    textToSpeech.ToSpeech(OnSynthesize, OnFail, response.output.generic[0].text, true)
}

private void OnSynthesize(AudioClip clip, Dictionary<string, object> customData)
{
    // Play the clip from TextToSpeech
    PlayClip(clip);
}

private void PlayClip(AudioClip clip)
{
    if (Application.isPlaying && clip != null)
    {
        GameObject audioObject = new GameObject("AudioObject");
        AudioSource source = audioObject.AddComponent<AudioSource>();
        source.spatialBlend = 0.0f;
        source.loop = false;
        source.clip = clip;
        source.Play();

        Destroy(audioObject, clip.length);
    }
}

您将需要正确地实例化和验证服务。