AquesTalk pico 日本語音声合成LSI ATP3011/3012 をSPIで使用するためのライブラリです。

Dependents:   DLC_STARTER

Committer:
hmizuno
Date:
Fri May 22 09:01:32 2020 +0000
Revision:
0:afac3f0b332e
first release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hmizuno 0:afac3f0b332e 1 #ifndef ATP301X_SPI_H
hmizuno 0:afac3f0b332e 2 #define ATP301X_SPI_H
hmizuno 0:afac3f0b332e 3
hmizuno 0:afac3f0b332e 4 #include "mbed.h"
hmizuno 0:afac3f0b332e 5
hmizuno 0:afac3f0b332e 6 /** 動作パラメータ設定
hmizuno 0:afac3f0b332e 7 * ※カッコ内はデータシートに記載された限度値です。
hmizuno 0:afac3f0b332e 8 */
hmizuno 0:afac3f0b332e 9
hmizuno 0:afac3f0b332e 10 //最大文字数制限 (<= 127バイト-2バイト('.'+'\r'))
hmizuno 0:afac3f0b332e 11 #define ATP_MAX_LEN 125
hmizuno 0:afac3f0b332e 12
hmizuno 0:afac3f0b332e 13 //発話中ポーリング周期(ms) (>= 10ms)
hmizuno 0:afac3f0b332e 14 #define POLLING_CYCLE_MS 20
hmizuno 0:afac3f0b332e 15
hmizuno 0:afac3f0b332e 16 //SPI通信クロック (<= 1MHz)
hmizuno 0:afac3f0b332e 17 #define SPI_CLK_HZ 500000
hmizuno 0:afac3f0b332e 18
hmizuno 0:afac3f0b332e 19 //SPI送信周期 (>= 20μs)
hmizuno 0:afac3f0b332e 20 #define SPI_SEND_PERIOD_US 25
hmizuno 0:afac3f0b332e 21
hmizuno 0:afac3f0b332e 22 #include "mbed.h"
hmizuno 0:afac3f0b332e 23
hmizuno 0:afac3f0b332e 24
hmizuno 0:afac3f0b332e 25 /** ATP301x_SPI class.
hmizuno 0:afac3f0b332e 26 * I wrote all documentation and comment in Japanese language only.
hmizuno 0:afac3f0b332e 27 * (本ライブラリのドキュメントとコメントは日本語でのみ記載しております。)
hmizuno 0:afac3f0b332e 28 *
hmizuno 0:afac3f0b332e 29 * ATP301x series speech processor can only speak Japanese, so I thought this library will be used only in Japan.
hmizuno 0:afac3f0b332e 30 * (ATP301x シリーズの音声合成LSIは日本語専用であり、本ライブラリは日本でのみ使用されることが想定されるためです。)
hmizuno 0:afac3f0b332e 31 *
hmizuno 0:afac3f0b332e 32 * AquesTalk pico 日本語音声合成LSI ATP3011/ATP3012 をSPI通信で使用するためのライブラリです。
hmizuno 0:afac3f0b332e 33 *
hmizuno 0:afac3f0b332e 34 * SPI通信モードは内部で3に固定しています。
hmizuno 0:afac3f0b332e 35 *
hmizuno 0:afac3f0b332e 36 * 動作パラメータはATP301x_SPI.hのマクロで定義しています。必要に応じ変更してご使用ください。
hmizuno 0:afac3f0b332e 37 */
hmizuno 0:afac3f0b332e 38 class ATP301x_SPI{
hmizuno 0:afac3f0b332e 39 public:
hmizuno 0:afac3f0b332e 40 /**
hmizuno 0:afac3f0b332e 41 * @param mosi SPI mosiピン
hmizuno 0:afac3f0b332e 42 * @param miso SPI misoピン
hmizuno 0:afac3f0b332e 43 * @param sck SPI sckピン
hmizuno 0:afac3f0b332e 44 * @param ss SPI ssピン(DigitalOutを使用)
hmizuno 0:afac3f0b332e 45 */
hmizuno 0:afac3f0b332e 46 ATP301x_SPI(PinName mosi, PinName miso, PinName sck, PinName ss);
hmizuno 0:afac3f0b332e 47
hmizuno 0:afac3f0b332e 48 /**
hmizuno 0:afac3f0b332e 49 * @brief breakコマンドを送信し発話中断します。ATP301xが次のコマンドを受け付けられる状態になる(Readyになる)までwait()します。
hmizuno 0:afac3f0b332e 50 */
hmizuno 0:afac3f0b332e 51 void stop();
hmizuno 0:afac3f0b332e 52
hmizuno 0:afac3f0b332e 53 /**
hmizuno 0:afac3f0b332e 54 * @brief ATP301xに音声コマンドを送信します。NULL/\o/0xFF終端(音声記号を受け取った場合、文末記号であるピリオドでbreak)に対応します。
hmizuno 0:afac3f0b332e 55 * ATP301xへ送信するコマンド終端を表す最後のキャレッジリターンは自動付与します。
hmizuno 0:afac3f0b332e 56 * @param input[] ATP301xへ送信するデータのchar配列(音声記号 または 制御コマンド)
hmizuno 0:afac3f0b332e 57 * ※音声記号が ATP_MAX_LEN で指定する文字数を超えた場合、ATP301xが受け取れる文字数を超えてしまうため送信を強制終了します。
hmizuno 0:afac3f0b332e 58 * 文字数オーバーとなった場合、運よく音声記号が成立する位置でカットされた場合は途中まで発話されますが、
hmizuno 0:afac3f0b332e 59 * 音声記号が成立しない位置でカット(例:子音で終了)された場合は警告メッセージのみが発話されます。
hmizuno 0:afac3f0b332e 60 * @param useWait コマンド送信後、送ったコマンドを発話終了まで(=ATP301xがReadyになるまで) waitするか指定(デフォルト:true)
hmizuno 0:afac3f0b332e 61 * ※割り込み等で発話中にstop()が呼ばれた場合、useWaitによらずbreakコマンドを送信し発話を中止します。
hmizuno 0:afac3f0b332e 62 */
hmizuno 0:afac3f0b332e 63 void talk(char input[], bool useWait = true);
hmizuno 0:afac3f0b332e 64
hmizuno 0:afac3f0b332e 65 /**
hmizuno 0:afac3f0b332e 66 * @brief ATP301xの内蔵チャイムJを鳴らします。
hmizuno 0:afac3f0b332e 67 * @param useWait trueの場合、チャイム再生終了まで(=ATP301xがReadyになるまで) wait()します。(デフォルト:true)
hmizuno 0:afac3f0b332e 68 */
hmizuno 0:afac3f0b332e 69 void chimeJ(bool useWait = true);
hmizuno 0:afac3f0b332e 70
hmizuno 0:afac3f0b332e 71 /**
hmizuno 0:afac3f0b332e 72 * @brief ATP301xの内蔵チャイムKを鳴らします。
hmizuno 0:afac3f0b332e 73 * @param useWait trueの場合、チャイム再生終了まで(=ATP301xがReadyになるまで) wait()します。(デフォルト:true)
hmizuno 0:afac3f0b332e 74 */
hmizuno 0:afac3f0b332e 75 void chimeK(bool useWait = true);
hmizuno 0:afac3f0b332e 76
hmizuno 0:afac3f0b332e 77 private:
hmizuno 0:afac3f0b332e 78 SPI _spi; // mosi, miso, sck
hmizuno 0:afac3f0b332e 79 DigitalOut _ss;
hmizuno 0:afac3f0b332e 80 void atp_initialize();
hmizuno 0:afac3f0b332e 81 void atp_wait();
hmizuno 0:afac3f0b332e 82 };
hmizuno 0:afac3f0b332e 83 #endif