11.Arduinoと音声合成で日本語を喋らせる(AquesTalk pico)

今回はクムクムに搭載されている音声合成LSI(AquesTalk pico)をコントロールして、日本語を喋らせるプログラムを作ります。

TTS (Aques Talk pico LSI)について

クムクムは、プログラムからテキストデータを与えるだけで簡単に日本語を発話することができるLSIを基板上に搭載しています。

テキストで与えた日本語を話す(Text To Speach)という機能を実現しているのが、株式会社アクエスト社から発売されているAques Talk pico LSI で、クムクムにはこの中のATP-3012を使用しています。

このLSIは、秋月電子からも購入することが可能で、手軽に組み込みボードで音声合成を使うことができます。

ArduinoとAqes Talk pico LSIとの電気的な接続

Aqes Talk pico LSIは、ArduinoとはSerialかI2Cバスで接続しますので、たったの2本の線で結ぶことができます。

そしてAqes Talk pico LSIの出力からはアンプの入力に接続するだけです。
クムクムでは、BEEP音を鳴らすためのアンプ回路を持っていますから、同じところにミキシングしてあげれば音声を簡単にスピーカーから鳴らすことができます。

I2Cバスとは

I2Cバスは、こういった小型機器の中で使われることが多い通信方式で、USBや通常のSerialよりもずっと遅い通信方式で、データの送受信をたったの2本の線(SDAとSCLと呼ぶ)で行うことができます。

読み方は、アイ・スクエアド・シーまたはアイ・アイ・シーまたはアイ・ツー・シーで、発明もとはフィリップ社です。

I2Cで接続できる電子部品は一般の電子部品より少し高価になりますが、たった2本の線で何個も何個も高機能な部品をどんどんつなげて使うことができるので、回路設計はとても便利でまた、プログラムからは、難しい信号線の処理など必要なく、簡単なコマンドを送るだけで様々な制御することができるようになります。

左)ディスプレイとCPUがたくさんの入出力ポートで接続
右)ディスプレイとCPUがI2Cバスで接続

左側IO方式は、CPUとの接続にたくさんの入出力ポートを使い、入出力ポートの細かい制御を行って日時を表示します。IO方式のディスプレイはただ光るだけのディスプレイで頭脳を持ち合わせていないのでとても安価です。

右側I2Cの場合は、CPUとディスプレイの間はたったの2本の線なのでCPUのIOポートは沢山あまり、他のセンサーやスイッチを接続することができるようになります。制御もCPUから簡単なコマンドを送るだけでディス側が全部簡単に処理して表示してくれます。頭脳を持ち合わせているので少し値が張ります。

Serialでも接続できるAquesTalk

その他AquesTalkは通常のシリアルポートでも接続することができます。

ArduinoLeonardoとブレッドボードで接続してみる

I2C接続

左(LeonardoとLSI)

1.(緑)LeonardoのSCLとLSIの28を接続
2.(橙)LeonardoのSDAとLSIの27を接続
3.(赤)Leonardoの5VとLSIの7を接続
4.(青)LeonardoのGNDとLSIの8を接続

右(LSIとアンプ)

1.LSIの15からボリュームの1へ
2.ボリュームの2からアンプの入力へ
3.アンプの+-をつないで電源供給

プログラムを書いて動かす

AquesTalkのライブラリーをダウンロード

Aques Talk pico LSIをArduinoで使用するには、このLSIをコントロールするためのArduino用のライブラリーをダウンロードします。
ダウンロードは N.Yamazaki’s Blogの ココ からダウンロドすることができます。

このライブラリーをダウンロードして展開をすると下記のようになっています。

それぞれすべてArduinoで動作するサンプルプログラムです。

AquesTalkLibraryを使えるように準備する

実際にArduinoで使用する場合は、ArduinoIDEなどにライブラリー登録をすることからはじめますが、実はライブラリー登録をしなくても使える方法があります。

また、Arduino以外が提供する独自のライブラリーは、IDEのライブラリーとして登録して使うより、都度フォルダーに入れて使う方が便利だったりしますので、ここでは簡単に自分のフォルダーにコピーをして使う方法を試してみます。

ここでは一番簡単な HelloTalk を使ってみます。

HelloTalkフォルダーにAquesTalkLibraryのソースをコピーする

下の図を参考に、AquesTalkの直下にある AquesTalk.cppとAquesTalk.hをHelloTalkのフォルダーにコピーをします。

コピー後フォルダーの中は下記のようになります。

プログラムを開いて修正する

次に HelloTalk.inoファイルをダブルクリックしてソースコードを開きます。
このソースコードの赤い部分を書き換えます。

これだけでOKです。
あとはコンパイルをしてダウンロードすればプログラムは動きます。

ソースコードの行頭に書かれている #include は「別のプログラムのヘッダを読み込んで使います」と宣言しています。

ここでは、「AquesTalkのヘッダを読み込んで使います」と書いていいます。
そして、< >で指定した場合、ArduinoIDEがデフォルトで用意している場所のファイルを使うという意味になり、””で指定した場合は、このソースコードと同じ場所のファイルを使うという意味になります。

Arduinoでライブラリーを使う場合、Arduinoの方式でインストールやコピーをすると、Arduinoの標準ライブラリーとして使用できるようになるため < >でくくっても使えるのですが、今はなにもインストールせず、ソースと同じ場所にコピペしてきましたので、””を使って指定しました。

「ほんまかいな そうかいな」としゃべります

#include "AquesTalk.h"
#include <WireWrap.h>
AquesTalk atp; //インスタンス定義 変数名は任意

void setup() {
  i2c_init();
  atp.SetPitch(0);
  atp.SetSpeed(100);
}

void loop() {
  atp.Synthe("honmakaina"); 
  atp.Synthe("soukaina");
  delay(1000) ;
}

プログラムとライブラリー使用などについての詳細

プログラムについての詳細は、開発者の山崎さんがかかれているブログをご覧ください。

コメント