VoiceVoxでLLMにしゃべらせる準備をする

LLMにしゃべらせるのに読み上げソフトを使います。有償のものでもよかったのですがC#から使えるのか不明だったため無償なのに高性能なVoiceVoxを使うことにしました。VoiceVoxアプリにRestAPIで送受信するコーディングでまずテストしたいと思います。VoiceVoxアプリが起動していないと声が出ませんのでご注意ください。
参考にしたサイト:@ovahun様 Quita VOICEVOXをC#でREST-API経由で喋らせる(その1 発話)
VoiceVoxダウンロード:VOICEVOX 無料で使える中品質なテキスト読み上げ・歌声合成ソフトウェア

処理を速くするためにWaveをファイルに書き出さずにメモリで処理しています。
SoundPlayerはWIndows固有処理なのでSystem.Windows.ExtensionsをNuGetしてください。

using System.Media;
using System.Net.Http.Headers;

using (var httpClient = new HttpClient())
{
    string strCnt;
    int intSpeaker = 4; //四国めたん(セクシー)
    string txtMsg = "ちょっとだけアソコ、濡れちゃってるかもよ";

    using (var htpReq = new HttpRequestMessage(new HttpMethod("POST"), $"http://localhost:50021/audio_query?text={txtMsg}&speaker={intSpeaker}"))
    {
        htpReq.Headers.TryAddWithoutValidation("accept", "application/json");
        htpReq.Content = new StringContent("");
        htpReq.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");

        var rspMsg = await httpClient.SendAsync(htpReq);
        strCnt = rspMsg.Content.ReadAsStringAsync().Result;
    }

    using (var htpReq = new HttpRequestMessage(new HttpMethod("POST"), $"http://localhost:50021/synthesis?speaker={intSpeaker}&enable_interrogative_upspeak=true"))
    {
        htpReq.Headers.TryAddWithoutValidation("accept", "audio/wav");
        htpReq.Content = new StringContent(strCnt);
        htpReq.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");

        var htpRes = await httpClient.SendAsync(htpReq);


        MemoryStream memStm = new MemoryStream();
        using (var htpStm = await htpRes.Content.ReadAsStreamAsync())
        {
            //メモリストリームにコピー
            htpStm.CopyTo(memStm);
            memStm.Flush();
        }
        memStm = new MemoryStream(memStm.ToArray());
        var player = new SoundPlayer(memStm);
        //音声再生
        player.PlaySync();
    }
}





サービスでVOICEVOXのサンプルを載せておきます




speakerのナンバーと名前は下記のとおり(v0.19.2)

speaker	name
0	四国めたん(あまあま)
1	ずんだもん(あまあま)
2	四国めたん(ノーマル)
3	ずんだもん(ノーマル)
4	四国めたん(セクシー)
5	ずんだもん(セクシー)
6	四国めたん(ツンツン)
7	ずんだもん(ツンツン)
8	春日部つむぎ(ノーマル)
9	波音リツ(ノーマル)
10	雨晴はう(ノーマル)
11	玄野武宏(ノーマル)
12	白上虎太郎(ふつう)
13	青山龍星(ノーマル)
14	冥鳴ひまり(ノーマル)
15	九州そら(あまあま)
16	九州そら(ノーマル)
17	九州そら(セクシー)
18	九州そら(ツンツン)
19	九州そら(ささやき)
20	もち子さん(ノーマル)
21	剣崎雌雄(ノーマル)
22	ずんだもん(ささやき)
23	WhiteCUL(ノーマル)
24	WhiteCUL(たのしい)
25	WhiteCUL(かなしい)
26	WhiteCUL(びえーん)
27	後鬼(人間ver.)
28	後鬼(ぬいぐるみver.)
29	No.7(ノーマル)
30	No.7(アナウンス)
31	No.7(読み聞かせ)
32	白上虎太郎(わーい)
33	白上虎太郎(びくびく)
34	白上虎太郎(おこ)
35	白上虎太郎(びえーん)
36	四国めたん(ささやき)
37	四国めたん(ヒソヒソ)
38	ずんだもん(ヒソヒソ)
39	玄野武宏(喜び)
40	玄野武宏(ツンギレ)
41	玄野武宏(悲しみ)
42	ちび式じい(ノーマル)
43	櫻歌ミコ(ノーマル)
44	櫻歌ミコ(第二形態)
45	櫻歌ミコ(ロリ)
46	小夜/SAYO(ノーマル)
47	ナースロボ_タイプT(ノーマル)
48	ナースロボ_タイプT(楽々)
49	ナースロボ_タイプT(恐怖)
50	ナースロボ_タイプT(内緒話)
51	†聖騎士 紅桜†(ノーマル)
52	雀松朱司(ノーマル)
53	麒ヶ島宗麟(ノーマル)
54	春歌ナナ(ノーマル)
55	猫使アル(ノーマル)
56	猫使アル(おちつき)
57	猫使アル(うきうき)
58	猫使ビィ(ノーマル)
59	猫使ビィ(おちつき)
60	猫使ビィ(人見知り)
61	中国うさぎ(ノーマル)
62	中国うさぎ(おどろき)
63	中国うさぎ(こわがり)
64	中国うさぎ(へろへろ)
65	波音リツ(クイーン)
66	もち子さん(セクシー/あん子)
67	栗田まろん(ノーマル)
68	あいえるたん(ノーマル)
69	満別花丸(ノーマル)
70	満別花丸(元気)
71	満別花丸(ささやき)
72	満別花丸(ぶりっ子)
73	満別花丸(ボーイ)
74	琴詠ニア(ノーマル)
75	ずんだもん(ヘロヘロ)
76	ずんだもん(なみだめ)
77	もち子さん(泣き)
78	もち子さん(怒り)
79	もち子さん(喜び)
80	もち子さん(のんびり)
81	青山龍星(熱血)
82	青山龍星(不機嫌)
83	青山龍星(喜び)
84	青山龍星(しっとり)
85	青山龍星(かなしみ)
86	青山龍星(囁き)
87	後鬼(人間(怒り)ver.)
88	後鬼(鬼ver.)

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です