ロゴ メインコンテンツへ
RSSフィード
「ソフトウェア開発」に関連する記事一覧

【C#】VOICEVOXのspeaker一覧を取得するサンプルとID一覧

2023/04/07
(この記事の文字数: 951)

VOICEVOX の speaker 一覧を C# アプリから取得するユーティリティーを作ったので掲載しておきます。

using System.Collections.Generic;
using System.Media;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;

public class Style
{
    [JsonPropertyName("name")]
    public string Name { get; set; }

    [JsonPropertyName("id")]
    public int Id { get; set; }
}

public class SupportedFeatures
{
    [JsonPropertyName("permitted_synthesis_morphing")]
    public string PermittedSynthesisMorphing { get; set; }
}

public class Speaker
{
    [JsonPropertyName("supported_features")]
    public SupportedFeatures SupportedFeatures { get; set; }

    [JsonPropertyName("name")]
    public string Name { get; set; }

    [JsonPropertyName("speaker_uuid")]
    public string SpeakerUuid { get; set; }

    [JsonPropertyName("styles")]
    public List<Style> Styles { get; set; }

    [JsonPropertyName("version")]
    public string Version { get; set; }
}

public static class VoicevoxUtility
{
    const string baseUrl = "http://127.0.0.1:50021/"; // localhostだとレスポンスが遅いのアドレス指定
    private static readonly HttpClient httpClient = new HttpClient();

    public static IEnumerable<Speaker> EnumerateSpeakers()
    {
        var jsonStr = GetSpeakersAsJson().Result;
        var deserialized = JsonSerializer.Deserialize<List<Speaker>>(jsonStr);
        if (deserialized is null)
        {
            yield break;
        }

        foreach (var speakerInfo in deserialized)
        {
            yield return speakerInfo;
        }
    }

    private static async Task<string> GetSpeakersAsJson()
    {
        using var requestMessage = new HttpRequestMessage(new HttpMethod("GET"), $"{baseUrl}speakers");
        requestMessage.Headers.TryAddWithoutValidation("accept", "application/json");

        requestMessage.Content = new StringContent("");
        requestMessage.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
        var response = await httpClient.SendAsync(requestMessage);
        return await response.Content.ReadAsStringAsync();
    }
}

以下は audio_query 等に投げる speaker に指定可能なID一覧をコンソール出力するサンプルです。


foreach (var style in VoicevoxUtility.EnumerateSpeakers().SelectMany(x => x.Styles))
{
    Console.WriteLine($"{style.Name}: {style.Id}");
}

ちなみにVOICEVOX 0.14.4では以下の話者とそのIDが出力されました。

キャラクター名スタイルID
四国めたんノーマル2

あまあま0

ツンツン6

セクシー4

ささやき36

ヒソヒソ37
ずんだもんノーマル3

あまあま1

ツンツン7

セクシー5

ささやき22

ヒソヒソ38
春日部つむぎノーマル8
雨晴はうノーマル10
波音リツノーマル9
玄野武宏ノーマル11

喜び39

ツンギレ40

悲しみ41
白上虎太郎ふつう12

わーい32

びくびく33

おこ34

びえーん35
青山龍星ノーマル13
冥鳴ひまりノーマル14
九州そらノーマル16

あまあま15

ツンツン18

セクシー17

ささやき19
もち子さんノーマル20
剣崎雌雄ノーマル21
WhiteCULノーマル23

たのしい24

かなしい25

びえーん26
後鬼人間ver.27

ぬいぐるみver.28
No.7ノーマル29

アナウンス30

読み聞かせ31
ちび式じいノーマル42
櫻歌ミコノーマル43

第二形態44

ロリ45
小夜/SAYOノーマル46
ナースロボ_タイプTノーマル47

楽々48

恐怖49

内緒話50


  このエントリーをはてなブックマークに追加  

<<「ソフトウェア開発」の記事一覧に戻る

コメント(0 件)



コンテンツロード: 0.0197 sec
Copyright(C)2006-2024 puarts All Rights Reserved