modelscope / agentscope

Start building LLM-empowered multi-agent applications in an easier way.

Home Page:https://modelscope.github.io/agentscope/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Feature]: agent speak 方法adds tts 功能

tomhup opened this issue · comments

我有一个简单的实现,
AgentBase
def speak(
self,
content: Union[str, dict],
) -> None:
if self.is_tts:
logger.chat(content)
asyncio.run(async_get_speech(content.content))
else:
logger.chat(content)

采用edget_tts 库实现语音播放

import asyncio
import io
import os
import re
import tempfile
from pydub import AudioSegment
from pydub.playback import play
import edge_tts
import logging
logger = logging.getLogger(name)

async def async_get_speech(phrase,voice="zh-CN-XiaoxiaoNeural"):
try:
# 创建一个临时文件
with tempfile.NamedTemporaryFile(delete=False) as tmpfile:
tmpfile_name = tmpfile.name
text=phrase
text = re.sub(r'*+', '', text) # 替换所有 * 字符
text = re.sub(r'#+', '', text)
phrase=text
# print(phrase)
# 生成语音并保存到临时文件
tts = edge_tts.Communicate(text=phrase,voice=voice)
await tts.save(tmpfile_name)

    # 读取临时文件到 BytesIO 对象
    with open(tmpfile_name, "rb") as tmpfile:
        mp3_data = tmpfile.read()
    mp3_buffer = io.BytesIO(mp3_data)

    # 删除临时文件
    os.remove(tmpfile_name)

    # 从 BytesIO 对象加载音频并播放
    mp3_buffer.seek(0)  # 重置指针到开始
    audio_data = AudioSegment.from_file(mp3_buffer, format="mp3")
    play(audio_data)

except Exception as e:
    logger.error(f"Error: {e}")

async def main():
phrase = "*Hello, #this is a test."
await async_get_speech(phrase)

if name == "main":
asyncio.run(main())

Thanks for your contributions to AgentScope. We will consider adding this feature to our AgentScope Studio :)