(株)アクエストhttp://www.a-quest.com/
1.概要
本文書は、規則音声合成ライブラリAquesTalk2 Mac(以下、「AquesTalk2」)をアプリケーションに組み込んで使用するためのプログラミングに関して、方法および注意点を示したものです。 AquesTalk2 MacはWin版のAquesTalk2とは異なり、DA(サウンド出力)機能はありません。本ライブラリを用いて生成した音声波形データは、ファイルに出力、サウンドデバイスへ出力、またはネットワークを通じて転送するなど、アプリケーションの要求に応じた処理を別途実装する必要があります*¹。なお、生成する波形データのフォーマットはWAV形式です。 AquesTalk2の入力である音声記号列の文字コードはShiftJIS, EUC, UTF-8, UTF-16が使用可能で、それぞれ呼び出す関数名が異なっています。必要に応じて選択して利用します。なお、本ライブラリの使用にあたっては、付属のAquesTalk2のライセンス規定を事前にご確認ください。 *¹ AquesTalk2の出力する音声波形データをMac本体から音声出力するためのDAライブラリもあります。お問い合わせください。

3. Phontファイル
パッケージのphontディレクトリに、声種を規定するPhontファイルがいくつかlibAquesTalks2.so含まれています。なお、この中のaq_rm.phontは、ライブラリに内臓のデフォルトPhontと同じものです。ライブラリ呼び出し時にPhontファイルデータを指定することによって、異なる声で合成が可能となります。今後、新しいPhontファイルを逐次公開する予定です。これらは、別途ダウンロードしてお使いください。なお、PhontファイルはWindows用とmac用の違いはなく、相互に使用することができます。

5.エラーコード表

6.音声データ形式
本ライブラリで生成する音声データは、次の形式となります。 AquesTalk2_Synthe()等で生成する音声データには、先頭部にWAVヘッダが付与されています。ストレートPCMデータが必要な場合は、別途ヘッダを除いて使用してください(先頭の44バイト)。ほかのフォーマットをご希望の場合はカスタマイズを承りますので、お問い合わせください。

7.音声記号列
音声記号列の書き方、仕様については、付属の「音声記号列仕様」を参照ください。
8.サンプルプログラム
AquesTalk2 Macライブラリパッケージにサンプルプログラムのプロジェクトー式が入っています。 HelloAqTkは、任意の音声記号列指定してSayボタンを押下すると、合成音声を発声するアプリケーションです。
8.1.ビルド方法
1.アプリケーションプロジェクトを開くHelloAqTk.xcodeprojをダブルクリックしてxcodeでプロジェクトを開きます。 2.プロジェクトにフレームワークの追加パッケージの初期状態では、AquesTalk2フレームワークがプロジェクトに含まれていませんので追加します。グループとファイルのコンテキストメニューの[Frameworks]/[Linked Frameworks]の右クリックから[追加]/[既存のフレームワーク]を選択します。これで、[Linked Frameworks]にAquesTalk2.frameworkが追加されたのが確認できます。
3.ターゲットにフレームワークを追加
AquesTalk2 frameworkは、ダイナミックライブラリなので、実行時にも必要になります。そこで、実行モジュールHelloAqTk.appに配置されるように設定します。直接フレームワークをコピーしてもよいのですが、ここでは、ビルド時にコピーされる方法を用います。グループとファイルのコンテキストメニューの[Linked Frameworks]の[AquesTalk2.framework]を[ターゲッﾄﾞ]/[HelloAqTk]/[ファイルをコピー]の部分にドラッグ&ドロップします。なお、[ファイルをコピー]が表示されていないときは、ターゲットのアプリ名を右クリック、追加/新規ビルドフェーズ/新規コピーファイルで[ファイルをコピー]項目を追加する。そして、[ファイルをコピー]の右クリック、[情報を見る]/[一
4.ビルド
以上の方法で、フレームワークをプロジェクトに取り込むことができたので、ビルドができます。ビルドでエラーが無ければ実行してみてください。テキストボックスに任意の音声記号列を入力して[Say]ボタンのクリックで音声が聞こえればOKです。
8.2.コード説明
次に示すコードは、ボタンが押されたときに呼ばれる関数で、テキストボックスから文字列を取得し、AquesTalk2で音声合成して、DA出力する一連の処理が書かれています。 AquesTalk2フレームワークの関数ヘッダをインポートします（2行目）。 Shift JISへ文字コードを変換しています（12行目）。関数 AquesTalk2_Synthe()の最後の引数は、Phontデータの先頭アドレスを指定します。ここでは内蔵のデフォルトPhontを使用するのでNULLを指定しています。声種を切り替えるときは、Phontファイルをロードして先頭アドレスを指定してください（16行目）。音声合成に成功すると戻り値にWAV音声データの先頭アドレスが帰ります。指定した音声記号列が正しくない場合などのエラ一時にはOが返ります（17行目）。生成した音声データをMac本体から再生します。ここでは、別途当社製のDAライブラリlibAuPlay.aを使っています。このライブラリの入力は、16Bit/StraightPCMなので、WAVフォーマットをStraightPCMに変換してから与えるのですが、ここでは簡単にWAVヘッダ(44バイト)の次のアドレスを指定しています。 (27行目)。音声出力の終了後、生成したWAV波形データバッファをAquesTalk2_FreeWave()で開放します(30行目)。 AppController.m #import "AppController.h" #import <AquesTalk2/AquesTalk2.h>    //AquesTalk2 Framework #import "au_play.h" //DAライブラリ libAuPlay.a @implementation AppController - (IBAction)sayHello:(id)senderルテキストボックスから文字列取得NSString *strKoe = [textfield stringValue]; // 文字コードをShiftJISに変換char *sjis = (char*)[strKoe cStringUsingEncoding:NSShiftJISStringEncoding]; // 音声合成音声記号列->WAVデータint size; unsigned char *wav = AquesTalk2_Synthe(sjis, 100, &size, NULL); if(wav==0){ NSAlert *alert = [ NSAlert alertWithMessageText:@"Error" defaultButton:@"OK" alternateButton: @"" otherButton:@" informativeTextWithFormat:@"音声記号列の指定が正しくありません" ]; [alert runModal]; return; } //音声出力同期型II WAVヘッダー(先頭の44byte)を除いて、StraightPCMとするPlaySound((short*)(wav+44), (size-44)/2);  // libAuPlay.a //生成した波形バッファの解放AquesTalk2_FreeWave(wav); } @end