@@ -1,3 +1,4 @@ | |||||
/connection.py | /connection.py | ||||
/__pycache__ | /__pycache__ | ||||
/nizika_talking.wav | |||||
@@ -1,78 +0,0 @@ | |||||
////////////////////////////////////////////////////////////////////// | |||||
/*! @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. ! | |||||
// ---------------------------------------------------------------------- |
@@ -1,94 +0,0 @@ | |||||
/*------------------------------------------------------------- | |||||
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 (ユーザ辞書:任意) | |||||
OE | |||||
|- CREDITS | |||||
2011/01/14 N.Yamazaki Creation | |||||
2019/03/05 N.Yamazaki Ver.4用に一部修正 | |||||
-------------------------------------------------------------*/ | |||||
#include <stdio.h> | |||||
#include <stdlib.h> | |||||
#include <string.h> | |||||
#include <locale.h> // 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; | |||||
} | |||||
@@ -17,7 +17,7 @@ class Aques: | |||||
p = subprocess.Popen ('./aques', stdin = subprocess.PIPE, | p = subprocess.Popen ('./aques', stdin = subprocess.PIPE, | ||||
stdout = subprocess.PIPE) | stdout = subprocess.PIPE) | ||||
koe = p.communicate (text.encode ())[0].decode () | |||||
koe: str = p.communicate (text.encode ())[0].decode () | |||||
aqtk = cdll.LoadLibrary ('libAquesTalk2Eva.so') | aqtk = cdll.LoadLibrary ('libAquesTalk2Eva.so') | ||||
aqtk.AquesTalk2_Synthe_Utf8.restype = POINTER (ARRAY (c_ubyte, 0)) | aqtk.AquesTalk2_Synthe_Utf8.restype = POINTER (ARRAY (c_ubyte, 0)) | ||||