开源 tts 软件 ekho 的 Python 封装(树莓派/Jetson 可用)

参考文档
https://www.cnblogs.com/lightsalt/archive/2011/10/19/2217628.html

开源的 TTS,使用 Python 来实现文本和语音的转换。

ekho 支持 python 动态库调用

1、ekho.cpp 中添加下列代码,能够不用创建对象而调用C++方法

extern "C" {
    Ekho obj;
    int d_setvoice(char *text)
    {
        return obj.setVoice(string(text));
    }
    int d_speak(char *text) 
    {
        return obj.speak(string(text));
    }
    int d_stop(void) 
    {
        return obj.stop();
    }
    int d_pause(void) 
    {
        return obj.pause();
    }
    int d_resume(void) 
    {
        return obj.resume();
    }
		void d_setspeed(int tempo_delta)
		{
				obj.setSpeed(tempo_delta);
		}
		void d_setpitch(int pitch_delta)
		{
				obj.setPitch(pitch_delta);
		}
		void d_setvolume(int volume_delta)
		{
				obj.setVolume(volume_delta);
		}
		void d_setrate(int rate_delta)
		{
				obj.setRate(rate_delta);
		}
		bool d_isspeaking()
		{
				return obj.isSpeaking();
		}
}

2、在 ./MakeFile 和./libmusicxml/linux/MakeFile 的 CXXFLAG 中增加 -fPIC -shared

3、因为 -l 参数配置错误,make 报错时手动执行。7.6 版本最终生成动态库的时候也需要这行下面代码,否则生成的执行文件无法被 python 调用。

g++ -DHAVE_CONFIG_H -I.    -I./utfcpp/source -I./sonic -pthread  -lstdc++ -g -O2 -O0 -MT src/ekho-ekho.o -MD -MP -MF src/.deps/ekho-ekho.Tpo -c -o src/ekho-ekho.o -shared -fPIC  `test -f 'src/ekho.cpp' || echo './'`src/ekho.cpp

g++ -I./utfcpp/source -I./sonic -g -O2 -O0 -o test_ekho src/test_ekho-test_ekho.o  libekho.a ./libmusicxml/libmusicxml2.a -lespeak -lsndfile -lpthread -lpulse -lpulse-simple -lpulsecommon

g++ -I./utfcpp/source -I./sonic -pthread -g -O2 -O0 -o ekho src/ekho-ekho.o -fPIC -shared -lstdc++ libekho.a ./libmusicxml/libmusicxml2.a -lespeak -lsndfile -lpthread -pthread -lpulse -lpulse-simple -lpulsecommon
python 测试代码
import ctypes
from ctypes import * 
so = ctypes.cdll.LoadLibrary   
lib = so("./ekho")   
speak=lib.d_speak
setvoice=lib.d_setvoice
speak.argtypes=[POINTER(c_char)]  
setvoice.argtypes=[POINTER(c_char)]
STR_SPEAK=(c_char * 100)(*bytes("hello, thank you, how are you.",'utf8')) 
cast(STR_SPEAK, POINTER(c_char))
speak(STR_SPEAK)
STR_VOICE=(c_char * 100)(*bytes("Mandarin",'utf8')) 
cast(STR_VOICE, POINTER(c_char))
setvoice(STR_VOICE)
STR_SPEAK=(c_char * 100)(*bytes("原来你还在这里",'utf8')) 
cast(STR_SPEAK, POINTER(c_char))
speak(STR_SPEAK)
STR_VOICE=(c_char * 100)(*bytes("Cantonese",'utf8')) 
cast(STR_VOICE, POINTER(c_char))
setvoice(STR_VOICE)
STR_SPEAK=(c_char * 100)(*bytes("原来你还在这里",'utf8')) 
cast(STR_SPEAK, POINTER(c_char))
speak(STR_SPEAK)
发布了18 篇原创文章 · 获赞 1 · 访问量 949

猜你喜欢

转载自blog.csdn.net/ManWZD/article/details/104023954
TTS