LoginSignup
5
7

More than 1 year has passed since last update.

CoeFontをC#で使ってみる

Last updated at Posted at 2021-10-02

CoeFontを使う機会があったので軽くまとめます。

CoeFontって?

自分の声をAI合成音声化するサービスです
さらにみんなが登録した声も使うことができます

CoeFontを利用するには、クレジットカードを必要とするアカウント登録が必要となります。
30日間は、無料ですので興味があれば試してみてください。

coeFontごとにポイントが指定されており、そのポイントを使用して利用することができます。
※5ptのcoeFontを使用した場合は、最大10,000文字まで利用可能

CoeFont Cloud APIを使ってみる

CoeFont Cloud API

CoeFont Cloudを使用するためにAPIです。
このAPIを使うことで外部から自由に音声を作成することができます。

pythonや、nodejsのサンプルコードがありますので、これらを使う場合は比較的簡単に扱えると思います。

アクセスキーと、クライアントシークレットを取得する

CoeFont Cloudにログインをしたら、右上の人型アイコンをクリックし、「アカウント設定」を選択します。

アカウント設定

アカウント設定画面が表示されたら、「API情報」のメニューがあるので、クリックし、「アクセス情報」を発行します(以下の画像は既に発行済み)
API情報

 C#でAPIを使ってみる

Azure FunctionsをC#で使うことが多いため、今回はC#で使えるサンプルを記載します。

利用までの手順は以下の通りです。

  1. UNIX時間(UTC)を取得する
  2. 送信用のjsonを作成する
  3. 1と2を使用しHMAC-SHA256でハッシュ化しhex値を取得する
  4. HeaderとBodyを設定する
  5. APIを呼び出して、音声を取得する

1. UNIX時間(UTC)を取得する

// UTCのUnixTimeStampを取得する
string unixTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds().ToString();

2.送信用のjsonリクエストBodyを作成する

// 送信用の情報を生成します。
var body = new Dictionary<string, object>()
{
    { "coefont", << CoeFontUUID >> },
    { "text"   , << 変換する文字列 >> },
    { "format" , "wav"}
};

// 送信用のパラメータをJONS化する 
var body_json = JsonConvert.SerializeObject(body);
CoeFontのUUID

CoeFontのUUIDは、各種CoeFontの紹介ページのURLに表示されているものになります。
利用するCoeFontによっては、本人への申請が必要なものもあります。
承諾がない場合は、エラーとなりますのでご注意ください。
UUID

送信パラメータについて

音声のピッチや、抑揚、句点の間隔(秒)などを細かく設定することができます。
coeFontの情報と、音声変換テキストは必須ですが、あとは任意です。

詳しくは、以下のURLをご参照ください

3.1と2を使用しHMAC-SHA256でハッシュ化しhex値を取得する

クライアントシークレットを用いて、UNIX時間(UTC)と、JSON情報をからHMAC-SHA256でハッシュ化した結果のhex値の文字列として取得します。

// シークレットキーのByte情報を取得            
var hmac_key = Encoding.UTF8.GetBytes( <<クライアントシークレット>> );
// UNIX時間(UTC) + 本文のJSONが、ハッシュ化対象となります。
var hmac_body = Encoding.UTF8.GetBytes(unixTime + body_json);

string signature = "";
using (HMACSHA256 hmac = new HMACSHA256(hmac_key)){
    //ハッシュ化します。
    var hash = hmac.ComputeHash(hmac_body, 0, hmac_body.Length);
    //ハッシュ化したデータをHEX化します。                
    signature = BitConverter.ToString(hash);    
}
//HEXから「ー」を削除します。
signature = signature.Replace("-", "").ToLower();

4. HeaderとBodyを設定する

1で取得したUNIX時間(UTC)と、3で取得したhex値の文字列、アクセスキーをHeaderに設定します。
Bodyには、2で作成したJSONの文字列を設定します。

// ヘッダを設定します
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post,"https://api.coefont.cloud/v1/text2speech");
request.Headers.Add("X-Coefont-Date", unixTime);
request.Headers.Add("X-Coefont-Content", << 3で作成したハッシュのhex文字列 >> );
request.Headers.Add("Authorization", << アクセスキー >>);

//# Bodyの指定
var httpContent = new StringContent(body_json, Encoding.UTF8, "application/json");  
request.Content = httpContent;

APIを呼び出して、音声を取得する

あとは、APIを呼び出します。
リクエストボディで指定した形式の音声が取得されますので、受信データを好きにご活用ください。

using (var client = new HttpClient()){

    var response = await httpClient.SendAsync(request);
    if(response.IsSuccessStatusCode){
      //~受信後の処理~
    }
}

まとめ

CoeFont恐るべき性能です。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7