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 に与える文字コードは必ずプログラム上で指定の文字コードに変換して用いてください。

特長
・耳なじみの良い声
聴きやすさや明瞭性を重視し、人の声にこだわらずに開発しました。
・超小型軽量他に類を見ない少ないリソース量で音声合成が実現できます。
・簡単に実装簡単なインターフェース関数。
ファイルアクセスも不要なため、ライブラリをリンクするだけで簡単に使用できます。

 仕様
入力

かな表記音声記号列 SJIS または UTF )出力

WAV フォーマット)KHz サンプリング, -.bitPCM, モノラル バイナリデータまたはサウンドデバイスへ出力

声種

基本１種

ライブラリ形式

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

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

OSiOS ;-- 以上デバイスiPhone  iPod Touch  iPadマルチスレッド対応

ライブラリサイズ

約 -#<KB（リンク後）

外部依存 framework

AudioToolboxFramework、libc==

動作確認環境

Xcode 4- アーキテクチャとアーキテクチャと 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メモリ上に音声波形を生成するBAquesTalkSynthe
説明

AquesTalk8iPhoneh

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

構文

unsigned char C AquesTalkSyntheconst char Ckoe, int iSpeed, int Csize

引数koe

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

iSpeed

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

size

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

戻り値

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

AquesTalkSyntheUTF
説明AquesTalk8iPhoneh

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

構文

unsigned char C AquesTalkSyntheUtfconst char CkoeUtf), int iSpeed, int Csize

引数koeUtf)

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

iSpeed

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

size

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

戻り値

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

AquesTalk8iPhonehAquesTalkFreeWave
説明

音声データの領域を開放。 AquesTalk8Synthe と対で使用します。

構文void AquesTalkFreeWave unsigned char Cwav引数なしwav

WAV フォーマットのデータ（AquesTalk8Synthe で生成した音声データ）

戻り値なし

Aデバイスに音声出力する（同期タイプ）B
AquesTalk8iPhonehAquesTalkDaPlaySync
説明

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

構文

int AquesTalkDaPlaySyncconst char Ckoe, int iSpeed

引数koe

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

iSpeed

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

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

AquesTalkDaPlaySyncUtf

AquesTalk8iPhoneh

説明

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

構文

int AquesTalkDaPlaySyncUtfconst char CkoeUtf), int iSpeed

引数koeUtf)

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

iSpeed

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

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

Aデバイスに音声出力する（非同期タイプ）B
AquesTalk8iPhonehAquesTalkDaCreate
説明

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

構文

H8AQTKDA

AquesTalkDaCreate

引数
戻り値

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

AquesTalkDaRelease
説明

AquesTalk8iPhoneh

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

構文

void AquesTalkDaReleaseH8AQTKDA hMe

引数hMe

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

戻り値なし

AquesTalk8iPhonehAquesTalkDaPlay
説明

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

構文

int AquesTalkDaPlayH8AQTKDA hMe, const char Ckoe, int iSpeed, NSNotificationCnotification

引数hMe

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

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

iSpeed

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

notification

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

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

AquesTalk8iPhonehAquesTalkDaPlayUtf
説明

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

構文

int

AquesTalkDaPlayUtfH8AQTKDAhMe,

constcharCkoeUtf),

int

iSpeed,NSNotificationC notification
引数hMe

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

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

iSpeed

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

notification

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

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

AquesTalkDaStop
説明AquesTalk8iPhoneh

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

構文

void AquesTalkDaStopH8AQTKDA hMe

引数hMe

音声合成エンジンのハンドル戻り値なし

AquesTalkDaIsPlay
説明

再生中か否か構文

int AquesTalkDaIsPlayH8AQTKDA hMe

AquesTalk8iPhoneh引数

hMe

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

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

-<<

その他のエラー

-<-

メモリ不足

-<#

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

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

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

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

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

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

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

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

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

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

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

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

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

ヒープメモリ不足#<5

音声記号列が長い（内部バッファオーバー-）) 音声記号列本ライブラリの入力である音声記号列の書き方、仕様については、付属の「音声記号列仕様」を参照ください。

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

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

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

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

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

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

+ コード説明HelloAqTk サンプルアプリでは、音声合成を非同期に行い、サウンドデバイスへ出力する一連の動作を行っています。
ViewControllerh では、UI オブジェクトの他に、AquesTalk のオブジェクト（インスタンス）を保存する変数 m8pAqTkを追加しています。
ViewControllerh
Iimport PUIKitUIKithG
Iimport JAquesTalk8iPhonehJ
Qinterface ViewController  UIViewContoller
R
IBOutlet UITextFieldC textfieldS
IBOutlet UILabelC onPlayLabelS
H8AQTKDA m8pAqTkS AquesTalk エンジンのインスタンス
TIBAction playid senderSIBAction stopid senderS
Qend

次は、ViewControllerm のコードの抜粋です。
本サンプルでは viewDidLoad 内で AquesTalk のインスタンスを生成し、dealloc にてインスタンスを解放しています。このインスタンスは発声終了時まで維持する必要があります。どのタイミングで AquesTalk のインスタンスを生成し解放するかはアプリでの音声合成の利用方法により適宜変更してください。
また、発声終了のタイミングでイベントを受け取れるように Notification の登録をします。ここでは、イベントのメソッ
ド名は「daDone」としましたが、任意でかまいません。また、イベントの名前も「AquesTalkDaDoneNotify」としましたが、これも任意でかまいません。この処理を追加することによって、音声合成が終了したタイミングで daDone メソッドが呼ばれるようになります。
メソッド play は、Play ボタンをタップされたときに呼び出されるメソッドです。
まず、終了通知イベントを作成します。name は、は applicationDidFinishLaunching で指定したものと同じ文字列を指定します。
次に、テキストボックスから NSString の文字列を取得し、これを Shift JIS へ文字コードを変換します。
その後、AquesTalkDa8Play（）で音声合成を開始します。6 番目の引数は話速です。5 番目の引数は、終了通知イベントを指定します。この関数は同期型なので、発声の終了を待たずに返ります。
戻り値が < の場合は正常終了、それ以外はエラーとなります。本サンプルでは、エラーの場合はアラート表示を出すようにしています。
ViewControllermvoid viewDidLoad R
Asuper viewDidLoadBS
 AquesTalk インスタンス生成
m8pAqTk U AquesTalkDa8Create S
 Notification の登録 発声終了を検知しなければ不要 メソッド名や name は任意で
AANSNotificationCenter defaultCenterB
addObserverself
selectorQselectordaDone
name QJAquesTalkDaDoneNotifyJ
objectnilBSTvoid dealloc R
ifm8pAqTk AquesTalkDa8Releasem8pAqTk SAANSNotificationCenter defaultCenterB removeObserverselfBST
IBAction playid senderR終了通知イベントの作成 name 部分は NSNotificationCenter に設定した値に合わせる
NSNotification Cnotification U ANSNotification

notificationWithNameQJAquesTalkDaDoneNotifyJ objectself userInfonilBS テキストボックスから文字列取得し、文字コードを ShiftJIS に変換し、音声合成出力（非同期）char Csjis U charC AAtextfield textB cStringUsingEncodingNSShiftJISStringEncodingBS
int iret U AquesTalkDa8Playm8pAqTk, sjis, -<<, notification S
ifiretVU< R  エラーの場合はアラート表示
UIAlertController CalertController U AUIAlertController
alertControllerWithTitleQJErrorJ messageQJ音声記号列の指定が正しくありませんJ
preferredStyleUIAlertControllerStyleAlertBS
AalertController addActionAUIAlertAction actionWithTitleQJはいJstyleUIAlertActionStyleDefault handlerWUIAlertAction Caction R TBBSAself presentViewControlleralertController animatedYES completionnilBS
returnS
T
onPlayLabeltext U QJPlayingJST
IBAction stopid sender
R
AquesTalkDa8Stopm8pAqTk STvoid daDoneNSNotificationC notification
R
onPlayLabeltext U QJDoneJS
T・・・
このサンプルは、非同期の音声合成でデバイスに直接合成音声を出力するものですが、この他に音声データをメモリ上配列データ に取得する関数もあり、生成した音声を任意の方法で転送したり出力することも可能です。
また、本サンプルは Objective C で記述していますが、swift でも使用可能です。具体的なコーディングについてはネットで検索してください。

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

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

 履歴
日付

版

変更箇所

更新内容

更新者

2011/02/03

1.0

新規作成

AquesTalk2 iOS から加筆修正

N.Y

2012/10/01

1.1

Ver.1.4 に対応

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

N.Y

2013/07/08

1.2

Ver.1.5 に対応

UTF8 関数の追加

N.Y

2014/12/22

1.3

Ver.1.6 に対応

iOS 64bit(arm64)に対応

N.Y

2016/03/19

1.4

Ver.1.61 に対応

Xcode7 用に、x86_64,bitcode 記述追加

N.Y