search
LoginSignup
7

More than 1 year has passed since last update.

posted at

updated at

Organization

CoeFontをC#で使ってみる

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恐るべき性能です。

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
What you can do with signing up
7