N.Yamazaki's blog

主に音声合成について思ったことを書いてみようと思います。
AquesTalk-ESPを簡単に使うクラス(プログラム)

keywords: ESP32, 音声合成, マルチタスク, M5Stack
 

■概要


 

前記事では、ESP32用の音声合成ライブラリ AquesTalk pico for ESP32(AquesTalk-ESP)を紹介しました。
今回は、これを用いてバックグラウンドで内蔵DACから音声を出力するプログラム "AquesTalkTTS" を紹介します。

 

このAquesTalkTTSは、AquesTalk-ESPで音声を生成してI2S経由で内蔵DACから出力するまでを一つにまとめたC++のクラスです。初期化と発声の最短2ステップで簡単に音声合成できます。

 

当初はAquesTalk-ESPを非同期処理で使うテクニックを書こうと思っていたのですが、
そもそもESP32はFreeRTOS上で動いているので、素直にこのマルチタスク機能を使います。


 

 


■サンプルプログラム


 

M5Stackで動作します。

 

機能:

  • 時刻を表示
  • 左ボタン:年月日を読み上げ
  • 中ボタン:時分秒を読み上げ
  • 右ボタン:発声を中止

 ※ 読み上げ中も、時刻表示は毎秒変化します。
   ※ 発声中に別のボタンを押すと、即座に発声が切り替わります。

 

ダウンロード

 サンプルプログラム「M5_TalkingClock.zip」(AquesTalkTTSのソースコードも入っています)

 

 

■コード説明



サンプルプログラムをもとに、AquesTalkTTSクラスの使い方を示します。

 

M5_TalkingClock.ino(抜粋)

14 void setup()
15 {
・・・
21   iret = TTS.create(licencekey);
・・・
30 }
31 
32 void loop()
33 {
・・・
38   if(M5.BtnA.wasPressed()){
39     if(getLocalTime(&timeinfo)){
40       // 年月日の読み上げ
41       sprintf(koe,"<NUMK VAL=%d COUNTER=nenn>/<NUMK VAL=%d COUNTER=gatu>/<NUMK VAL=%d COUNTER=nichi>.",
42         timeinfo.tm_year+1900,timeinfo.tm_mon+1, timeinfo.tm_mday);
43       iret = TTS.play(koe, 100);
・・・
60   else if(M5.BtnC.wasPressed()){
61     TTS.stop();
62   }
63 
64   M5.update();
65 }

setup()の中で、AquesTalkTTSを初期化します(21行目)

 

loop()の中で、左ボタンが押されたら(38行目)、時間を取得し、数値読みタグで年月日の音声記号列を生成します(41行目)。あとは、TTS.play()を呼び出すだけです(43行目)。これで年月日が読み上げられます。音声出力はバックグラウンドで処理するので、TTS.play()はすぐに戻ります。

 

右ボタンが押されたら(49行目)、TTS.stop()を呼び出します。これで発声が停止します。発声中以外は特に何も起こりません。


※ あらかじめArduinoIDE上にAquesTalk-ESPをインストールしておく必要があります。
    インストール方法は、前記事の「ビルド準備 - ArduinoIDEの場合」の項を参照ください。
※ ライセンスキーが未指定の場合は、「ゆっくりしていってぬ」になります。

 


■AquesTalkTTSクラス(AquesTalkTTS.cpp/.h)の動作


 

AquesTalk-ESPとI2S経由で内蔵DACから音声出力するまでを1つのクラスにしています。
メソッドは create(), play(), stop(), release() の4つだけです。
create()で初期化、play()で音声合成開始、stopで発声停止、release()でメモリ解放します。

 

create()

AquesTalk-ESPの初期化を行っています。ワークバッファしてヒープ上に400byte確保されます。I2Sの初期化は行っていません。

 

play():

引数の音声記号列をAquesTalk-ESPにセットしてから、音声出力用のタスク(task_TTS_synthe())を起動します。

 

task_TTS_synthe():  (内部のタスク関数)

I2Sの初期化(DMAバッファが確保される)後、フレーム単位での音声合成を行いI2Sへ書き込みます。
最後のフレームまで生成したら、I2Sを解放します。
I2Sと内蔵DACは発声中だけ使用しますので、それ以外のときにビープなど他の音を出力することもできます。

 

stop():

不正な音声記号("#")を指定して、わざとAquesTalk-ESPがエラーで終了するようにしています。

 

※ 発声中にplay()を行うと、発声中のメッセージはその場で終了し、新たに指定したメッセージが始まります。
※ ArduinoIDE環境で動作確認しましたが、ESP-IDFでも動くと思います。
※ クリックノイズ対策済みです。

 

 

■リンク



「ESP32で音声合成(AquesTalk pico for ESP32)」
http://blog-yama.a-quest.com/?eid=970188

 

「ESP32でサウンド出力時のクリックノイズ対策(I2S+内蔵DAC)」
http://blog-yama.a-quest.com/?eid=970190

 

| AquesTalk | 22:10 | - | - |
ESP32で音声合成(AquesTalk pico for ESP32)

keywords: 音声合成 AquesTalk ESP32  I2S 
 

概要


 

AquesTalk pico for ESP32 (以下、AquesTalk-ESP)は、ESP32向けの音声合成ライブラリです。
これを使って、ESP-WROOM-32の内臓のDA(I2S経由)から合成音声を出力します。
アンプ・スピーカーを内蔵しているM5Stackなら、ソフトだけで簡単に音声合成できます。

 

 

 

AquesTalk pico for ESP32 (AquesTalk-ESP)の入手


 

アクエストのサイトからダウンロードできます。

 

・アクエスト > ダウンロード
   https://www.a-quest.com/download.html

 

ダウンロードしたZIPの中身は、ヘッダファイル aquestalk.h、ライブラリ libaquestalk.a、あとはドキュメントファイルです。
なお、ここでいうライブラリとはコンパイルしたオブジェクトを指し、ArduinoIDEのライブラリ(ソースコード等から構成されるもの)ではありません。また、AquesTalk-ESPは有償ソフトウェアであり、評価版ではナ行とマ行がすべてヌと発声される制限があります。

 

 

ビルド準備  ArduinoIDEの場合


 

ArduinoIDEによる開発環境上に、AquesTalk-ESPをインストールする手順を以下に示します。ArduinoIDEや、ArduinoIDEでESP32をビルドするための「Arduino core for the ESP32」はすでにインストールされているものとします。

 

1.  次の場所にライブラリとヘッダをコピーします。

{PATH_Arduino_ESP32}¥tools¥sdk¥lib¥libaquestalk.a
{PATH_Arduino_ESP32}¥tools¥sdk¥include¥aquestalk¥aquestalk.h

ここで、{PATH_Arduino_ESP32}は、「Arduino core for the ESP32」をインストールした場所です。 私の環境では次のとおりでした。

C:¥Program Files (x86)¥arduino¥hardware¥espressif¥esp32

aquestalk¥aquestalk.hのaquestalkフォルダは作成してください。

 

2.  次の場所にplatform.local.txtを作成します。同じ場所にplatform.txtがあるはずです。

{PATH_Arduino_ESP32}¥platform.local.txt

platform.local.txtには、以下を記述します。これは、コンパイル時のインクルードパスにaquestalkを追加し、リンク時にlibaquestalk.aを加える指定です。

compiler.c.extra_flags="-I{compiler.sdk.path}/include/aquestalk"
compiler.cpp.extra_flags="-I{compiler.sdk.path}/include/aquestalk"
compiler.c.elf.libs=-lgcc -lopenssl -lbtdm_app -lfatfs -lwps -lcoexist -lwear_levelling -lhal -lnewlib -ldriver -lbootloader_support -lpp -lsmartconfig -ljsmn -lwpa -lethernet -lphy -lapp_trace -lconsole -lulp -lwpa_supplicant -lfreertos -lbt -lmicro-ecc -lcxx -lxtensa-debug-module -lmdns -lvfs -lsoc -lcore -lsdmmc -lcoap -ltcpip_adapter -lc_nano -lrtc -lspi_flash -lwpa2 -lesp32 -lapp_update -lnghttp -lspiffs -lespnow -lnvs_flash -lesp_adc_cal -llog -lexpat -lm -lc -lheap -lmbedtls -llwip -lnet80211 -lpthread -ljson  -lstdc++ -laquestalk

compiler.c.elf.libsの部分は、Arduino core for the ESP32のバージョンによって異なるかもしれません。platform.txtからcompiler.c.elf.libsの部分をコピペして、最後に -laquestalk を加えます。

以上で準備は終わりです。

 


ビルド準備   ESP-IDFの場合


 

ESP-IDFの場合は、ArduinoIDEの場合とは異なり、アプリのプロジェクトの中にAquesTalkのライブラリとヘッダをコピーします。

具体的には次のようにプロジェクトのファイルを構成します(ここではプロジェクト名をhello_aquestalkとしています。~はmingw32ターミナル上でのホームディレクトリ)。


[ダウンロード hello_aquestalk.zip]

~/esp/hello_aquestalk/
    Makefile
    main/
        main.c
        aquestalk.h
        libaquestalk.a
        component.mk

なお、私のWindows上では以下のディレクトリになりました。

C:¥msys32¥home¥{USER_NAME}¥esp¥hello_aquestalk

MakefileはESP32-IDFの通常のままで、AquesTalkを使う上で特別な部分はありません。次の2行を記述します。

PROJECT_NAME := hello_aquestalk
include $(IDF_PATH)/make/project.mk

 

mainディレクトリを作成し、そのなかに、main.c, aquestalk.h,libaquestalk.a,component.mkを配置します。

component.mkには以下の記述を追加します。これは、リンク時にlibaquestalk.aを追加する指定です。この指定を忘れると、make時にAquesTalkの関数が未定義とのエラーになります。

COMPONENT_ADD_LDFLAGS += $(COMPONENT_PATH)/libaquestalk.a

以上で準備は終わりです。

 

 

サンプルコード


 

サンプルプログラムは、3つのメッセージを連続して音声出力するものです。
ArduinoIDEとESP-IDFの2つ用意していますが、ソースコードはほとんど同じです。
上のビルド準備が整っていれば、ArduinoIDEでは [マイコンボードに書き込む]、ESP-IDFでは 
$ make flash monitor で、GPIO25かGPIO26端子から音声信号が出力されるはずです。

 

・サンプルコードのダウンロード
    helllo_aquestalk(ArduinoIDE用)
    helllo_aquestalk(ESP-IDF用)

 


コード説明


 

以下はサンプルコードの抜粋です。
 

5|   #define LEN_FRAME 32
6|   uint32_t workbuf[AQ_SIZE_WORKBUF];
...
8|   void setup() {
...
12|   	Serial.println("Initialize AquesTalk");
13|   	iret = CAqTkPicoF_Init(workbuf, LEN_FRAME, "XXX-XXX-XXX");
...
17|   
18|   	DAC_Create();
...
21|   	Play("konnnichiwa.");
...
26|   	DAC_Release();
...
28|   }
...
34|   void Play(const char *koe)
35|   {
...
39|   	int iret = CAqTkPicoF_SetKoe((const uint8_t*)koe, 100, 0xffffU);
...
42|   	for(;;){
43|   		int16_t wav[LEN_FRAME];
44|   		uint16_t len;
45|   		iret = CAqTkPicoF_SyntheFrame(wav, &len);
46|   		if(iret) break; // EOD
47|   		
48|   		DAC_Write((int)len, wav);
49|   	}
50|   }
...
53|   //i2s configuration 
54|   const int i2s_num = 0; // i2s port number
55|   i2s_config_t i2s_config = {
56|   		 .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN),
57|   		 .sample_rate = 24000,
...
65|   };
66|   
67|   void DAC_Create()
68|   {
69|   	AqResample_Reset();
70|   
71|   	i2s_driver_install((i2s_port_t)i2s_num, &i2s_config, 0, NULL);
72|   	i2s_set_pin((i2s_port_t)i2s_num, NULL);
73|   }
...
81|   int DAC_Write(int len, int16_t *wav)
82|   {
83|   	int i;
84|   	for(i=0;i<len;i++){
85|   		// upsampling x3
86|   		int16_t wav3[3];
87|   		AqResample_Conv(wav[i], wav3);
88|   
89|   		// write to I2S DMA buffer
90|   		for(int k=0;k<3; k++){
91|   			uint16_t sample[2];
92|   			uint16_t us = ((uint16_t)wav3[k])^0x8000U;	// signed -> unsigned data 内蔵DA Only
93|   			sample[0]=sample[1]=us; // mono -> stereo
94|   			int iret = i2s_push_sample((i2s_port_t)i2s_num, (const char *)sample, 100);
95|   			if(iret<0) return iret; // -1:ESP_FAIL
96|   			if(iret==0) break;	//	0:TIMEOUT
97|   		}
98|   	}
...

 

CAqTkPicoF_Init()でAquesTalkを初期化します(13行目)。
引数にはワークバッファ、フレーム長、ライセンスキーを指定します。
ワークバッファは、AquesTalkが内部処理で使うメモリで、サイズが AQ_SIZE_WORKBUF の uint32_t 配列を指定します。AQ_SIZE_WORKBUF は aquestalk.h 内で定義されています。ワークバッファは音声合成処理を行っている時に必要で、一連の処理後は解放できます。これによりRAMを効率よく利用できます。

AquesTalkは、非同期処理にも対応できるように分割して音声を生成します。フレーム長とは、このときに一回に生成する音声波形の長さ(サンプル数)で、初期化時に指定します。指定可能な値の範囲は30-300で、ここでは32を指定しています。
最後の引数にはライセンスキーを指定し、評価版として使用するときはNULLを指定します。

 

AqTkPicoF_SetKoe()で、発声するメッセージ(音声記号列)を指定します(39行目)。
第2引数は発話速度でデフォルトが100。値を大きくするほど早い発声になります。
第3引数は最後の無音区間の長さです。通常デフォルトの0xFFFFUを指定すれば良いでしょう。

 

CAqTkPicoF_SyntheFrame()で、1フレームの音声データを取得します(45行目)。
サンプリング周波数が8KHzで、フレーム長に32サンプルを指定したので、32/8KHz=4ms毎に音声を生成することになります。戻り値が0以外なるまでこの関数を複数回呼び出します。
第1引数には16bit/PCM/モノラルの音声データが返されます。
第2引数は生成したデータのサンプル数が返ります。通常はフレーム長に等しく、最後のフレームだけフレーム長より小さくなることがあります。

 

DAC_Create()で、I2Sの初期化をします(67行目)。この中で、I2S経由で内蔵DACから出力する設定を指定しています。
AquesTalk picoの出力音声データは8KHzのサンプリング周波数ですが、AquesTalk-ESP32ライブラリには、これを3倍にアップサンプリングするサンプリング周波数変換関数(AqResample)が含まれています。
アップサンプリングにより、ローパスフィルタが使われていないオーディオ系に出力するときに、チロチロとした折り返し雑音を抑制することができます。もし、DA出力側にfc4KHz程度のLPFを入れられるのならば、アップサンプリングをせず8KHzのまま出力したほうがCPU負荷は少なくなります。

 

AqResample_Reset()は、アップサンプリング処理の初期化関数です(69行目)。
また、アップサンプリングに伴い、i2s_driver_install()で指定するconfigurationのサンプリング周波数には8KHzでなく24KHzを指定しています(57行目)。

 

DAC_Write()で、1フレーム(32サンプル)の音声をI2Sに出力しています(81行目)。
AqResample_Conv()のアップサンプリング処理により、1サンプルのデータが3サンプルに変換されます。これを1サンプルづつi2s_push_sample()でI2Sのバッファに出力します。

 

 

I2Sには符号無しデータを与える?!(内蔵DACの例外)



本来、I2Sのデータは符号付きです。16bitデータの場合、値は-32768〜32767の範囲で、センターの値は0となります。ところが、内臓DAの場合は、0-65535(下位8bitは無視)の範囲で、センターの値は32768にする必要があります。サンプルコードではこの変換を行っていますが(92行目)、外部接続のI2C-DACを使うときは、この変換をしてはNGです。

 


外付けDACを使うには


 

内蔵DACを使うと、I2Sの初期化時と、音声出力の最初にポップノイズが発生しています。原因の予想はついていますが、これについてはもう少しちゃんと調べてから書こうと思います。
コードを少し変更することで、ESP32の内蔵DACの代わりにPCM5102A搭載などの外付けI2S-DACを用いることもできます。
変更点は、

  • i2s_config.modeでI2S_MODE_DAC_BUILT_INフラグを外す
  • i2s_set_pin()で使用するピンの設定を行なう
  • 符号無しデータに変換している処理(92行目)をしない。

 

実際にRaspberry Pi用のPCM5102A搭載32bit 384kHz DAC完成基板を用いて動かしてみました。ただ、DACの設定がI2Sモードでは動かず、left justifiedにする必要があり、ちょっとモヤモヤしています。

 

 

ライセンスキーの入手



AquesTalk-ESPの評価版はナ行とマ行がすべてヌと発声される制限があります。ライセンスキーを購入することでこの制限が解除されます。

ライセンスキーの入手は、アクエストOnline Storeで「AquesTalk pico for ESP32 使用ライセンス」を購入します。このとき備考欄に使用するESP32モジュールのMACアドレスを記載する必要があります。その後に郵送されるライセンス証にライセンスキーが記載されており、このライセンスキーをCAqTkPicoF_Init()に指定します。

MACアドレスが不明の場合は、次のスケッチを実行します。

 

・アクエストOnline Store「AquesTalk pico for ESP32 使用ライセンス

 

[GetMAC.ino]

// Get default MAC Address
void setup() {
  Serial.begin(115200);
  uint8_t mac[6];
  esp_efuse_mac_get_default(mac);
  Serial.printf("¥nMAC Address = %02X:%02X:%02X:%02X:%02X:%02X¥r¥n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
}
void loop() {
}  

 

最後に


 

AquesTalk picoは、Flash(ROM)28KB、RAM:500B という極めて小さなリソースなので、他の処理に大きな負担をかけずに音声合成できます。アラートなどアプリのちょっとした部分に使用することもできると思います。
今回のコードは音声出力している間は他の処理ができない同期処理ですが、コードの書き方で音声出力と同時に表示を行うなど非同期の処理も可能です。この非同期で使う方法は次記事にする予定です。

 

次記事   「AquesTalk-ESPを簡単に使うクラス(プログラム)」

  http://blog-yama.a-quest.com/?eid=970191


リンク


 

・Arduino core for the ESP32 のインストール方法

  https://www.mgo-tec.com/arduino-core-esp32-install


・ESP-IDF ( ESP32 開発環境 ) の使い方

  https://www.mgo-tec.com/esp32-idf-howto-01


・ESP32でI2S+DACを使う

  https://qiita.com/h_nari/items/b52c525f0c5b35aaf692


・ESP-IDF Programming Guide - Build System
      http://esp-idf.readthedocs.io/en/latest/api-guides/build-system.html
 

| AquesTalk | 19:11 | - | - |
「ゆっくり声」は進化するか?!

■AquesTalk10をリリース

音声合成エンジンAquesTalkのリリースから約10年が経ち、ようやく新バージョン AquesTalk10 を、本日リリースしました。
「ゆっくり声」の音声合成エンジン、AquesTalk/AquesTalk2の後継バージョンです。

 

特徴:
・音声の周波数帯域を2倍にしてクリアな音質に
・音素データをすべて一から作り直り、さらにこれをチューニングをして、明瞭性を向上
・エンドユーザが複数の声質パラメータを操作して、自由に声質を作れる

 

当社サイトのデモページにて、9種のプリセット声種のサンプル音声が聴取できます。
また、評価版パッケージの中に、声質パラメータを自由に操作して音声合成できるサンプルアプリ「AqTk10App」が含まれています(評価版の制限あり)。

 

「 AqTk10App」

AqTk10App

 

■新しい声というジレンマ

AquesTalkの合成音声は、「ゆっくり声」として、長い間、多くのコンテンツに使われ、コンテンツの作者も、それを聴取するユーザーの耳にも、おなじみの声になっています。
これを新しい声に変更すると、サザエさんの声優が交代したときのように、間違いなく違和感が生じるでしょう。
幸い、声優と違って音声合成ソフトは歳をとらないので、ずっと同じ声を使えます。
実際、ゆっくり霊夢でよく使用されるAquesTalk F1は、2006年にリリースしてから11年間、声質は一切変わらないまま、今も使われています。そう考えると声を変えるニーズはそもそもあるのでしょうか。

一方、私としては、少しでも良いもの、進化したもの作り、それを多くの人に使ってもらいたいというエンジニアとしての勝手な欲求があります。

 

今回の新しい音声合成エンジンの開発にあたり、旧エンジンとの継続性を念頭に置きました。
新しい声になっても、これまでの声とできるだけ違和感が無いように、かつ、より良い声にすること。

これで、エンジン変更の壁を少しでも低くして、新しいエンジンを使ってもらおうと考えました。


今回、音声帯域を2倍に拡張しています。これまでの電話を通したような"こもった"音声が、テレビの音声くらいになりました。
音素片データも、すべて一新し、すべての音素にチューニングを施して明瞭性を向上させています。
 

ベースとなる音素片として、実況動画でよく使われる声種のF1E(女声1)、F2E(女声2)と、M1E(男声)の3種類を用意しています。

F1Eは、AquesTalk-F1のバージョンアップ版として、声質をできるだけ維持するように作り込みました。
音声合成の方式が異なるため、新規に作るより既存の声質に合わせるのは手間がかかる作業でしたが、違和感なくAquesTalk-F1から乗り換えられると自信を持っています。

F2Eは、AquesTalk-F2のバージョンアップ版としては少し声質が異なっています。
実況動画の「ゆっくり霊夢」と「ゆっくり魔理沙」の掛け合いを見ていると、2つの声質が似通っていて混同しやすいと感じていたため、F2EはF1Eとの違いを明確にしました。そのため、F2のバージョンアップ版としては、違和感があると思います。
うーむ。旧エンジンとの継続性が損なわれていますね。これで良かったのか・・・。
 

■実況動画で使われるか?

この新しい音声合成エンジンが実況動画で使われるようになるでしょうか。
あっという間に新しいエンジンに置き換えられることはありえませんが、完全スルーで今後も旧エンジンが使われ続けるるのは悲しいですね。
普及するかは正直わかりませんが、ゆっくり時間をかけて、少しずつこの新しいエンジンの声が使われていくことを願っています。
あと、AquesTalk10にはユーザが様々な声種を作れる機能があるので、過去にこだわらない新しい定番の声種が生まれるかもしれない。そんな期待もあります。

 

いずれにせよ、多くのユーザに使ってもらうには、まずは「SofTalk」「棒読みちゃん」「YukkuriMovieMaker」「ゆっくろいど」などの定番アプリケーションに採用してもらう必要がありますね。
 

 

「ゆっくり、つかっていってね!!!」

 

■Links

| AquesTalk | 17:38 | - | - |
ゆっくり実況で収益化するときライセンス購入は必要?

keywords: AquesTalk ライセンス YouTube 実況動画 広告収入 収益化 


最近、「YouTubeにゆっくり実況動画を広告付きで投稿するとき、ライセンスの購入が必要ですか?」という問い合わせが増えています。そこで、AquesTalkの使用ライセンスの購入についてまとめておきます。

 

本記事では「AquesTalk Win」を含んだアプリの使用について書いています。
AquesTalk2や、Mac版などその他のプラットフォーム版については当てはまりませんし、AquesTalkを使用したアプリを開発・公開する場合とも違う話です。もちろん、ゲーム実況時のゲームの版権や画像キャラ素材のライセンスに関しても本記事の対象外です。

 

■AquesTalkはそのライブラリのリリース時期でライセンス規定が異なる

AquesTalkのリリース当初は、たとえ営利目的の使用であってもライセンスを購入しないでOKでした。
しかし、2011年2月にライセンス規定が大きく変更され、それまでライセンスが必要だったMacやLinuxなどの他のOS版についても無償で利用可能になりましたが、一方で、無償利用は個人の非営利に限定され、法人や営利目的の使用ではライセンスの購入が必要となりました。
とはいえ、ライセンス規定はそのライブラリがリリースされたときの規定に従うべきとの観点から、同じAquesTalkライブラリであっても、そのライブラリのリリース時期によってライセンス規定が異なるというのが現状です。

 

■ライセンス購入の必要・不要を判定する
以下のフローにより、お使いのアプリに含まれるAquesTalkがライセンスの購入が必要かどうかを判断できます。
AquesTalkライブラリの実体は、アプリに含まれる「AquesTalk.dll」というファイルです。まずはこのファイルを探します。どのバージョンでも同じファイル名です。


【フロー図】フロー図


2011年1月以前のライブラリであるかを判断する方法として、タイムスタンプは変更される可能性があるので使えず、ここではMD5ハッシュ値で判断します。下表に2011年1月以前のライブラリのMD5ハッシュ値のリストを示しています。
お手元のAquesTalk.dllのMD5ハッシュ値がこのリストに該当すれば2011年1月以前のライブラリであり、無ければ2011年2月以降のライブラリとなります。

* ブラウザで簡単にファイルのMD5ハッシュ値を求めるサイトがあります。

 

「個人利用か?」の部分は、会社(個人事業含む)や学校(大学含む)での利用は個人利用に該当しません。これは実際に使用する場所だけでなく、業務や研究のためという目的の場合も個人利用に該当しません。

 

「収益化する?」の部分は、直接間接を問わず営利を目的とする場合は収益化に該当し、投稿動画に広告をつけて収益化を図る場合もこれに該当します。

 

【AquesTalk Win 営利でも無償利用可能なライブラリのMD5リスト】
声種 タイムスタンプ MD5ハッシュ値
f1 2006/5/17 d09ba89e04fc6a848377cb695b7c227a
f1 2006/10/6 23bd3bbfe89e7bb0f92e5e3ed841cec4
f1 2006/10/12 f97a031451220238b21ada12dd2ba6b7
f2 2007/1/30 8bfacc9e1c9d6f1a1f6803739a9ed7d6
m1 2007/1/30 950cb2c4a9493ff3af7906fdb02b523b
m2 2007/1/30 d4491b6ff6aab7e6f3a19dad369d0432
r1 2007/1/30 1a69c64175f46271f9f491890b265762
dvd 2007/3/19 cd431c8c86c1566e73cbbb166047b8a9
jgr 2007/3/19 54f15b467cbf215884d29a0ad39a9df3
imd1 2007/3/19 e352165e9da54e255c3c25a33cb85aaa
dvd 2007/3/19 cd431c8c86c1566e73cbbb166047b8a9
jgr 2007/3/19 54f15b467cbf215884d29a0ad39a9df3
imd1 2007/3/19 e352165e9da54e255c3c25a33cb85aaa

ファイル名はすべてAquesTalk.dll


上記フローチャートの結果、「不要」であればAquesTalk Winの使用ライセンスの購入は不要、「必要」であれば購入が必要となります。使用ライセンスは、下記からオンラインで購入可能です。

なお、この使用ライセンスは、あくまでもAquesTalkの使用許諾であり、生成後の音声データの使い方に関しては特に制限していませんので配布も含めて自由にお使いください。

 

「AquesTalk 使用ライセンス」

http://shop.a-quest.com/?pid=49638446

 

■AquesTalk2も含むアプリの場合は?
公開されているアプリの中にはAquesTalkだけでなくAquesTalk2ライブラリを含んだものもあります。
(アプリの中に「AquesTalk2.dllまたはAquesTalk2Da.dll」ファイルの有無を確認)
このような2つのライブラリが含まれるアプリを営利目的で使用する場合には、AquesTalk2の使用ライセンスの購入が必要です。
これは、たとえ投稿動画(コンテンツ)内でAquesTalkの合成音声だけを使いAquesTalk2の声を使わなくても、AquesTalk2を含んだアプリを使用するという観点からライセンスは必要だと考えています。
ちなみに、AquesTalk2は、AquesTalkとは異なり、リリース当初から営利目的の使用にはライセンス購入が必要となっています。


■アプリ開発者の方へお願い
どうかどうか、最新のライブラリを使ってください m(_ _)m
何かご相談等ありましたら、アクエスト問い合わせ先まで、お気軽にご連絡ください。


 

| AquesTalk | 21:09 | - | - |
聞き取りやすい音声合成エンジンをリリース!
今回リリースの AquesTalk pico f6 は、明瞭性を大幅に向上した音声合成エンジンです。
ここでは、従来エンジンとの聴取比較を行い、その違いを確認してみましょう。
プレスリリース

■ベースは pico f5
AquesTalk pico f6 は、音声合成ライブラリAquesTalkシリーズの中の「AquesTalk pico」エンジン、声種は f5(落ちついた女声)をベースに開発しました。したがって、声質は f5 を継承しています。
プログラムコードと音声データを含めても 30KByte 以下という驚異的な小ささを維持したまま、数10MByte 以上の音声データが必要とされるコーパスベースの音声合成エンジンと比べても遜色の無い明瞭度を実現しています。

■イントネーションの新モデルも実装
ピッチパタンを生成する韻律モデルを刷新しました。
様々な入力にも対応した安定したパタンを生成し、イントネーションを操作する各種記号とその効果をさらに直感的にすることで、所望のアクセントやイントネーションに楽に調整できるようになりました。
なお、声の高さは、AquesTalk pico f5 に比べて若干低めになっています。

■聞き比べてみよう
以下に、ベースとなったAquesTalk pico f5 と、今回リリースの AquesTalk pico f6 のサンプル音声を示します。
「はく、ハグ」
pico f5 
pico f6 

「たま、たな、かに、かみ」
pico f5 
pico f6 

「かんぴょー、かんびょー」
pico f5 
pico f6 

「L,M,N」
pico f5 
pico f6 

「りょーこ、よーこ」
pico f5 
pico f6 

「ローバ、ドーパ、ノーバ」
pico f5 
pico f6 

「すみれ、つみれ」
pico f5 
pico f6 

「パーベン、バーレン、ガーデン」
pico f5 
pico f6 

「かんじょー、かんりょー、かんみょー」
pico f5 
pico f6 

「こーりゅー、こーみゅー、こーにゅー」
pico f5 
pico f6 


■さらに聞くには
下記のデモページにて、ライブラリ種類に AquesTalk pico、声種に f6 を指定すれば、任意文の合成音声を体験できます。
「デモンストレーション」http://www.a-quest.com/demo/
| AquesTalk | 12:32 | - | - |
SofTalkの声はAquesTalkのどの声種?
金田一少年の事件簿Nの合成音声の声種はIMD1だった
昨日のテレビ「金田一少年の事件簿N」でAquesTalkで生成した合成音声が使われてましたね。
この合成音、"ゆっくり魔理沙"の声だという発言が多かったのですが、正確には"AquesTalk(1) IMD1"、アプリSofTalkでいうところの「中性」となります。

SofTalkの声とAquesTalkエンジンの声種との関係は?
SofTalkで使用する音声合成エンジンは、AquesTalk、AquesTalk2、SAPIの3種類です。このうち、SAPIの実体は単なるインターフェースなので実際の音声合成エンジンは各自のWindowsパソコン環境に依存し、日本語のエンジンなら別途インストールする必要があります。
一方、AquesTalkとAquesTalk2の2つは、SofTalk自体に最初から含まれる音声合成エンジンとなります。
ここで、アプリで表示される声の名前(声種名)はアプリの作者が自由につけてるので、音声合成エンジンとの対応がよくわかりません。今回、SofTalkの声がAquesTalkのどの声種に対応するのかをちゃんと調べてみました。以下がその結果です。
 
SofTalkの声とAquesTalkの声種
SofTalkの声 音声合成エンジン 声種 備考
女性1 AquesTalk f1 女声1 ゆっくり霊夢でよく使われる
女性2 AquesTalk f2 女声2 ゆっくり魔理沙でよく使われる
男性1 AquesTalk m1 男声1
男性2 AquesTalk m2 男声2
ロボット AquesTalk r1 ロボット1
中性 AquesTalk IMD1
機械  AquesTalk DVD
特殊 AquesTalk JGR
女性A AquesTalk2 defo1 別途公開
女性B AquesTalk2 f1b 公開終了
女性C AquesTalk2 f1c
女性D AquesTalk2 huskey
女性E AquesTalk2 momo1 別途公開
女性F AquesTalk2 rb2
女性G AquesTalk2 rm
女性H AquesTalk2 yukkuri
男性A AquesTalk2 m3 公開終了
男性B AquesTalk2 m4
ロボット2 AquesTalk2 robo
中性2 AquesTalk2 teto1 別途公開
別途公開:現在のライブラリに含まれてませんが、ココから別途入手可能
公開終了:配布を終了している声種


他にもあるAquesTalk2の声種
最新のAquesTalk2ライブラリに含まれる声種は上記と異なり、よりバラエティに富んだ声種が含まれています。
SofTalkのAquesTalk2ライブラリ(AquesTalk2.dll)は古いので(Ver.2.0)、最新のPhontを使う場合は最新のライブラリ(Ver.2.3)に差し替える必要があります。

キャラ設定はご自由に!
ところで、上記の一部声種にキャラクターを対応させてますが、あくまでも慣例であって「このキャラはこの声種だっ!」なんてきまりは無いですよね。
アクエストも、公式に声種とキャラクターの関連について言及することは無くて、このあたりがボーカロイドとは大きく異なり、あくまでも"ご自由に"ってスタンスです。

 
| AquesTalk | 13:26 | - | - |
undefined reference to `memcpy@GLIBC_2.14'
言語処理ライブラリAqKanji2Koe(漢字をカナの音声記号列に変換するもの)をリンクするとき、CentOS 6.5 (64bit版)などの環境で次のようなエラーが出ました。
 

undefined reference to `memcpy@GLIBC_2.14'


なお、Ubuntu 12.04LTSでは発生しません。
AqKanji2KoeはUbuntu上でビルドしてたので、当然ですが・・・

そこで、64bit版のライブラリをCentOS 6.5の環境でビルドしなおし、
Ubuntu 12.04 と CentOS 6.5 でリンク、実行に問題ないことを確認。

これを、AqKanji2Koe Linux Ver.2.0.1 →  Ver.2.0.2 としてリリースしました。

この問題、検索してみると色々情報は出ていますが、いまだに原因や対策方法がよくわかりません。
| AquesTalk | 16:52 | - | - |
AquesTalk Pi の使い方まとめ

 AquesTalk Piとは、Raspberry Pi上で軽快に動作する音声合成コマンド(プログラム)です。
インストールから基本的な使い方、オプションの使い方を簡単にまとめました。

Raspberry Pi Type B

■音が出るか確認
予めRaspberry Piで音声が再生できるかチェックします。

オーディオをミニプラグに出力させる場合

$ amixer cset numid=3 1

オーディオをHDMIに出力させる場合

$ amixer cset numid=3 2

以下のコマンドでRaspbianに用意されている音声データを再生してみます。音声が聞こえればOK。

$ aplay /usr/share/sounds/alsa/Front_Center.wav

■プログラムのダウンロード
こちらのページから、Downloadのプログラム使用許諾を下までスクロールして読むと、[同意してダウンロード]ボタンが有効になります。クリックしてファイル(aquestalkpi-xxx.tar.gz)をダウンロードします。なお、IEなど一部のブラウザにではファイルの途中までしかダウンロードできないなどの不具合が報告されています。ダウンロードできなかったり、ダウンロードしたファイルのサイズが表示と異なる場合は、他のブラウザでお試しください。


■インストール
ダウンロードしたパッケージをRaspberry Pi上の任意の場所に展開するだけです。
なお、実行時には実行モジュールAquesTalkPiと同じところに、aq_dicディレクトリを配置している必要があります(パッケージをそのまま展開すればそうなっているはずです)。

$ tar xzvf aquestalkpi-20130827.tar.gz
$ cd aquestalkpi

■基本的な使い方
基本的な構文は次のようになります。

$ ./AquesTalkPi [オプション] 入力文字列  [ > 出力ファイル ]


デフォルトでは、AquesTalkPiに読ませる入力文字列を引数に指定し、音声出力は標準出力になります。入力文字列はUTF8(BOM無し)で指定します。出力はWAV形式です。次の例は、パイプでaplayに送って、すぐに再生します。

$ ./AquesTalkPi "漢字も読めます。" | aplay

■その他のオプションを調べる
次のように-hを指定して確認できます。

$ ./AquesTalkPi -h

■様々な文字列の指定方法
-f の後にファイル名を指定すると、読ませる文字列を引数の代わりにテキストファイルで与えられます。なお、先頭の1行しか読み込まないので、改行があるとその手前までしか読み上げません。
次の例は、パッケージに含まれるサンプルテキストファイルを発声します。

$ ./AquesTalkPi -f test.txt | aplay

-f の後に - を指定することで、読ませる文字列を標準入力(パイプ)にすることもできます。これは、他のプログラムで生成した文を読ませるときに便利です。次の例は、現在の時刻を読み上げます。

$ date +"%I時%M分%S秒" | ./AquesTalkPi -f -  | aplay

■声を変えてみる

・声の種類
デフォルトでは声種f1ですが、オプション -v f2 を指定することで、声種f2で合成します。

$ ./AquesTalkPi -v f2 "魔理沙だよ。" | aplay

・棒読みにする
-b オプションを指定すると、すべて平板アクセントとなります。SofTalk っぽくなりますね。

$ ./AquesTalkPi -b "棒読みだっていいじゃないか" | aplay
$ ./AquesTalkPi -b "ゆっくりしていってね?" | aplay

・話す速さの変更
-s オプションの後に数値を指定して、発声する速度を変更できます。数値としては50から300の値が指定でき、値が大きいほど速く発声します。デフォルトは100です。

$ ./AquesTalkPi -s 300 "生麦 生ごめ 生卵" | aplay
$ ./AquesTalkPi -s 80 "霊夢もゆっくりしていってね?" | aplay

・音量の変更
-g オプションの後に数値を指定して、音量を変更できます。数値としては0から100の値が指定でき、値が大きいほど大きくなります。デフォルトは100です。

$ ./AquesTalkPi -g 10 "小さな声" | aplay

■その他の機能

・ファイルとして出力
デフォルトでは標準出力に出力しますが、-o オプションで出力するファイルを指定できます。

$ ./AquesTalkPi こんにちは。 -o out.wav

上のコマンドは次と等価です

$ ./AquesTalkPi こんにちは。 > out.wav

・入力を音声記号で指定
-k オプションで、漢字を含んだ日本語のテキストの代わりに音声記号列で指定します。
これにより、読みやアクセントを直接指定することが出来ます。微妙な発話調整を行う場合に利用します。音声記号列の書式に関しては「音声記号列仕様」を参照してください。
ちなみに、このオプションを指定した場合は辞書ファイル(aq_dic)が無くても使用できますので、漢字を読ませる必要が無く、メモリの削減を必要とする場合には検討してみてください。

$ ./AquesTalkPi -k "ユックリ_シテイッテネ?" | aplay

・音声記号列を出力
-t オプションで、WAV音声データの代わりに、音声記号列を出力します。漢字かな混じり文を解析する言語処理部(AqKanji2Koe)の結果を返すものです。-k オプションで使用する音声記号列の参考用としても使えます。

$ ./AquesTalkPi -t "組み込み向けの音声合成はAquesTalk"

| AquesTalk | 19:15 | - | - |
【β版公開】Raspberry Piで音声合成する「AquesTalk Pi」
Raspberry Pi用の音声合成アプリ 「AquesTalk Pi」のベータ版ができました。

「AquesTalk Pi」とは?
Raspberry Pi上で動作する、テキスト音声合成アプリです(ライブラリではない)。

・少ない処理量で高速に合成
・2声種を内蔵。AquesTalkのf1(reimu?) と f2(marisa?)
・漢字の文から合成できる。 AqKanji2Koeエンジン内蔵

こちらの動作確認環境
 Raspberry Pi Model B Revision 2 -512MB  
 Raspbian wheezy 2013-07-26

使い方の例

    $ ./AquesTalkPi  ゆっくりしていってね? | aplay

以下でオプション等が表示されますので、その他の使い方はこれを参照ください。

    $./AquesTalkPi -h

お願い
動作確認のご協力をお願いいたします。
動いた or 動かない、感想など、お使いの動作環境とともに、こちらにコメントください。
(ArchなどほかのOSで動くか気になってます)

ダウンロード
AquesTalkPi Ver.0.9   tar.gz版    zip版 (追記 2013/08/27 正式版がリリースされました。詳細およびダウンロードはこちら)
サイズは3.8Mくらいあります。ダウンロード後、サイズを確認してください。IEなどでtar.gzが途中までしかダウンロードしないことがありました。
なお、ダウンロードしたソフトの商用利用および再配布は禁止します。
| AquesTalk | 11:17 | - | - |
言語処理ライブラリ「AqKanji2Koe」が新しくなりました
 AquesTalk(2)で漢字からの音声合成を行うときに使用する言語処理ライブラリ AqKanji2Koe が Ver.2 にバージョンアップ

ユーザ側から見た強化ポイントは以下のとおりです。

  1. ユーザ辞書が使える
    要望の多かった、辞書に単語を追加する機能です。
    アプリ開発サイドで、辞書内容をアップデート可能です。
    ユーザ辞書は、専用のユーザ辞書作成ツールを用いてを作成します。

  2. 英単語が読める
    これまでは、辞書にない英単語は棒読みしていたのですが、独自のアルゴリズムでカタカナ英語読みするようになりました。4文字以上英単語の未知語は、カタカナ英語読みします。
    例) eclipse    イーシーエルアイピーエスイ'ー  ⇒ イクリ'プ_ス

  3. 変換精度の向上
    Ver1と比較して、読み、ポーズ位置、アクセントの精度が向上しています。

  4. サイズが小さく
    辞書のサイズを、これまでの25MBから、最小構成で5MBに削減。
    プログラムも500KBから150KBになりました。

  5. 用途に応じた3種類のシステム辞書
    標準:約7MB(約36万語)、スモール:約5MB(約25万語) ラージ:約13MB(約50万語)の3種類の辞書を用意しました。

一方、技術的な変更点は・・・

  1. 辞書データの全面的な見直し
    見出し語の選別だけでなく、各種フラグ情報を付け直しました。

  2. 辞書引きアルゴリズムの変更
    これまで形態素解析にMeCabを利用してたのですが、今回は辞書引きにmarisaを使ってます。
    MeCabの辞書引き(Darts-Double-Array Trie)は高速だけど配列のサイズが大きくなるので、marisaにしてサイズを小さくしています。ビタビ部分は独自実装にしました。

    MARISA: Matching Algorithm with Recursively Implemented StorAge


言語処理は、データ量が多くて手作業だけでなくPCで処理するのにさえ時間がかかって苦労します。さっさと一通りの実装を終えて、再びデジタル信号処理に戻りたいな。

| AquesTalk | 16:14 | - | - |
PROFILE
Follow
CATEGORIES
LATEST ENTRIES
SEARCH THIS SITE
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
SONY MDR-CD900ST
SONY MDR-CD900ST (JUGEMレビュー »)

普段これで開発しています。
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND