【问题标题】:Given text + Google speech-to-text audio, get list of words at time stamps? Unity C#给定文本+谷歌语音到文本音频,获取时间戳的单词列表?统一 C#
【发布时间】:2022-10-16 02:57:21
【问题描述】:

我的目标是对一个具有混合形状的头像进行口型同步,例如“a”和“m”。我有文本(通过 GPT-3 动态生成,因此事先不知道)并将其提供给 Google 文本到语音 API,它给了我一个原始音频文件作为回报。我可以以某种方式分析此文件或做其他事情来了解播放音频剪辑时所说的单词吗?这将帮助我将单词解析为音素并相应地调整嘴巴。谢谢!

【问题讨论】:

  • 我知道有一些软件可以做到这一点。我已经在以前的雇主那里看到过它在使用,但在运行时不太准确。我没有看到任何团结的东西。

标签: c# unity3d google-text-to-speech


【解决方案1】:

您可以将 Unity 资产称为 SALSA LipSync Suite

【讨论】:

    【解决方案2】:

    您可以使用AudioClip.GetData。基本上,它获取指定音频剪辑的数据。请注意,对于压缩的音频文件,只有在音频导入器中的加载类型设置为加载时解压时,才能检索样本数据。不要使用压缩音频

    您可以将它与AudioSource.timeSamples 结合使用,它会返回音频源当前所在的样本。

    每次更新,您都可以通过当前时间样本的体积来改变嘴唇分开的程度。

    public float volMultiplier;
    
    float[] clipData;
    AudioSource aSrc;
    AudioClip ac;
    
    void Start()
    {
        aSrc = GetComponent<AudioSource>();
        ac = aSrc.clip;
        clipData = new float[ac.samples];
        ac.GetData(clipData, 0);
    }
    void Update()
    {
        if (aSrc.isPlaying)
        {
             float curVol = clipData[ac.samples];
             curVol *= volMultiplier;
             // set positon of lips given this volume
             // volume is -1 to 1 by default. (when volMultiplier
             //is 1)
        }
    }
    

    【讨论】:

    • (未经测试)让我知道任何问题
    • 这有一些错误(例如,audioClip 没有 isPlaying 或 timeSample 属性,尽管 audioSource 确实有 isPlaying 和 timeSamples),但这没问题,因为我现在正在查看它以尝试使其工作:answers.unity.com/questions/1167177/… 如果我还有更多完成,我可以在这里发布作为答案。谢谢!
    • @Philipp Lenssen,它是 nvm,它应该是 aSrc.isPlaying 而不是 ac.isPlaying。它应该是clipData[ac.samples] 而不是clipData[ac.timeSample]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多