AquesTalk iOS マニュアル（株）アクエストhttpwwwa questcom

 概要
本文書は、規則音声合成ライブラリ AquesTalk iOS以下、「AquesTalk」をアプリケーションに組み込んで使用するためのプログラミングに関して、方法および注意点を示したものです。
AquesTalk iOS は、非常にコンパクトな音声合成エンジンで、これを用いれば、iPhone、iPod Touch、iPad などのアプリケーションに簡単に音声合成機能を実現することができます。
AquesTalk iOS は、メモリ上に音声波形を生成する基本的な機能をもっています。生成する波形データのフォーマットは WAV 形式で同じす。また、同期、非同期に音声を内蔵スピーカから直接出力する DAサウンド出力機能も持っています。
なお、漢字かな混じり文からの音声合成には、別途、言語処理ライブラリ AqKanjiKoe を利用してください。
AquesTalk の入力である音声記号列の文字コードは Shift JIS または UTF ) で、それぞれ関数名が異なります。
AquesTalk に与える文字コードは必ずプログラム上で指定の文字コードに変換して用いてください。

 仕様
入力

かな表記音声記号列 Shift JIS または UTF )出力WAV フォーマット)KHz サンプリング, -.bitPCM, モノラルバイナリデータ
またはサウンドデバイスへ出力

声種１４種の切り替え（Phont の差換えで変更）

ライブラリ形式

スタティックライブラリ
armv4armv4sarm.5i6).x).8.5 Universal Binary, 各々bitcode を含む

関数 IF

Ｃ関数呼び出し Objective C や swift から呼び出し可能）

OSiOS ;-- 以上

デバイス

iPhone  iPad  iPod Touch

マルチスレッド対応

ライブラリサイズ

約 ;<KB（リンク後）、デフォルト Phont データ含む

外部依存 framework

AudioToolboxFramework

動作確認環境

Xcode 4- Phont ファイルパッケージの phont ディレクトリに、声種を規定する Phont ファイルがいくつか含まれています。なお、この中の aq8rmphont は、ライブラリに内臓のデフォルト
Phont と同じものです。
ライブラリ呼び出し時に Phont ファイルデータを指定することによって、異なる声で合成が可能となります。
なお、Phont ファイルはバイナリ互換で Windows 用と iPhone 用の違いはありません。

libAquesTalksaDefault Phont アーキテクチャと Universal Binary
libAquesTalka は、Simulatorシミュレータ）用と Device実機用の２つの異なるアーキテクチャのライブラリがひとつにパックされている Universal Binary となっています。Xcode がビルド時にターゲットにあわせて適切な方を選択しますので、開発者がターゲットに応じて切り替える必要は有りません。
なお、本ライブラリには、Device 用として、armv4iPhone5S 以前 、armv4siPhone;、armv.5iPhone;s 以降の３つ、Simulator 用として i6). と x).8.5 の２つの計５つのアーキテクチャのライブラリが含まれています。
さらに、bitcode にも対応しましたので、iOS> からのアプリ最適化の仕組み AppThinning 用の bitcode に対応したアプリを作成できます。

 関数 API
@メモリ上に音声波形を生成するA

AquesTalk Synthe
説明

AquesTalk8iphoneh

音声記号列SJISから音声波形を生成します
生成した音声データは、使用後、呼び出し側で freeしてください。

構文

unsigned char B AquesTalk Syntheconst char Bkoe, int iSpeed, int Bsize, void BphontDat

引数koe

音声記号列 SJIS、 C 言語文字列

iSpeed

発話速度@CA ;< 6<< の間で指定 デフォルト：-<< 値を大きく設定するほど、速くなる

size

生成した音声データのサイズが返る@byteA（エラーの場合はエラーコードが返る）

phontDat

phont データの先頭アドレスを指定します。
この DLL のデフォルト Phont を用いるときは０を指定します。

戻り値

WAV フォーマットのデータ内部で領域確保、解放は呼び出し側で AquesTalk8FreeWave
で行うの先頭アドレスを返す。エラー時は、nil を返す。このとき size にエラーコードが設定される。

AquesTalk SyntheUtf!
説明

AquesTalk8iphoneh

音声記号列（UTF )）から音声波形を生成します
生成した音声データは、使用後、呼び出し側で freeしてください。

構文

unsigned char B AquesTalk SyntheUtf!const char BkoeUtf), int iSpeed, int Bsize, void

BphontDat
引数koeUtf)

音声記号列 UTF )、 C 言語文字列

iSpeed

発話速度@CA ;< 6<< の間で指定 デフォルト：-<< 値を大きく設定するほど、速くなる

size

生成した音声データのサイズが返る@byteA（エラーの場合はエラーコードが返る）

phontDat

phont データの先頭アドレスを指定します。
この DLL のデフォルト Phont を用いるときは０を指定します。

戻り値

WAV フォーマットのデータ内部で領域確保、解放は呼び出し側で AquesTalk8FreeWave
で行うの先頭アドレスを返す。エラー時は、nil を返す。このとき size にエラーコードが設定される。

AquesTalk FreeWave

AquesTalk8iphoneh

説明

音声データの領域を開放。 AquesTalk8Syntheと対で使用します。

構文

void AquesTalk FreeWave unsigned char Bwav

引数なしwav

WAV フォーマットのデータ（AquesTalk8Syntheで生成した音声データ）

戻り値なし@デバイスに音声出力する（同期タイプ）A

AquesTalk DaPlaySync

AquesTalk8iphoneh

説明

同期タイプの音声合成。デバイスに音声出力する。発声が終了するまで戻らない。

構文

int AquesTalk DaPlaySyncconst char Bkoe, int iSpeed , void BphontDat引数koe

音声記号列SJIS、 C 言語文字列

iSpeed

発話速度@CA ;< 6<< の間で指定 デフォルト：-<< 値を大きく設定するほど、速くなる

phontDat

phont データの先頭アドレスを指定します。
ライブラリのデフォルト Phont（aq8rmを用いるときは nil を指定します。

戻り値<：正常終了 それ以外：エラー

AquesTalk DaPlaySyncUtf!

AquesTalk8iphoneh

説明

同期タイプの音声合成。デバイスに音声出力する。発声が終了するまで戻らない。

構文

int AquesTalk DaPlaySyncUtf!const char BkoeUtf), int iSpeed , void BphontDat

引数koeUtf)

音声記号列UTF )、 C 言語文字列

iSpeed

発話速度@CA ;< 6<< の間で指定 デフォルト：-<< 値を大きく設定するほど、速くなる

phontDat

phont データの先頭アドレスを指定します。
ライブラリのデフォルト Phont（aq8rmを用いるときは nil を指定します。

戻り値<：正常終了 それ以外：エラー@デバイスに音声出力する（非同期タイプ）AAquesTalk DaCreate
説明

音声合成エンジンのインスタンスを生成（非同期タイプ）

AquesTalk8iphoneh構文

H8AQTKDA

AquesTalk DaCreate

引数
戻り値

音声合成エンジンのハンドル

AquesTalk DaRelease
説明

AquesTalk8iphoneh

音声合成エンジンのインスタンスを解放（非同期タイプ）
発声終了前にこの関数でインスタンス解放すると、その時点で発声が終了してしまうので注意

構文

void AquesTalk DaReleaseH8AQTKDA hMe

引数hMe

音声合成エンジンのハンドル

戻り値なし

AquesTalk DaPlay
説明

AquesTalk8iphoneh

非同期タイプの音声合成。発声終了を待たずに戻る。デバイスに音声出力する。
notification を指定すると、再生終了後に指定したイベントが通知される。
※phontDat および notification を指定した場合は、発声が完了するまで、これらを開放してはいけません。

構文

int AquesTalk DaPlayH8AQTKDA hMe, const char Bkoe, int iSpeed, void BphontDat,
NSNotificationB notification

引数hMe

音声合成エンジンのハンドルkoe

音声記号列SJIS、 C 言語文字列

iSpeed

発話速度@CA ;< 6<< の間で指定 デフォルト：-<< 値を大きく設定するほど、速くなる

phontDat

phont データの先頭アドレスを指定します。
ライブラリのデフォルト Phont（aq8rmを用いるときは nil を指定します。

notification

再生終了イベントの指定。イベント通知不要のときは nil を指定します。

戻り値<：正常終了 それ以外：エラー

AquesTalk DaPlayUtf!
説明AquesTalk8iphoneh

非同期タイプの音声合成。発声終了を待たずに戻る。デバイスに音声出力する。
notification を指定すると、再生終了後に指定したイベントが通知される。
※phontDat および notification を指定した場合は、発声が完了するまで、これらを開放してはいけません。

構文

int AquesTalk DaPlayUtf!H8AQTKDA hMe, const char BkoeUtf), int iSpeed, void
BphontDat, NSNotificationB notification

引数hMe

音声合成エンジンのハンドル

koeUtf)

音声記号列UTF )、 C 言語文字列

iSpeed

発話速度@CA ;< 6<< の間で指定 デフォルト：-<< 値を大きく設定するほど、速くなる

phontDat

phont データの先頭アドレスを指定します。
ライブラリのデフォルト Phont（aq8rmを用いるときは nil を指定します。

notification

再生終了イベントの指定。イベント通知不要のときは nil を指定します。

戻り値<：正常終了 それ以外：エラー

AquesTalk DaStop
説明AquesTalk8iphoneh

発声の停止。Playで発声中に使用する。
再生中に Stopによって発声が終了した場合、、notification が指定されていたなら、再生終了イベントが通知される。
再生終了後に呼び出すと、何もしない。

構文

void AquesTalk DaStopH8AQTKDA hMe

引数

hMe

音声合成エンジンのハンドル

戻り値なし

AquesTalk DaIsPlay
説明

再生中か否か構文

int AquesTalk DaIsPlayH8AQTKDA hMe

引数

hMe

音声合成エンジンのハンドル

戻り値-再生中 <再生中でない) エラーコード表
関数が返すエラーコードの内容は、次の通りです。
値

内容

-<<

その他のエラー

-<-

メモリ不足

-<

音声記号列に未定義の読み記号が指定された-<6

韻律データの時間長がマイナスなっている-<5

内部エラー未定義の区切りコード検出）-<;

音声記号列に未定義の読み記号が指定された-<.

音声記号列のタグの指定が正しくない-<4

タグの長さが制限を越えている（または@GAがみつからない）-<)

タグ内の値の指定が正しくない

AquesTalk8iphoneh-<>WAVE 再生ができない（サウンドドライバ関連の問題）--<

WAVE 再生ができない（サウンドドライバ関連の問題 非同期再生）---

発声すべきデータがない<<

音声記号列が長すぎる<-

１つのフレーズ中の読み記号が多すぎる

<

音声記号列が長い（内部バッファオーバー-）<6ヒープメモリ不足

<5音声記号列が長い（内部バッファオーバー-）-<<<-<<)

Phont データが正しくない* 音声記号列本ライブラリの入力である音声記号列の書き方、仕様については、付属の「音声記号列仕様」を参照ください。

! 音声データ形式
本ライブラリで生成する音声データは、次の形式となります。
AquesTalk8Synthe等で生成する音声データには、先頭部に WAV ヘッダが付与されています。
ストレート PCM データが必要な場合は、別途ヘッダを除いて使用してください先頭の４４バイト）。
ほかのフォーマットをご希望の場合はカスタマイズを承りますので、お問い合わせください。
サンプリング周波数
量子化 bit 数
チャンネル数
エンコード
フォーマット

８KHz
１６bit
モノラル
リニア PCMWAV 形式+ アプリケーションへの実装方法
アプリケーションへの実装方法+ ヘッダ、ライブラリ
AquesTalk ライブラリをアプリケーションに組み込むときは、ヘッダファイルAquesTalk8iPhonehをインクルードし、 ビルド時に libAquesTalka をリンクするようにします。
具体的な方法として、ヘッダファイルは AquesTalk8iPhoneh ひとつだけですので、アプリケーションのソースファイルと同じディレクトリにコピーして、ソース内で次のようにインポートすると良いでしょう。
Iimport JAquesTalk8iPhonehJ

libAquesTalka評価版の場合は libAquesTalkEvaaも、ソースファイルと同じディレクトリにコピーしてから、Xcode 上のメニュGFileGAdd Files to”L”にてプロジェクトに追加します。この操作により、Project Navigator通常画面左側のプロジェクトで使用するファイルリストに、libAquesTalka が追加されていることがわかります。

9.2. 外部 Framework
本ライブラリは、AudioToolboxFramework の１つ外部フレームワークライブラリを使用します。これはサウンドデバイスへの音声出力機能のためです。
これを指定し忘れるとアプリのビルド時に関数が見つからないというリンクエラーが発生します。
アプリのプロジェクトにこれらを追加する方法は、Target の設定画面＞General＞Linked Frameworks and Libraries
で＋部分を押下して追加できます。この操作により、Project Navigator通常画面左側のプロジェクトで使用するファイルリストに、AudioToolboxFramework が追加されていることがわかります。

, サンプルプログラム
サンプルプログラム
本パッケージにはサンプルプログラムのプロジェクト一式xcode 4が含まれています。
HelloAqTk は、任意の音声記号列を指定して Play ボタンを押下すると、合成音声を発声するアプリケーションです。

, 実行方法
実行方法
１． アプリケーションプロジェクトを開く
HelloAqTkxcodeproj をダブルクリックして xcode でプロジェクトを開きます。
２． ビルド・実行
ビルド・実行
メニューGProductGRun でビルド・実行してください。
エラーが無ければ、右上のようなアプリ画面が立ち上がり、テキストボックスに任意の音声記号列を入力して@PlayAボタンのクリックで音声が聞こえれば OK です。
なお、再生中は、図の@DoneAの部分が@PlayingAになります。

,  コード説明
HelloAqTk サンプルアプリでは、音声合成を非同期に行い、サウンドデバイスへ出力する一連の動作を行っています。
ViewControllerh では、UI オブジェクトの他に、AquesTalk のオブジェクト（インスタンス）を保存する変数 m8pAqTkを追加しています。
ViewControllerh
Iimport OUIKitUIKithG
Iimport JAquesTalk8iPhonehJ
Pinterface ViewController  UIViewContoller
Q
IBOutlet UITextFieldB textfieldR
IBOutlet UILabelB onPlayLabelR
H8AQTKDA m8pAqTkR AquesTalk エンジンのインスタンス
SIBActionplayidsenderRIBActionstopidsenderR
Pend

次は、ViewControllerm のコードの抜粋です。
本サンプルでは viewDidLoad内で AquesTalk のインスタンスを生成し、deallocにてインスタンスを解放しています。このインスタンスは発声終了時まで維持する必要があります。どのタイミングで AquesTalk のインスタンスを生成し解放するかはアプリでの音声合成の利用方法により適宜変更してください。
また、発声終了のタイミングでイベントを受け取れるように Notification の登録をします。ここでは、イベントのメソッ
ド名は「daDone」としましたが、任意でかまいません。また、イベントの名前も「AquesTalkDaDoneNotify」としましたが、これも任意でかまいません。この処理を追加することによって、音声合成が終了したタイミングで daDone メソッドが呼ばれるようになります。
メソッド play は、Play ボタンをタップされたときに呼び出されるメソッドです。
まず、終了通知イベントを作成します。name は、は applicationDidFinishLaunching で指定したものと同じ文字列を指定します。
次に、テキストボックスから NSString の文字列を取得し、これを Shift JIS へ文字コードを変換します。
その後、AquesTalkDa8Play（）で音声合成を開始します。6 番目の引数は話速です。5 番目の引数は、Phont デー
タの先頭アドレスを指定します。ここでは内蔵のデフォルト Phont を使用するので nil を指定しています。声種を切り替えるときは、任意の Phont ファイルをメモリ上に読み込みんで、その先頭アドレスを指定してくださいファイルの読み込みコードは別途実装する必要があります。
; 番目の引数は、終了通知イベントを指定します。この関数は同期型なので、発声の終了を待たずに返ります。

戻り値が < の場合は正常終了、それ以外はエラーとなります。本サンプルでは、エラーの場合はアラート表示を出すようにしています。
ViewControllermvoidviewDidLoad Q@super viewDidLoadAR
 AquesTalk インスタンス生成
m8pAqTk T AquesTalkDa8CreateR Notification の登録 発声終了を検知しなければ不要 メソッド名や name は任意で@@NSNotificationCenter defaultCenterA
addObserverselfselectorPselectordaDonename PJAquesTalkDaDoneNotifyJ
objectnilAR
S
voiddealloc Q
ifm8pAqTk AquesTalkDa8Releasem8pAqTkR@@NSNotificationCenter defaultCenterA removeObserverselfARS
IBActionplayidsenderQ終了通知イベントの作成 name 部分は NSNotificationCenter に設定した値に合わせる
NSNotification Bnotification T @NSNotification
notificationWithNamePJAquesTalkDaDoneNotifyJ objectself userInfonilAR
 テキストボックスから文字列取得し、文字コードを ShiftJIS に変換し、音声合成出力（非同期）char Bsjis T charB@@textfield textA cStringUsingEncodingNSShiftJISStringEncodingAR
int iret T AquesTalkDa8Playm8pAqTk, sjis, -<<, nil, notificationRifiretUT<Q  エラーの場合はアラート表示
UIAlertController BalertController T @UIAlertController
alertControllerWithTitlePJErrorJ messagePJ音声記号列の指定が正しくありませんJ
preferredStyleUIAlertControllerStyleAlertAR@alertController addAction@UIAlertAction actionWithTitlePJはいJstyleUIAlertActionStyleDefault handlerVUIAlertAction Baction Q SAAR
@self presentViewControlleralertController animatedYES completionnilAR
returnRS
onPlayLabeltext T PJPlayingJRS
IBActionstopidsender
Q
AquesTalkDa8Stopm8pAqTkRS
voiddaDoneNSNotificationBnotification
Q
onPlayLabeltext T PJDoneJR
S・・・
このサンプルは、非同期の音声合成でデバイスに直接合成音声を出力するものですが、この他に音声データをメモリ上配列データに取得する関数もあり、生成した音声を任意の方法で転送したり出力することも可能です。
また、本サンプルは Objective C で記述していますが、swift でも使用可能です。具体的なコーディングについてはネットで検索してください。

 ライセンス
本ライブラリを含んだアプリケーションを使用する場合は「使用ライセンス」の購入が必要となります。また、本ライブラリを含んだアプリの配布には事前に当社と『配布ライセンス契約』が必要となります。ライセンスの詳細は、本パッケージ内のライセンスドキュメントを参照ください。

  サポート
バグや不具合に関しては、infoaqPa questcom にご連絡いただければ幸いです。
使用方法についてのご質問は、BBS httpwwwa questcomaquestalkpatiopatiocgi に投げていただければと思います。

 履歴
日付版

変更箇所

更新内容

更新者

2010/2/11

1.0

新規作成

AquesTalk Mac 版から加筆修正

N.Y

2012/10/01

1.1

Ver.2.4 に対応

iOS6 に対応 iOS4.2.1 以前は非対応に

N.Y

2013/07/05

1.2

Ver.2.5 に対応

UTF8 関数の追加

N.Y

2014/12/22

1.3

Ver.2.6 に対応

64bit 対応

N.Y

2016/03/19

1.4

Ver.2.61 に対応

Xcode7 用に、x86_64,bitcode 記述追加

N.Y