创建自定义语音合成网站:用Python和FastAPI打造个性化TTS服务

大家好,你是否曾经希望拥有一个个性化的文本到语音(TTS)服务,能够将你的文字内容转化为具有独特声音的音频文件?在本教程中,我将向你展示如何使用Python和FastAPI创建一个自定义语音合成网站,让你能够轻松地合成自己喜欢的声音,调整语速,并下载生成的音频文件。无需多言,让我们开始吧!

开篇故事

想象一下,你是一个创意无限的内容创作者。每天,你都会有新的文字内容,需要将它们转化为语音,以便在你的项目中使用。然而,你对传统的TTS服务感到不满,因为它们不能提供个性化的声音和语速调整。于是,你决定自己动手创建一个网站,用于自定义语音合成。这个网站将允许你输入文本、选择声音、调整语速,并下载生成的音频文件。让我们一起来实现这个梦想吧!

准备工作

在开始之前,确保你已经安装了以下必要的Python库:

  • FastAPI
  • edge_tts
  • asyncio
  • hashlib
  • datetime
  • os
  • tempfile
  • pygame.mixer

你可以使用以下命令来安装这些库:

pip install fastapi edge-tts pygame

步骤一:创建FastAPI应用

首先,我们将创建一个FastAPI应用,它将作为我们自定义语音合成网站的核心。以下是代码示例:

from fastapi import FastAPI, Request, Form, File
from fastapi.responses import JSONResponse, FileResponse
from fastapi.templating import Jinja2Templates
import edge_tts
import asyncio
import hashlib
import datetime
import os
import tempfile
import pygame.mixer

pygame.mixer.init()

app = FastAPI()
templates = Jinja2Templates(directory="templates")

在这里,我们导入了必要的FastAPI模块,并创建了一个FastAPI应用对象。我们还设置了模板目录,以便后续渲染HTML模板。

步骤二:创建首页

接下来,我们将创建一个简单的首页,用户可以在这里输入要合成的文本内容。我们将使用Jinja2模板引擎来渲染HTML页面。以下是代码示例:

@app.get("/")
async def index(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})

在这里,我们定义了一个路由/,当用户访问网站的根目录时,将渲染名为index.html的HTML模板。

步骤三:创建语音合成函数

为了合成语音,我们需要创建一个函数,它将接受文本、声音、语速等参数,并生成音频文件。以下是代码示例:

async def my_function(text, output, voice, rate):
    volume = '+0%'
    tts = edge_tts.Communicate(text=text, voice=voice, rate=rate, volume=volume)
    await tts.save(output)

这个函数使用了edge_tts库来进行语音合成,你可以根据自己的需求选择声音和语速。

步骤四:创建语音合成路由

现在,让我们创建一个路由,用户可以提交要合成的文本内容、声音、语速等参数。我们还将生成一个唯一的文件名来保存生成的音频文件。以下是代码示例:

@app.post("/synthesize")
async def synthesize(request: Request):
    data = await request.json()
    text = data.get("text")
    voice = data.get("voice")
    rate = data.get("rate")
    output_dir = os.path.join(os.path.dirname(__file__), "mp3")
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    now = datetime.datetime.now()
    filename_base = hashlib.md5((text[:5] + str(now.timestamp())).encode()).hexdigest()
    filename = os.path.join(output_dir, filename_base + ".mp3")

    with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3", dir=output_dir) as temp_file:
        temp_filename = temp_file.name
        await my_function(text, temp_filename, voice, rate)

    os.rename(temp_filename, filename)

    return JSONResponse(content={"message": "success", "download_link": f"/download?filename={filename}"})

这个路由接受用户的POST请求,包含文本、声音和语速参数。它生成一个唯一的文件名,调用my_function函数进行语音合成,然后返回包含下载链接的JSON响应。

步骤五:创建下载路由

最后,我们创建一个路由,用户可以通过下载链接下载生成的音频文件。以下是代码示例:

@app.get("/download")
async def download(filename: str):
    file_path = os.path.join(app.root_path, filename)
    return FileResponse(path=file_path, filename=filename, media_type="application/octet-stream")

这个路由接受文件名作为参数,然后返回文件下载的响应。

运行网站

现在,我们已经完成了网站的所有核心部分。你可以使用以下命令来运行网站:

uvicorn main:app --host 0.0.0.0 --port 8000 --reload

这会启动一个FastAPI服务器,使你的网站在本地的8000端口上运行。现在,你可以访问http://localhost:8000来使用你自己的自定义语音合成网站了!

结语

通过本教程,你学会了如何使用Python和FastAPI创建一个自定义语音合成网站。你可以输入文本、选择声音和语速,然后下载生成的音频文件。这个网站可以用于各种用途,包括创作、媒体制作和娱乐。

希望你喜欢这个教程,并能够将所学知识应用到实际项目中。如果你有任何问题或建议,请随时留言讨论。

本文由作者 王大神 原创发布于 大神网的AI博客。

转载请注明作者:王大神

原文出处:创建自定义语音合成网站:用Python和FastAPI打造个性化TTS服务

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2023年9月20日
下一篇 2023年9月20日

相关推荐

  • 使用FastAPI创建可下载Excel文件的Web应用

    在现代Web开发中,为用户提供下载功能是一项常见的需求。本教程将介绍如何使用FastAPI框架创建一个简单的Web应用,允许用户下载Excel文件。我们将演示如何生成Excel文件并将其作为响应发送给客户端。 创建FastAPI应…

    2023年11月26日
    00
  • 玩转Microsoft Edge在线文字转语音服务:edge-tts详细教程

    嗨,大家好!今天,我将与你分享一项令人兴奋的技术,那就是如何玩转Microsoft Edge的在线文字转语音服务,通过Python编程轻松实现文本转语音的功能。无需多言,让我们立刻进入这个充满创意和实用价值的教程吧! 引…

    2023年9月19日
    00
  • 微软发布7款逼真的人工智能语音,提升对话交互体验

    人工智能技术的不断进步正在推动着各种应用领域的发展,其中语音合成(Text-to-Speech,TTS)技术的自然性和表现力成为了越来越重要的关注点。微软作为全球科技巨头,一直在语音合成领域保持着领先地位。最近,微软…

    2023年11月7日
    00
  • 大神-OpenTTS:OpenAI TTS 语音生成器

    有没有想过在一瞬间将你的文字变成动听的声音?无论你是内容创作者、开发者、还是教育工作者,大神-OpenTTS都将满足你的需求。这是一个高效的文本转语音(TTS)应用程序,专为需要快速将文本转换为语音文件的用户设…

    2023年11月19日
    00
  • Rust 在 Python Web 应用中的性能魔力

    在一个多云的下午,小张正在使用 FastAPI 编写一个新的 Web 服务。虽然他知道 Python 为他提供了高效的开发速度和灵活性,但他仍然对性能有所担忧。当他在互联网上浏览时,他碰巧读到了 Rust 和 Python 的联合使用…

    2023年10月9日
    00
  • 探索Weex AI:你的个人人工智能知识机器人

    在数字时代,人工智能已经渗透到我们生活的方方面面。随着技术的不断进步,我们迎来了一个全新的时代,一个拥有属于自己的人工智能知识机器人的时代。今天,我将向你介绍Weex AI,这个令人兴奋的项目,它将改变你与…

    2023年10月11日
    00
  • 8个能提升你办公效率的人工智能网站

    在现代工作环境中,提高办公效率是至关重要的。随着人工智能技术的不断发展,越来越多的AI工具涌现出来,可以帮助你更加高效地完成工作任务。本文将介绍8个能够极大提升你办公效率的人工智能网站,无论你是需要自动…

    2023年5月4日
    00
  • [Windows] 微软语音助手免费版-AI配音

    在当今信息爆炸的时代,文字和信息无处不在。然而,有时候,我们需要将这些文字赋予生命,让它们以声音的方式传达,更加生动和具体。正是出于这个目的,吾爱破解大神 bill3k 带来了一款原创软件,一款文本转语音神…

    2023年1月27日
    00
  • 写给新人的OpenAI GPT-35-Turbo 聊天模型实用指南

    十年前,人工智能领域的巅峰技术是图灵测试,而今天,我们可以通过OpenAI GPT-35-Turbo模型与计算机进行自然语言对话,这标志着人工智能领域的巨大进步。本指南将帮助您了解如何使用GPT-35-Turbo模型进行聊天,以及…

    2023年7月15日
    00
  • 如何直接输出语音而无需保存文件使用 `edge_tts`

    在数字化时代,语音合成技术越来越受欢迎。从智能助手到语音提示系统,它们在各种应用中发挥着重要作用。然而,通常情况下,我们需要先将生成的语音保存为文件,然后再播放它。但现在,有一种令人兴奋的方法可以让…

    2023年10月26日
    00