119 lines
3.3 KiB
Python
119 lines
3.3 KiB
Python
"""
|
|
TTS 模块使用示例
|
|
|
|
演示如何使用 TTS 引擎和服务。
|
|
"""
|
|
|
|
import asyncio
|
|
from io import BytesIO
|
|
|
|
# 示例 1: 直接使用 Edge-TTS 引擎
|
|
async def example_direct_engine():
|
|
"""直接使用 EdgeTTSEngine"""
|
|
from tts.edge_tts_engine import EdgeTTSEngine
|
|
|
|
engine = EdgeTTSEngine()
|
|
print(f"Engine: {engine.get_engine_name()} v{engine.get_engine_version()}")
|
|
|
|
# 合成语音
|
|
text = "你好,我是语音合成助手。"
|
|
audio = await engine.synthesize(text, language="zh-CN")
|
|
print(f"Audio synthesized: {audio.getbuffer().nbytes} bytes")
|
|
|
|
# 获取支持的声音
|
|
voices = await engine.get_supported_voices("zh-CN")
|
|
print(f"Supported voices: {len(voices)} found")
|
|
for voice in voices[:3]:
|
|
print(f" - {voice['display_name']} ({voice['name']})")
|
|
|
|
|
|
# 示例 2: 使用工厂模式创建引擎
|
|
async def example_factory():
|
|
"""使用 TTSEngineFactory 创建引擎"""
|
|
from tts.factory import TTSEngineFactory
|
|
|
|
# 创建 Edge-TTS 引擎
|
|
engine = TTSEngineFactory.create("edge-tts")
|
|
print(f"\nUsing {engine.get_engine_name()} engine")
|
|
|
|
# 合成多种语言
|
|
texts = {
|
|
"zh-CN": "你好,世界!",
|
|
"en-US": "Hello, World!",
|
|
"ja-JP": "こんにちは、世界!",
|
|
}
|
|
|
|
for language, text in texts.items():
|
|
audio = await engine.synthesize(text, language=language)
|
|
print(f"Synthesized {language}: {audio.getbuffer().nbytes} bytes")
|
|
|
|
|
|
# 示例 3: 使用高级服务
|
|
async def example_service():
|
|
"""使用 TTSService 高级接口"""
|
|
from tts.service import TTSService
|
|
|
|
# 获取引擎信息
|
|
info = TTSService.get_engine_info()
|
|
print(f"\nTTS Service Info: {info}")
|
|
|
|
# 使用默认配置合成
|
|
text = "使用服务默认配置合成语音。"
|
|
audio = await TTSService.synthesize(text)
|
|
print(f"Synthesized with defaults: {audio.getbuffer().nbytes} bytes")
|
|
|
|
# 使用自定义参数合成
|
|
text = "这是一个更快的语音示例。"
|
|
audio = await TTSService.synthesize(text, rate=1.2)
|
|
print(f"Synthesized with rate=1.2: {audio.getbuffer().nbytes} bytes")
|
|
|
|
# 获取声音列表
|
|
voices = await TTSService.get_supported_voices()
|
|
print(f"Available voices: {len(voices)} found")
|
|
|
|
|
|
# 示例 4: 保存合成的音频到文件
|
|
async def example_save_audio():
|
|
"""合成语音并保存到文件"""
|
|
from tts.service import TTSService
|
|
|
|
text = "这是一个保存到文件的语音示例。"
|
|
audio = await TTSService.synthesize(text)
|
|
|
|
# 保存为 MP3 文件
|
|
output_file = "output_audio.mp3"
|
|
with open(output_file, "wb") as f:
|
|
f.write(audio.getvalue())
|
|
print(f"\nAudio saved to {output_file}")
|
|
|
|
|
|
async def main():
|
|
"""运行所有示例"""
|
|
print("=" * 50)
|
|
print("TTS Module Examples")
|
|
print("=" * 50)
|
|
|
|
try:
|
|
# print("\n1. Direct Engine Usage")
|
|
# print("-" * 50)
|
|
# await example_direct_engine()
|
|
|
|
# print("\n2. Factory Pattern")
|
|
# print("-" * 50)
|
|
# await example_factory()
|
|
|
|
# print("\n3. Service Interface")
|
|
# print("-" * 50)
|
|
# await example_service()
|
|
|
|
print("\n4. Save Audio to File")
|
|
print("-" * 50)
|
|
await example_save_audio()
|
|
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|