国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數(shù)據(jù)以及表情嘴型 Animation 的簡單整理

這篇具有很好參考價值的文章主要介紹了Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數(shù)據(jù)以及表情嘴型 Animation 的簡單整理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數(shù)據(jù)以及表情嘴型 Animation 的簡單整理

目錄

Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數(shù)據(jù)以及表情嘴型 Animation 的簡單整理

一、簡單介紹

二、實現(xiàn)原理

三、注意事項

四、實現(xiàn)步驟

五、關鍵代碼


一、簡單介紹

Unity 工具類,自己整理的一些游戲開發(fā)可能用到的模塊,單獨獨立使用,方便游戲開發(fā)。

本節(jié)介紹,這里在使用微軟的Azure 使用SSML進行SS語音合成的音頻,并且獲取表情嘴型Animation 數(shù)據(jù),并且保存到本地,在特定的情況下,用于本地讀取音頻和表情嘴型Animation 數(shù)據(jù),直接使用,避免可能網(wǎng)絡訪問造成的延遲問題,這里簡單說明,如果你有更好的方法,歡迎留言交流。

語音合成標記語言 (SSML) 是一種基于 XML 的標記語言,可用于微調文本轉語音輸出屬性,例如音調、發(fā)音、語速、音量等。 與純文本輸入相比,你擁有更大的控制權和靈活性。

可以使用 SSML 來執(zhí)行以下操作:

  • ??? 定義輸入文本結構,用于確定文本轉語音輸出的結構、內(nèi)容和其他特征。 例如,可以使用 SSML 來定義段落、句子、中斷/暫?;蜢o音。 可以使用事件標記(例如書簽或視素)來包裝文本,這些標記可以稍后由應用程序處理。
  • ??? 選擇語音、語言、名稱、樣式和角色。 可以在單個 SSML 文檔中使用多個語音。 調整重音、語速、音調和音量。 還可以使用 SSML 插入預先錄制的音頻,例如音效或音符。
  • ??? 控制輸出音頻的發(fā)音。 例如,可以將 SSML 與音素和自定義詞典配合使用來改進發(fā)音。 還可以使用 SSML 定義單詞或數(shù)學表達式的具體發(fā)音。
    ?

下面是 SSML 文檔的基本結構和語法的子集:

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="string">
    <mstts:backgroundaudio src="string" volume="string" fadein="string" fadeout="string"/>
    <voice name="string" effect="string">
        <audio src="string"></audio>
        <bookmark mark="string"/>
        <break strength="string" time="string" />
        <emphasis level="value"></emphasis>
        <lang xml:lang="string"></lang>
        <lexicon uri="string"/>
        <math xmlns="http://www.w3.org/1998/Math/MathML"></math>
        <mstts:audioduration value="string"/>
        <mstts:express-as style="string" styledegree="value" role="string"></mstts:express-as>
        <mstts:silence type="string" value="string"/>
        <mstts:viseme type="string"/>
        <p></p>
        <phoneme alphabet="string" ph="string"></phoneme>
        <prosody pitch="value" contour="value" range="value" rate="value" volume="value"></prosody>
        <s></s>
        <say-as interpret-as="string" format="string" detail="string"></say-as>
        <sub alias="string"></sub>
    </voice>
</speak>

?SSML 語音和聲音
語音合成標記語言 (SSML) 的語音和聲音 - 語音服務 - Azure AI services | Microsoft Learn

官網(wǎng)注冊:

面向學生的 Azure - 免費帳戶額度 | Microsoft Azure

官網(wǎng)技術文檔網(wǎng)址:

技術文檔 | Microsoft Learn

官網(wǎng)的TTS:

文本轉語音快速入門 - 語音服務 - Azure Cognitive Services | Microsoft Learn

Azure Unity SDK? 包官網(wǎng):

安裝語音 SDK - Azure Cognitive Services | Microsoft Learn

SDK具體鏈接:

https://aka.ms/csspeech/unitypackage

Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數(shù)據(jù)以及表情嘴型 Animation 的簡單整理,Unity,SSML,語音合成,表情嘴型Animation數(shù)據(jù),Microsoft,Azure Speech

?文章來源地址http://www.zghlxwxcb.cn/news/detail-652289.html

二、實現(xiàn)原理

1、官網(wǎng)申請得到語音合成對應的 SPEECH_KEY 和 SPEECH_REGION

2、然后對應設置 語言 和需要的聲音 配置

3、使用 SSML 帶有流式獲取得到音頻數(shù)據(jù),在聲源中播放或者保存即可,樣例如下

public static async Task SynthesizeAudioAsync()
{
    var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
    using var speechSynthesizer = new SpeechSynthesizer(speechConfig, null);
 
    var ssml = File.ReadAllText("./ssml.xml");
    var result = await speechSynthesizer.SpeakSsmlAsync(ssml);
 
    using var stream = AudioDataStream.FromResult(result);
    await stream.SaveToWaveFileAsync("path/to/write/file.wav");
}

4、本地保存音頻,以及表情嘴型 Animation 數(shù)據(jù)

    // 獲取到視頻的數(shù)據(jù),保存為 .wav 
    using var stream = AudioDataStream.FromResult(speechSynthesisResult);
    await stream.SaveToWaveFileAsync($"./{fileName}.wav");



    /// <summary>
    /// 嘴型 animation 數(shù)據(jù),本地保存為 json 數(shù)據(jù)
    /// </summary>
    /// <param name="fileName">保存文件名</param>
    /// <param name="content">保存內(nèi)容</param>
    /// <returns></returns>
    static async Task CommitAsync(string fileName,string content)
    {
        var bits = Encoding.UTF8.GetBytes(content);
        using (var fs = new FileStream(
            path: @$"d:\temp\{fileName}.json",
            mode: FileMode.Create,
            access: FileAccess.Write,
            share: FileShare.None,
            bufferSize: 4096,
            useAsync: true))
        {
            await fs.WriteAsync(bits, 0, bits.Length);
        }
    }

三、注意事項

1、不是所有的 speechSynthesisVoiceName 都能生成對應的 表情嘴型 Animation 數(shù)據(jù)

四、實現(xiàn)步驟

這里是直接使用 .Net VS 中進行代碼測試

1、在 NuGet 中安裝 微軟的 Speech 包

Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數(shù)據(jù)以及表情嘴型 Animation 的簡單整理,Unity,SSML,語音合成,表情嘴型Animation數(shù)據(jù),Microsoft,Azure Speech

Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數(shù)據(jù)以及表情嘴型 Animation 的簡單整理,Unity,SSML,語音合成,表情嘴型Animation數(shù)據(jù),Microsoft,Azure Speech

?2、代碼編寫實現(xiàn) SSML 合成語音,并且本地保存對應的 音頻文件和表情嘴型 Animation json 數(shù)據(jù)

Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數(shù)據(jù)以及表情嘴型 Animation 的簡單整理,Unity,SSML,語音合成,表情嘴型Animation數(shù)據(jù),Microsoft,Azure Speech

3、運行代碼,運行完后,就會本地保存對應的 音頻文件和表情嘴型 Animation json 數(shù)據(jù)

Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數(shù)據(jù)以及表情嘴型 Animation 的簡單整理,Unity,SSML,語音合成,表情嘴型Animation數(shù)據(jù),Microsoft,Azure Speech

?Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數(shù)據(jù)以及表情嘴型 Animation 的簡單整理,Unity,SSML,語音合成,表情嘴型Animation數(shù)據(jù),Microsoft,Azure Speech

?4、本地查看保存的數(shù)據(jù)

Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數(shù)據(jù)以及表情嘴型 Animation 的簡單整理,Unity,SSML,語音合成,表情嘴型Animation數(shù)據(jù),Microsoft,Azure Speech

Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數(shù)據(jù)以及表情嘴型 Animation 的簡單整理,Unity,SSML,語音合成,表情嘴型Animation數(shù)據(jù),Microsoft,Azure Speech

?

五、關鍵代碼

using Microsoft.CognitiveServices.Speech;
using System.Text;

class Program
{
    // This example requires environment variables named "SPEECH_KEY" and "SPEECH_REGION"
    static string speechKey = "YOUR_SPEECH_KEY";
    static string speechRegion = "YOUR_SPEECH_REGION";
    static string speechSynthesisVoiceName = "zh-CN-XiaoxiaoNeural";
    static string fileName = "Test" + "Hello";
    static string InputAudioContent = "黃河之水天上來,奔流到海不復回";  // 生成的

    static int index = 0;   // 記錄合成的表情口型動畫的數(shù)據(jù)數(shù)組個數(shù)
    static string content="[";  // [ 是為了組成 json 數(shù)組

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription(speechKey, speechRegion);

        // 根據(jù)需要可以使用更多 xml 配置,讓合成的聲音更加生動立體
        var ssml = @$"<speak version='1.0' xml:lang='zh-CN' xmlns='http://www.w3.org/2001/10/synthesis' xmlns:mstts='http://www.w3.org/2001/mstts'>
            <voice name='{speechSynthesisVoiceName}'>
                <mstts:viseme type='FacialExpression'/>
                <mstts:express-as style='friendly'>{InputAudioContent}</mstts:express-as>
            </voice>
        </speak>";

        // Required for sentence-level WordBoundary events
        speechConfig.SetProperty(PropertyId.SpeechServiceResponse_RequestSentenceBoundary, "true");

        using (var speechSynthesizer = new SpeechSynthesizer(speechConfig))
        {
            // Subscribe to events
            // 注冊表情嘴型數(shù)據(jù)
            speechSynthesizer.VisemeReceived += async (s, e) =>
            {
                Console.WriteLine($"VisemeReceived event:" +
                    $"\r\n\tAudioOffset: {(e.AudioOffset + 5000) / 10000}ms" 
                   + $"\r\n\tVisemeId: {e.VisemeId}" 
                    // + $"\r\n\tAnimation: {e.Animation}"
                    );
                if (string.IsNullOrEmpty( e.Animation)==false)
                {
                    // \r\n, 是為了組合 json 格式
                    content += e.Animation + "\r\n,";
                    index++;
                }
                
            };
            
            // 注冊合成完畢的事件
            speechSynthesizer.SynthesisCompleted += async (s, e) =>
            {
                Console.WriteLine($"SynthesisCompleted event:" +
                    $"\r\n\tAudioData: {e.Result.AudioData.Length} bytes" +
                    $"\r\n\tindex: {index} " +
                    $"\r\n\tAudioDuration: {e.Result.AudioDuration}");
                content = content.Substring(0, content.Length-1);
                content += "]";
                await CommitAsync(fileName, content);
            };

            // Synthesize the SSML
            Console.WriteLine($"SSML to synthesize: \r\n{ssml}");
            var speechSynthesisResult = await speechSynthesizer.SpeakSsmlAsync(ssml);

            // 獲取到視頻的數(shù)據(jù),保存為 .wav 
            using var stream = AudioDataStream.FromResult(speechSynthesisResult);
            await stream.SaveToWaveFileAsync(@$"d:\temp\{fileName}.wav");

            // Output the results
            switch (speechSynthesisResult.Reason)
            {
                case ResultReason.SynthesizingAudioCompleted:
                    Console.WriteLine("SynthesizingAudioCompleted result");
                    break;
                case ResultReason.Canceled:
                    var cancellation = SpeechSynthesisCancellationDetails.FromResult(speechSynthesisResult);
                    Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

                    if (cancellation.Reason == CancellationReason.Error)
                    {
                        Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
                        Console.WriteLine($"CANCELED: ErrorDetails=[{cancellation.ErrorDetails}]");
                        Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
                    }
                    break;
                default:
                    break;
            }
        }

        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
    }


    /// <summary>
    /// 嘴型 animation 數(shù)據(jù),本地保存為 json 數(shù)據(jù)
    /// </summary>
    /// <param name="fileName">保存文件名</param>
    /// <param name="content">保存內(nèi)容</param>
    /// <returns></returns>
    static async Task CommitAsync(string fileName,string content)
    {
        var bits = Encoding.UTF8.GetBytes(content);
        using (var fs = new FileStream(
            path: @$"d:\temp\{fileName}.json",
            mode: FileMode.Create,
            access: FileAccess.Write,
            share: FileShare.None,
            bufferSize: 4096,
            useAsync: true))
        {
            await fs.WriteAsync(bits, 0, bits.Length);
        }
    }
}

到了這里,關于Unity C# 之 Azure 微軟SSML語音合成TTS流式獲取音頻數(shù)據(jù)以及表情嘴型 Animation 的簡單整理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • [chatgpt+Azure]unity AI二次元小女友之使用微軟Azure服務實現(xiàn)RestfulApi->語音識別+語音合成

    [chatgpt+Azure]unity AI二次元小女友之使用微軟Azure服務實現(xiàn)RestfulApi->語音識別+語音合成

    ????????如題所述,這個小項目是在unity引擎端,使用了chatgpt+微軟azure的一個AI二次元女友對話的項目,實現(xiàn)原理也比較簡單,即在unity端實現(xiàn)AI二次元女友的交互界面,接入chatgpt-3.5-turbo的api接口,借助chatgpt的自然語言生成能力,作為這個項目的聊天引擎。聊天功能也比較

    2024年02月04日
    瀏覽(26)
  • 【語音合成】微軟 edge-tts

    目錄 1.?edge-tts 介紹 2. 代碼示例 https://github.com/rany2/edge-tts 在Python代碼中使用Microsoft Edge的在線文本到語音服務

    2024年02月14日
    瀏覽(23)
  • 微軟語音合成(tts)服務申請和調用

    微軟語音合成(tts)服務申請和調用

    https://azure.microsoft.com/zh-cn/free/ 這里有個視頻教程,根據(jù)此完成申請流程: https://www.bilibili.com/video/BV15a4y1W7re?vd_source=bf07f28d37849885d215dc3aea189eba 申請完成后,就可以到這里申請資源: https://portal.azure.com/#home 點擊資源組,里面就有部署好的服務了 點擊這里,可以獲取 subscription

    2024年02月11日
    瀏覽(28)
  • MS-TTS:免費微軟TTS語音合成工具(一鍵合成導出MP3音頻)

    MS-TTS:免費微軟TTS語音合成工具(一鍵合成導出MP3音頻)

    聲明 本工具是個免費工具,遇到問題,還請自行解決,下面有文字教程,B站有視頻教程(鏈接在文章末尾); 其次,微軟接口卡頓,連接超時等問題下方有詳細說明,請仔細看一下; 再次,強制升級是為了統(tǒng)一版本方便問題的收集與解決,如果你能理解最好,不能理解的話

    2024年02月03日
    瀏覽(54)
  • 微軟語音合成助手 TTS-VUE 文字轉語音工具

    微軟語音合成助手 TTS-VUE 文字轉語音工具

    我們在刷短視頻的時候經(jīng)常會聽到一些AI合成聲音,它們有各種音色、語調,甚至不同的情緒,聽起來與人聲無異 其實這些大都是利用微軟Azure的文字轉語音技術來實現(xiàn)的 雖然國內(nèi)也有很多配音工具,但體驗下來還是微軟的效果最好,語氣最為自然 不過Azure的文字轉語音功能

    2024年02月02日
    瀏覽(26)
  • Unity調用微軟SpeechLib.Dll的C#類實現(xiàn)語音合成功能

    using System.Collections; using System.Collections.Generic; using UnityEngine; using SpeechLib; public class Speech : MonoBehaviour { // Start is called before the first frame update void Start() { } 將Interop.SpeechLib.dll文件導入Unity,然后把上面的腳本掛載到游戲對象上就能測試語音合成的效果了。 經(jīng)測試 調用v.Speak這個方

    2024年02月13日
    瀏覽(31)
  • 使用微軟Azure的tts文本轉語音服務出現(xiàn)java.lang.UnsatisfiedLinkError

    使用微軟Azure的tts文本轉語音服務出現(xiàn)java.lang.UnsatisfiedLinkError

    最近,在使用微軟tts文本轉語音的speech服務時,項目正常整合了微軟的依賴,服務也正常啟動。但是只要調用微軟文本轉語音服務api時,就會出現(xiàn)如下報錯。 該方法是一個native方法,我以為是依賴中的dll文件沒有加載到,結果檢查不是。 最后分析:native依賴的是底層實現(xiàn)的

    2024年02月14日
    瀏覽(26)
  • Python讓AI虛擬主播接入微軟Azure語音合成并精準嘴型同步

    Python讓AI虛擬主播接入微軟Azure語音合成并精準嘴型同步

    上一篇文字中講了利用Python實現(xiàn)利用微軟Azure無限免費將文本轉mp3格式的音頻文件并下載到本地。微軟Azure TTS的優(yōu)點不用多說,今天將講如何利用Python將其接入到虛擬主播中來。 訂閱專欄 ,我將免費向您提供具體的方案。 看過專欄其他文章的朋友,一定知道,我們使用的虛

    2024年02月15日
    瀏覽(20)
  • [Unity+OpenAI TTS] 集成openAI官方提供的語音合成服務,構建海王暖男數(shù)字人

    [Unity+OpenAI TTS] 集成openAI官方提供的語音合成服務,構建海王暖男數(shù)字人

    ? ? ? ? 最近openAI官方發(fā)布了很多新功能,其中就包括了最新發(fā)布的TTS語音合成服務的api接口。說到這個語音合成接口,大家可能會比較陌生,但是說到chatgpt官方應用上的聊天機器人,那個臺灣腔的海王暖男的聲音,可能就有印象了吧。那么從官方文檔中,可以發(fā)現(xiàn),openA

    2024年02月04日
    瀏覽(27)
  • 【C#】Whisper 離線語音識別(微軟曉曉語音合成的音頻)(帶時間戳、srt字幕)...

    【C#】Whisper 離線語音識別(微軟曉曉語音合成的音頻)(帶時間戳、srt字幕)...

    語音合成語音識別 用微軟語音合成功能生成xiaoxiao的語音。 用Whisper離線識別合成的語音輸出srt字幕。 一、語音合成 參考這個網(wǎng)址:https://www.bilibili.com/read/cv19064633 合成的音頻:曉曉朗讀-溫柔 二、Whisper 語音識別 下載模型后放入程序目錄下: 請注意,主要示例目前僅使用

    2024年02月06日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包