ChatTTS大模型在广播电视领域的应用实例

简介: 本文介绍了基于ChatTTS大模型的文字转语音工具,该工具结合现代文本处理和语音合成技术,提供高效的音频生成解决方案。文章详细描述了工具的主要功能,包括文本输入、语音选择、语速调整等,并探讨了其在广播电视行业的应用前景,如新闻播报、广告制作和教育培训等领域。未来,该工具将集成更多高级功能,以满足行业需求。

ChatTTS大模型在广播电视领域的应用实例

摘要

随着人工智能技术的快速发展,文字转语音(Text-to-Speech, TTS)系统已成为多种应用的重要组成部分,尤其在广播电视领域。本文介绍了一种基于ChatTTS大模型的文字转语音工具,该工具结合了现代文本处理和语音合成技术,为用户提供了高效的音频生成解决方案。通过对该工具的设计与实现进行分析,本文探讨了其在广播电视行业中的潜在应用场景及未来发展方向。

引言

文字转语音技术使得计算机能够将书面文字转换为自然的人声,这对于广播电视行业至关重要。它可以用于生成新闻播报、广告配音、教育培训等多种场景,以提高信息传达的效率和生动性。随着神经网络技术的发展,现代TTS模型已经能够生成接近人类自然声音质量的语音。

工具概述

本文中所展示的代码实现了一个简单而有效的文字转语音工具,其主要功能包括:

  1. 文本输入:用户可以在界面上输入或粘贴需要转换为语音的文本。文本框支持多行输入,适用于长篇文章或复杂内容。

  2. 语音选择:用户可以从多种可用的语音角色中选择合适的声音,以满足不同的内容需求。该工具集成了多种音色,包括男性和女性的不同口音,使得用户可以根据目标受众选择最合适的语音风格。

  3. 语速调整:用户可以根据需要调整语音的播放速度,从而增强节目的灵活性和可读性。通过下拉菜单,用户可选择从-100%到+100%的各个速度级别,使得生成的音频更符合特定场合的需求。

  4. 输出目录选择:用户可以自定义输出目录以便于管理生成的音频文件。通过文件选择对话框,用户可以轻松选择个人设备上的任意文件夹,提升了使用便利性。

  5. 右键菜单操作:在文本输入框中,用户可以使用右键菜单进行文本复制、剪切和粘贴等常用操作。这一功能不仅简化了文本输入过程,也提升了用户体验,尤其对于长文本的编辑。

  6. 异步任务处理:为了提高程序的响应速度,工具采用了异步编程模式。在合成音频的过程中,主线程不会被阻塞,这意味着用户仍然可以进行其他操作,而不会感到延迟。此设计显著提高了用户体验。

  7. 文件管理:工具自动管理文件输出,包括创建必要的目录结构和命名规则。用户可以方便地选择输出目录,并自定义文件名称,使得生成的音频文件易于查找和管理。同时,系统会确保生成的文件不与已有文件冲突。

运行环境

操作系统: Windows系统、Mac系统、Linux系统

IDE:Pycharm 2024.1

开发语言:Python 3.12

代码实现分析

源代码如下:

import os
import tempfile
import asyncio
import pygame.mixer
import customtkinter as ctk
from tkinter import filedialog
from tkinter import messagebox
from edge_tts import Communicate
from tkinter import Menu
import tkinter as tk

pygame.mixer.init()


# 用于异步执行 my_function 函数,以提高响应速度
async def my_function(text, output, voice, rate):
    volume = '+0%'
    tts = Communicate(text=text, voice=voice, rate=rate, volume=volume)
    await tts.save(output)

# 将训练好的语言模型以字典的形式存储,字典的键为神经网络的汉字名,字典的值为神经网络的训练模型名
# 这样做是为了给使用者更直观、更容易理解的界面菜单
voice_dict = {
   '(女)小小神经网络': 'zh-CN-XiaoxiaoNeural', '(女)小一神经网络': 'zh-CN-XiaoyiNeural',
              '(男)云健神经网络': 'zh-CN-YunjianNeural', '(男)云熙神经网络': 'zh-CN-YunxiNeural',
              '(女)云霞神经网络': 'zh-CN-YunxiaNeural', '(男标准话)云阳神经网络': 'zh-CN-YunyangNeural',
              '(女)辽宁-小贝神经网络': 'zh-CN-liaoning-XiaobeiNeural',
              '(女)陕西-小妮神经网络': 'zh-CN-shaanxi-XiaoniNeural', '(女)香港-HiuGa神经网络': 'zh-HK-HiuGaaiNeural',
              '(女)香港-HiuMa神经网络': 'zh-HK-HiuMaanNeural', '(男)香港-万隆神经网络': 'zh-HK-WanLungNeural',
              '(女)台湾-Hsiao陈神经网络': 'zh-TW-HsiaoChenNeural', '(女)台湾-Hsiao于神经网络': 'zh-TW-HsiaoYuNeural',
              '(男普通话)台湾-云J何神经网络': 'zh-TW-YunJheNeural'}


def show_context_menu(event):
    context_menu.post(event.x_root, event.y_root)


# 定义 synthesize_text 函数:这个函数是主要的功能实现部分。
# 首先从文本输入框中获取要转换的文本。
def synthesize_text():
    text = text_entry.get("1.0", ctk.END).strip()
    voice = voice_dict[voice_var.get()]
    rate = rate_var.get()

    # 生成输出的文件目录
    out_dir = output_dir_entry.get()
    output_dir = os.path.join(out_dir, "mp3")
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 选择的语音模式作为文件名

    filename_save = text_entry_filename.get("1.0", ctk.END).strip() + '-' + voice_var.get()
    filename = os.path.join(output_dir, filename_save + ".mp3")

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

    os.rename(temp_filename, filename)
    messagebox.showinfo("成功", "音频文件生成成功!")


# 定义 select_output_directory 函数, 这个函数用于打开文件选择对话框,让用户选择输出目录。
def select_output_directory():
    output_dir = filedialog.askdirectory()
    if output_dir:
        output_dir_entry.delete(0, ctk.END)
        output_dir_entry.insert(ctk.END, output_dir)


# 设置 CustomTkinter 主题
ctk.set_appearance_mode("System")
ctk.set_default_color_theme("blue")

# 创建主窗口
root = tk.Tk()
# root = ctk.CTk()
root.title("文字转语音工具--微信公众号:强壮Python")
root.geometry("730x700")
root.resizable(False, False)

# 创建标题
title_label = ctk.CTkLabel(root, text="文字转语音工具", font=("Arial", 24, "bold"), pady=20)
title_label.pack()

# 创建文本输入框
text_label = ctk.CTkLabel(root, text="请输入要转换为语音的文本:", font=("Arial", 14))
text_label.pack()

text_entry = tk.Text(root, height=15, width=100, font=("Arial", 12))
text_entry.pack()

# 创建右键菜单
context_menu = Menu(root, tearoff=0)
context_menu.add_command(label="复制", command=lambda: text_entry.event_generate("<<Copy>>"))
context_menu.add_command(label="剪切", command=lambda: text_entry.event_generate("<<Cut>>"))
context_menu.add_command(label="粘贴", command=lambda: text_entry.event_generate("<<Paste>>"))

# 绑定右键菜单到文本输入框

# # 自添代码,保存文件的名称
text_label_filename = ctk.CTkLabel(root, text="请输入保存的文件名称:", font=("Arial", 14))
text_label_filename.pack()

# text_entry_filename = ctk.CTkTextbox(root, height=20, width=210, font=("Arial", 12))
text_entry_filename = tk.Text(root, height=3, width=30, font=("Arial", 12))
text_entry_filename.pack()

# 绑定右键菜单到文本输入框
text_entry.bind("<Button-2>", show_context_menu)
# 创建输出目录选择框
output_dir_label = ctk.CTkLabel(root, text="选择输出目录:", font=("Arial", 14))
output_dir_label.pack()

output_dir_frame = ctk.CTkFrame(root)
output_dir_frame.pack()

output_dir_entry = ctk.CTkEntry(output_dir_frame, font=("Arial", 12), width=50)
output_dir_entry.pack(side=ctk.LEFT)

output_dir_button = ctk.CTkButton(output_dir_frame, text="选择目录", font=("Arial", 12),
                                  command=select_output_directory)
output_dir_button.pack(side=ctk.LEFT)

# 创建语音选择下拉框
voice_label = ctk.CTkLabel(root, text="请选择要使用的语音角色:", font=("Arial", 14))
voice_label.pack()

voice_var = ctk.StringVar()
# voice_var.set(voice_dict["(女)小小神经网络"])
if not voice_var:
    print('请选择语音模式')
voice_select = ctk.CTkOptionMenu(root, variable=voice_var, values=list(voice_dict.keys()),
                                 font=("Arial", 12), width=20)
voice_select.pack()

# 创建语速选择下拉框
rate_label = ctk.CTkLabel(root, text="调整语速:", font=("Arial", 14))
rate_label.pack()

rate_var = ctk.StringVar()
rate_var.set("+0%")

rate_select = ctk.CTkOptionMenu(root, variable=rate_var,
                                values=["-100%", "-90%", "-80%", "-70%", "-60%", "-50%", "-40%", "-30%",
                                        "-20%", "-10%", "+0%", "+10%", "+20%", "+30%", "+40%", "+50%", "+60%", "+70%",
                                        "+80%", "+90%", "+100%"], font=("Arial", 12), width=20)
rate_select.pack()

# 创建合成按钮
synthesize_button = ctk.CTkButton(root, text="合成音频", font=("Arial", 16, "bold"), command=synthesize_text, width=150,
                                  height=50)
synthesize_button.pack(pady=20)

root.mainloop()

界面设计

工具的用户界面采用customtkinter框架构建,支持多种操作,包括文本输入、文件选择以及右键菜单操作。用户友好的界面设计能够有效降低使用门槛,使得即使是非技术人员也能轻松操作。整体布局简洁明了,每一项功能模块都进行了合理的分组与标注,确保了良好的用户交互体验。

运行界面如下图所示:

运行程序,文本框的文字可以通过点击鼠标右键(粘贴、复制、剪切),如下图所示:

2.png

将文本内容粘贴或者直接输入到上图中的文本框,选择输出目录,如下图所示:

3.png

选择语音角色,如下图所示:

4.png

选择需要的语速,默认是0,也就是正常语速,如下图所示:

5.png

点击合成音频按钮,转换成功,会自动弹窗音频文件生成成功。如下图所示:

6.png

异步任务处理

为了提高程序的响应速度,工具采用了异步编程模式。通过使用asyncio库,合成音频的任务在后台运行,确保界面持续响应用户的其他操作。这种设计方式不仅增强了程序的流畅性,还避免了在较大文本量处理时可能出现的“卡顿”现象。

文件管理

工具的文件管理功能非常健全。首先,用户可以选择生成的音频文件保存的目录,系统会检查该目录是否存在,如不存在则自动创建。此外,音频文件命名方面,工具支持用户自定义文件名,确保生成的音频文件易于识别和分类。最终,所有生成的文件均以.mp3格式存储,以保证广泛的兼容性。

应用场景

本工具的设计理念和实现方式使其在广播电视行业具有广泛的应用前景:

  1. 新闻播报:通过快速生成新闻稿件的音频版本,提升新闻传播的效率。媒体机构可以在紧急情况下迅速将消息以语音形式发布,提高信息传递的时效性。

  2. 广告制作:为广告文案提供音频支持,增强广告的吸引力和传播效果。企业在制作广告时,可以根据目标受众选择合适的声音角色,提升广告的亲和力。

  3. 教育培训:为在线教育平台提供课程内容的音频化服务,提高学生的学习兴趣和效果。教师可以利用此工具将教学材料转化为声音,让学习变得更加生动。

未来发展方向

随着深度学习和自然语言处理技术的不断进步,TTS系统将朝着更高的音质、更丰富的声音特征和更自然的表达方式发展。未来,本工具可以进一步集成情感识别、个性化声音合成等高级功能,以更好地服务于广播电视行业的多样化需求。例如,通过分析文本的情感因素,生成情感丰富的语音输出,以增强听众的参与感和沉浸感。

结论

基于ChaTTS大模型的文字转语音工具展现了强大的潜力,在广播电视领域具有实际应用价值。通过不断优化和扩展工具的功能,可以为行业提供更加高效、灵活的音频合成解决方案,助力信息传播的全面升级。本文的研究不仅为当前技术的应用提供了一定的参考,也为未来的研究方向指明了道路。


以上是对ChaTTS大模型在广播电视领域应用的详细解释和说明,旨在深化理解并完善论文内容。通过这些具体的功能描述和应用场景分析,希望能够为相关领域的研究者和开发者提供有益的参考和启示。

原创不易,欢迎点赞、关注、转发、收藏!!!

相关文章
|
11月前
|
搜索推荐 Python
使用Python自动化生成物业通知单
本文介绍如何使用Python结合Pandas和python-docx库自动化生成物业通知单。通过读取Excel数据并填充至Word模板,实现高效准确的通知单批量制作。包括环境准备、代码解析及效果展示,适用于物业管理场景。
291 14
|
11月前
|
人工智能 自然语言处理 算法
开源更新|语音生成大模型CosyVoice升级2.0版本
开源更新|语音生成大模型CosyVoice升级2.0版本
|
11月前
|
存储 小程序 Python
农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序
### 农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序 该程序通过`lunardate`库实现公历与农历的日期转换,支持闰月和跨年处理,用户输入农历节日名称后,可准确计算距离该节日还有多少天。功能包括农历节日查询、倒计时计算等。欢迎使用! (239字符)
683 86
|
资源调度 JavaScript 前端开发
「Vue3系列」Vue3起步/创建项目
在 Vue 3 中创建项目,通常使用 Vue CLI(命令行工具)来简化项目的初始化过程。Vue CLI 是一个强大的工具,它可以帮助你快速搭建 Vue.js 项目,并且内置了对 Vue Router、Vuex、CSS 预处理器、PWA 支持、单元测试等的集成。
788 1
|
11月前
|
机器学习/深度学习 安全 网络安全
网络安全词云图与技术浅谈
### 网络安全词云图与技术浅谈 本文介绍了通过词云图展示网络安全关键术语的方法,并探讨了构建现代网络安全体系的关键要素。词云图利用字体大小和颜色突出高频词汇,如恶意软件、防火墙、入侵检测系统等。文中提供了生成词云图的Python代码示例,包括安装依赖库和调整参数。此外,文章详细讨论了恶意软件防护、加密技术、身份验证、DDoS防御、社会工程学防范及威胁情报等核心技术,强调了多层次、多维度的安全策略的重要性。
430 11
网络安全词云图与技术浅谈
|
11月前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
311 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
10月前
|
安全 网络协议 Linux
结合 `nc` 工具利用笑脸漏洞(Smile Bug)攻击 Metasploitable2 Linux
本文介绍如何使用 `nc`(Netcat)工具结合笑脸漏洞(Smiley Bug)攻击 Metasploitable2 Linux 靶机。首先概述了 `nc` 的基本功能和高级用法,包括建立连接、监听端口、文件传输等操作。接着详细描述了笑脸漏洞的原理及其在网络攻防中的应用,展示了通过 `nc` 发送恶意输入检测漏洞的方法。最后结合 Python 脚本实现更复杂的攻击场景,并强调了合法性和环境隔离的重要性。
391 13
|
11月前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分到不同的工作表中。本文通过一个示例代码展示了如何生成一个包含总成绩表和三个班级表的Excel文件。代码首先创建了一个包含学生姓名、班级和各科成绩的数据框,然后按班级分组,将每个班级的数据分别写入不同的工作表。最后,生成的Excel文件将包含四个工作表,分别为总成绩表和三个班级的成绩表。
202 6
按条件将Excel文件拆分到不同的工作表
|
11月前
|
人工智能 并行计算 算法
谷歌量子计算机:开启计算新时代
谷歌量子计算机是现代信息技术的前沿成果,基于量子力学原理构建,具有超越经典计算机处理复杂问题的巨大潜力。谷歌通过研发“悬铃木”处理器等,实现了量子霸权,在量子化学模拟和优化问题求解等领域取得显著成就。尽管面临量子比特稳定性和纠错等挑战,谷歌持续创新,为新时代计算奠定基础。
301 16