diff --git a/AqKanji2Koe.h b/AqKanji2Koe.h new file mode 100644 index 0000000..9dfadf1 --- /dev/null +++ b/AqKanji2Koe.h @@ -0,0 +1,78 @@ +////////////////////////////////////////////////////////////////////// +/*! @class AqKanji2Koe + + @brief AquesTalk用言語処理部 (Linux) + + 漢字かな混じりテキスト->かな音声記号列 + + @author N.Yamazaki (Aquest) + + @date 2022/12/07 N.Yamazaki Ver.4.1.3 +*/ +// COPYRIGHT (C) 2019 AQUEST CORP. +////////////////////////////////////////////////////////////////////// +#if !defined(_AQ_KANJI2KOE_H_) +#define _AQ_KANJI2KOE_H_ +#ifdef __cplusplus +extern "C"{ +#endif + +///////////////////////////////////////////// +//! 言語処理インスタンス生成(初期化) +//! @param pathDic[in] 辞書のディレクトリを指定(最後に/が有っても無くても良い) +//! @param pErr[out] エラー時にはエラーコードが入る 正常終了時は不定値 +//! @return インスタンスハンドル エラーの時は0が返る +void * AqKanji2Koe_Create(const char *pathDic, int *pErr); + +///////////////////////////////////////////// +//! 言語処理インスタンス生成 (初期化)その2 +//! 呼び出し側で辞書データ(バイナリ)をメモリに読み込んでから指定 +//! 初期化を高速化するためのメモリマップトファイルなどが使える +//! @param pSysDic[in] システム辞書データ先頭アドレス(必須) +//! @param pUserDic[in] ユーザ辞書データ先頭アドレス(使用しないときは0を指定) +//! @param pErr[out] エラー時にはエラーコードが入る 正常終了時は不定値 +//! @return インスタンスハンドル エラーの時は0が返る +void * AqKanji2Koe_Create_Ptr(const void *pSysDic, const void *pUserDic, int *pErr); + +///////////////////////////////////////////// +//! インスタンス解放 +//! @param hAqKanji2Koe[in] AqKanji2Koe_Create()で返されたインスタンスハンドル +void AqKanji2Koe_Release(void *hAqKanji2Koe); + +///////////////////////////////////////////// +//! 言語処理 (かな音声記号列出力) +//! @param hAqKanji2Koe[in] AqKanji2Koe_Create()で返されたインスタンスハンドル +//! @param kanji[in] 漢字かな混じり文テキスト(UTF8 BOM無) +//! @param koe[out] カナ音声記号列(UTF8 BOM無) +//! @param nBufKoe[in] koeのバッファサイズ[byte] +//! @return 0:正常終了 それ以外:エラーコード +int AqKanji2Koe_Convert(void *hAqKanji2Koe, const char *kanji, char *koe, int nBufKoe); + +///////////////////////////////////////////// +//! 言語処理 (ローマ字音声記号列出力) +//! @param hAqKanji2Koe[in] AqKanji2Koe_Create()で返されたインスタンスハンドル +//! @param kanji[in] 漢字かな混じり文テキスト(UTF8 BOM無) +//! @param koe[out] ローマ字音声記号列(UTF8 BOM無) +//! @param nBufKoe[in] koeのバッファサイズ[byte] +//! @return 0:正常終了 それ以外:エラーコード +int AqKanji2Koe_ConvRoman(void *hAqKanji2Koe, const char *kanji, char *koe, int nBufKoe); + +///////////////////////////////////////////// +//! 開発ライセンスキー設定 +//! 音声波形を生成する前に一度呼び出す。 +//! これにより評価版の制限がなくなる。 +//! @param key[in] 開発ライセンスキーを指定 +//! @return ライセンスキーが正しければ0、正しくなければ1が返る +//! *キーの解析を防ぐため不正なキーでも0を返す場合がある。このとき制限は解除されない。 +int AqKanji2Koe_SetDevKey(const char *devKey); + +#ifdef __cplusplus +} +#endif +#endif // !defined(_AQ_KANJI2KOE_H_) +// ---------------------------------------------------------------------- +// ! Copyright AQUEST Corp. 2006- . All Rights Reserved. ! +// ! An unpublished and CONFIDENTIAL work. Reproduction, adaptation, or ! +// ! translation without prior written permission is prohibited except ! +// ! as allowed under the copyright laws. ! +// ---------------------------------------------------------------------- diff --git a/aques b/aques new file mode 100755 index 0000000..0bbc092 Binary files /dev/null and b/aques differ diff --git a/aques.cpp b/aques.cpp new file mode 100644 index 0000000..5dbad94 --- /dev/null +++ b/aques.cpp @@ -0,0 +1,93 @@ +/*------------------------------------------------------------- + Kanji2KoeCmd - かな漢字混じりテキストを音声記号列に変換 + + $ Kanji2KoeCmd (dic_dir) < in.txt > out.koe + + ■ビルド(GCC 5.1以上の環境が必要) + $ ln -sf ../lib64/libAqKanji2Koe.so.4.0 ./libAqKanji2Koe.so.4 + $ ln -sf ../lib64/libAqKanji2Koe.so.4.0 ./libAqKanji2Koe.so + $ g++ -I./lib64 -o Kanji2KoeCmd Kanji2KoeCmd.cpp -L. -lAqKanji2Koe + + ■実行 + $ echo 音声合成テスト | LD_LIBRARY_PATH=. ./Kanji2KoeCmd ../aq_dic + + ■ライブラリの配置 + libAqKanji2Koe.so.X.Xを他のアプリからも呼び出す場合は、 + ldconfigコマンドで共有ライブラリに登録する。 + 詳しくは、本ライブラリのマニュアルの「ライブラリ配置」を参照 + + ■辞書の配置(デフォルト) + + |- Kanji2KoeCmd + |- aq_dic/ 辞書フォルダ(aq_dic)を同じディレクトリに配置 + |- aqdic.bin + |- aq_user.dic (ユーザ辞書:任意) + |- CREDITS + + + 2011/01/14 N.Yamazaki Creation + 2019/03/05 N.Yamazaki Ver.4用に一部修正 + +-------------------------------------------------------------*/ +#include +#include +#include +#include // setlocale() +#include "AqKanji2Koe.h" + +#define NSTR 4096 + +char * GetPathDic(const char *pathModule); + +int main(int ac, char **av) +{ + int iret; + char kanji[NSTR]; + char koe[NSTR]; + void *hAqKanji2Koe; + + // 開発ライセンスキー(ライセンス証に記載)の設定 +// iret = AqKanji2Koe_SetDevKey("XXX-XXX-XXX"); + + if(ac==1){ + char *pPathDic = GetPathDic(av[0]); + hAqKanji2Koe = AqKanji2Koe_Create(pPathDic, &iret); + free(pPathDic); + } + else { + hAqKanji2Koe = AqKanji2Koe_Create(av[1], &iret); + } + + if(hAqKanji2Koe==0){ + fprintf(stderr, "ERR: can not initialize Dictionary(%d)\n", iret); + fprintf(stderr, "USAGE: $ Kanji2KoeCmd (dic_dir) < in.txt > out.koe\n"); + return iret; + } + + int i; + for(i=0; ; i++){ + if(fgets(kanji, NSTR, stdin)==0) break; + iret = AqKanji2Koe_Convert(hAqKanji2Koe, kanji, koe, NSTR); + if(iret!=0) { + fprintf(stderr, "ERR: AqKanji2Koe_Convert()=%d\n", iret); + break; + } + fprintf(stdout, "%s\n", koe); + } + + AqKanji2Koe_Release(hAqKanji2Koe); + return 0; +} + +char * GetPathDic(const char *pathModule) +{ + char *p = strrchr((char*)pathModule, '/'); + if(p==NULL){ + return strdup("./aq_dic"); + } + char *path = (char*)malloc(strlen(pathModule)+strlen("/aq_dic")+1); + strncpy(path, pathModule, p-pathModule); + strcpy(path+(p-pathModule), "/aq_dic"); + return path; +} +