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

67 lines
8.2 KiB
Plaintext
Raw Normal View History

o
ɟ<>i<EFBFBD><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><)<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 rB<00>session<6F>form<72>resp<73>errorr?r2rrrrws*<02> 

<0E>
<14><16>.<2E>zChatTTSProvider.synthesizecCr)N<>ChatTTSrrrrrr<00>r3zChatTTSProvider.get_namec
Cs<>|jdurPz+ddl}|j|j<03>d<03>dd<05>}|jdkr*|<02><05>}|<03>d<07>dk|_W|jSd |_W|jStyO}zt<07>d
|<04><00><02>d |_WYd}~|jSd}~ww|jS) u检查 ChatTTS 是否可用Nrz/health<74>)r@rArH<00>okFzChatTTS check failed: ) r#<00>requestsr5r<<00> status_coderJrIr8r9)rrRrMr?<00>errrr<00>s"

<08><0E><08><02>zChatTTSProvider.is_available<6C>urlcCs||_d|_dS)u设置服务地址N)r<r#)rrUrrr<00>set_url<72>s
zChatTTSProvider.set_urlN)rrrrr*<00>getenvr<r%rrrrrrrVrrrrr;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)
rrrrrrrrrrrrrrrX<00>s
rXc@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)NrZr[r\)<06>current_provider<65>
_providersrrr;rX)rr]<00> edge_providerrrrr%<00>s
 zTTSManager.__init__N<5F> provider_namer cCs|p|j}|j<01>||jd<00>S)u获取 TTS 提供者r\)r^r_r5)rra<00>namerrr<00> get_provider<65>s
zTTSManager.get_providercCs(||jvr
||_dSt<02>d|<01><00><02>dS)u设置当前 TTS 方案zUnknown provider: N)r_r^r8r9)rrarrr<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))rb<00> display_name<6D> available)rr)<03>.0rb<00>providerrrr<00>
<listcomp><3E>s<02><04><06>z-TTSManager.list_providers.<locals>.<listcomp>)r_<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: )rcrr8r9rrrIrN)rr rarh<00>_r2rTrrrr<00>s<02>
<08><02>zTTSManager.synthesize)r\r!)rrrrrr;rX<00> PROVIDERSrr%rr
rcrd<00>listrk<00>dictrlrrrrrrY<00>s<06> $rY)rr*r'<00>logging<6E>asyncio<69>abcrr<00>typingrrrrWr<00>makedirs<72> getLoggerrr8r
rr;rXrY<00> tts_managerrrrr<00><module>s"  
C8
F