From da59975cba09a8dadf08d5fa094cb411f442f5bb Mon Sep 17 00:00:00 2001 From: Gitea Date: Sat, 2 Dec 2023 23:47:35 +0900 Subject: [PATCH] =?UTF-8?q?Segmentation=20Fault=20=E3=81=8C=E5=9B=9E?= =?UTF-8?q?=E9=81=BF=E3=81=A7=E3=81=8D=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E3=81=AE=E3=81=A7=20C++=20=E3=81=AB=E7=A7=BB=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AqKanji2Koe.h | 78 ++++++++++++++++++++++++++++++++++++++++++ aques | Bin 0 -> 16664 bytes aques.cpp | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 171 insertions(+) create mode 100644 AqKanji2Koe.h create mode 100755 aques create mode 100644 aques.cpp 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 0000000000000000000000000000000000000000..0bbc092ac985a6d33435163b028bd8753b86e60f GIT binary patch literal 16664 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 H_uKyyCT`L0 literal 0 HcmV?d00001 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; +} +