|
- from ctypes import *
-
-
- class Aques:
- @classmethod
- def main (cls, text: str) -> bytearray | None:
- return cls.__synthe_utf8 (text, speed = 100)
-
- @staticmethod
- def __synthe_utf8 (text, speed, phont_file = None) -> bytearray | None:
- if phont_file is None:
- phont = None
- else:
- with open (phont_file, 'rb') as f:
- phont = f.read ()
-
- aqkoe = cdll.LoadLibrary ('libAqKanji2Koe.so')
- dic_path: str = './aq_dic'
- err = c_int (0)
- aqkoe.AqKanji2Koe_Create.restype = c_void_p
- handle = aqkoe.AqKanji2Koe_Create (dic_path.encode ('utf-8'), byref (err))
- koe: str = ''
- aqkoe.AqKanji2Koe_Convert.restype = c_int
- aqkoe.AqKanji2Koe_Convert (handle, text.encode ('utf-8'), koe, 4096)
-
- aqtk = cdll.LoadLibrary ('libAquesTalk2Eva.so')
- aqtk.AquesTalk2_Synthe_Utf8.restype = POINTER (ARRAY (c_ubyte, 0))
- size = c_int (0)
- wav_p = aqtk.AquesTalk2_Synthe_Utf8 (koe.encode ('utf-8'), speed,
- byref (size), phont)
-
- if not bool (wav_p):
- return None
-
- wav_p = cast (wav_p, POINTER (ARRAY (c_ubyte, size.value)))
- wav = bytearray (wav_p.contents)
- aqtk.AquuesTalk2_FreeWave (wav_p)
-
- return wav
|