Files
voice-chat-web/__pycache__/tts_service.cpython-310.pyc

71 lines
8.6 KiB
Plaintext
Raw Normal View History

o
<0B><>ip<00>@s<>dZddlZddlZddlZddlZddlmZmZddlm Z m
Z
ddl m Z e<01> dd<07>Z eje dd <09>e<03>e<10>ZGd
d <0B>d e<06>ZGd d <0A>d e<12>ZGdd<0F>de<12>ZGdd<11>de<12>ZGdd<13>d<13>Ze<16>ZdS)u0
TTS 语音合成模块
支持多种 TTS 方案
<EFBFBD>N)<02>ABC<42>abstractmethod)<02>Optional<61>Tuple)<01>datetime<6D> AUDIO_DIR<49> audio_cacheT)<01>exist_okc@sReZdZdZededeeeffdd<05><04>Zedefdd<07><04>Zede fdd <09><04>Z
d
S) <0B> TTSProvideruTTS 提供者抽象类<E8B1A1>text<78>returnc<00><00><00>dS)uT
合成语音
返回: (音频文件路径, 音频URL路径)
N<><00><02>selfr rr<00>H/home/xian/.openclaw/workspace-coder/works/voice-chat-web/tts_service.py<70>
synthesizes<02>zTTSProvider.synthesizecC<00>dS)u获取提供者名称Nr<00>rrrr<00>get_name <00>zTTSProvider.get_namecCr)u检查是否可用Nrrrrr<00> is_available%rzTTSProvider.is_availableN) <0B>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__r<00>strrrr<00>boolrrrrrr
sr
c @s<>eZdZdZdddddddd d
d d d d<0E> ZdZd deefdd<13>Zdede eeffdd<17>Z
defdd<19>Z defdd<1B>Z de fdd<1D>Zdefdd<1F>ZdS)!<21>EdgeTTSProvideru'Edge TTS 提供者微软免费TTSu晓晓u云希u云扬u晓晨u晓涵u晓梦u晓墨u晓睿u晓双u晓萱u晓颜u晓悠(女)) <0C>zh-CN-XiaoxiaoNeuralzzh-CN-YunxiNeuralzzh-CN-YunyangNeuralzzh-CN-XiaochenNeuralzzh-CN-XiaohanNeuralzzh-CN-XiaomengNeuralzzh-CN-XiaomoNeuralzzh-CN-XiaoruiNeuralzzh-CN-XiaoshuangNeuralzzh-CN-XiaoxuanNeuralzzh-CN-XiaoyanNeuralzzh-CN-XiaoyouNeuralrN<>voicecCs|p|j|_d|_dS<00>N)<03> DEFAULT_VOICEr <00>
_available<EFBFBD>rr rrr<00>__init__@s 
zEdgeTTSProvider.__init__r r c<00>sX<00>ddl}t<01><02>j<03>d<03>}tj<05>t|<03>}|<02>||j <09>}|<05>
|<04>IdHd|<03><00>}||fS)u使用 Edge TTS 合成语音rNz.mp3z/audio/) <0B>edge_tts<74>uuid<69>uuid4<64>hex<65>os<6F>path<74>joinr<00> Communicater <00>save)rr r&<00>filename<6D>filepath<74> communicate<74> audio_urlrrrrDs<02>
zEdgeTTSProvider.synthesizecCr)NzEdge TTSrrrrrrT<00>zEdgeTTSProvider.get_namecCs|j<00>|j|j<02>S)u获取当前音色名称)<03>VOICES<45>getr rrrr<00>get_voice_nameWszEdgeTTSProvider.get_voice_namecCsN|jdur$z ddl}d|_W|jSty#t<03>d<04>d|_Y|jSw|jS)u检查 Edge TTS 是否可用NrTzedge-tts not installedF)r#r&<00> ImportError<6F>logger<65>warning)rr&rrrr[s
 <0C>
<02>zEdgeTTSProvider.is_availablecCs*||jvr
||_dSt<02>d|<01>d<02><03>dS)u 设置音色zUnknown voice: z, using defaultN)r4r r8r9r$rrr<00> set_voicefs

zEdgeTTSProvider.set_voicer!)rrrrr4r"rrr%rrrr6rrr:rrrrr+s,<06> rc@sheZdZdZe<04>dd<03>Zdd<05>Zdede eeffdd <09>Z
defd
d <0B>Z de fd d <0A>Z defdd<10>ZdS)<12>ChatTTSProvideru#ChatTTS 提供者本地部署<E7BDB2> CHATTTS_URLzhttp://192.168.2.5:12002cCs
d|_dSr!)r#rrrrr%ts
zChatTTSProvider.__init__r r c
<00>s<00>ddl}|<02><01>4IdH<00>q}|<02><02>}|<04>d|<01>|j|j<05>d<04>||jdd<06>d<07>4IdH<00><}|jdkr@|<05><08>IdH}t d |<06><00><02><01>|<05>
<EFBFBD>IdH}|j<05>|d
<00><00>}d|fWd<00>IdHWd<00>IdHS1IdHsnwYWd<00>IdHdS1IdHs<>wYdS) u使用 ChatTTS 合成语音rNr z /synthesize<7A><<00><01>total)<02>data<74>timeout<75><74>zChatTTS error: r2) <0B>aiohttp<74> ClientSession<6F>FormData<74> add_field<6C>postr<<00> ClientTimeout<75>statusr <00> Exception<6F>json) rr rC<00>session<6F>form<72>resp<73>errorr@r2rrrrws*<02> 

<0E>
<14><16>.<2E>zChatTTSProvider.synthesizecCr)N<>ChatTTSrrrrrr<00>r3zChatTTSProvider.get_namec
s<><00>jdurAzddl<01>ddl}<01><00>fdd<04>}|<01><03><00>|<02><00><01>_W<00>jSty@}zt<06>d|<03><00><02>d<06>_WYd}~<03>jSd}~ww<00>jS)u检查 ChatTTS 是否可用Nrc
<00>s<><00>zt<7A><00><00>4IdH<00>^}|j<01>j<02>d<01><02>jdd<03>d<04>4IdH<00>3}|jdkrG|<01><05>IdH}|<02>d<06>dkWd<00>IdHWd<00>IdHWSWd<00>IdHn 1IdHsWwYWd<00>IdHWdS1IdHsnwYWdSYdS) Nz/health<74>r>)rArBrI<00>okF)rDr5r<rHrIrK)rLrNr@<00>rCrrr<00>check<63>s,<02>

<0E>
 <14><18>*<2A><12>
<18>
<06>z+ChatTTSProvider.is_available.<locals>.checkzChatTTS check failed: F)r#rC<00>asyncio<69>get_event_loop<6F>run_until_completerJr8r9)rrUrT<00>errSrr<00>s
<0E><08><02>zChatTTSProvider.is_available<6C>urlcCs||_d|_dS)u设置服务地址N)r<r#)rrYrrr<00>set_url<72>s
zChatTTSProvider.set_urlN)rrrrr*<00>getenvr<r%rrrrrrrZrrrrr;ns r;c@sFeZdZdZdedeeeffdd<05>Zdefdd<07>Zdefdd <09>Z d
S) <0B> NoTTSProvideru 不使用 TTSr r c<00>r )N)NNrrrrrr<00>s<02>zNoTTSProvider.synthesizecCr)Nu无 TTSrrrrrr<00>r3zNoTTSProvider.get_namecCr)NTrrrrrr<00>r3zNoTTSProvider.is_availableN)
rrrrrrrrrrrrrrr\<00>s
r\c@s<>eZdZdZeeed<02>Zddefdd<06>Z dde
ed e fd
d <0B>Z defd d <0A>Z d efdd<0F>Zd efdd<11>Zddede
ed e
efdd<14>ZdS)<17>
TTSManageruTTS 方案管理)<03>edge<67>chattts<74>noner`<00>default_providercCs@||_i|_t<02>}|<02><03>r||jd<t<04>|jd<t<05>|jd<dS)Nr^r_r`)<06>current_provider<65>
_providersrrr;r\)rra<00> edge_providerrrrr%<00>s
 zTTSManager.__init__N<5F> provider_namer cCs|p|j}|j<01>||jd<00>S)u获取 TTS 提供者r`)rbrcr5)rre<00>namerrr<00> get_provider<65>s
zTTSManager.get_providercCs(||jvr
||_dSt<02>d|<01><00><02>dS)u设置当前 TTS 方案zUnknown provider: N)rcrbr8r9)rrerrr<00> set_provider<65>s

zTTSManager.set_providercCsdd<02>|j<00><01>D<00>S)u列出所有可用方案cSs$g|]\}}||<02><00>|<02><01>d<00><03>qS))rf<00> display_name<6D> available)rr)<03>.0rf<00>providerrrr<00>
<listcomp><3E>s<02><04><06>z-TTSManager.list_providers.<locals>.<listcomp>)rc<00>itemsrrrr<00>list_providers<72>s<06>zTTSManager.list_providerscCstjS)u获取 Edge TTS 可用音色)rr4rrrr<00>get_edge_voices<65>szTTSManager.get_edge_voicesr c
<00>s<><00>|<00>|<02>}|<03><01>st<02>d|<03><04><00>d<02><03>dSz |<03>|<01>IdH\}}|WSty?}zt<02>d|<06><00><02>WYd}~dSd}~ww)u6
合成语音
返回音频URL
z Provider z not availableNzTTS synthesis failed: )rgrr8r9rrrJrO)rr rerl<00>_r2rXrrrr<00>s<02>
<08><02>zTTSManager.synthesize)r`r!)rrrrrr;r\<00> PROVIDERSrr%rr
rgrh<00>listro<00>dictrprrrrrr]<00>s<06> $r])rr*r'<00>loggingrU<00>abcrr<00>typingrrrr[r<00>makedirs<72> getLoggerrr8r
rr;r\r]<00> tts_managerrrrr<00><module>s"  
CC
F