python将英文英语单词转为语音Mp3文件gtts扩展
开始
# 安装 pip install gTTS
# 需要网络才能创建mp3文件
from gtts import gTTS
import os
import mysql.connector
from mysql.connector import Error
def fetch_data():
try:
# 连接到 MySQL 数据库
connection = mysql.connector.connect(
host='localhost', # 数据库主机地址
user='root', # 数据库用户名
password='123456', # 数据库密码
database='fa' # 数据库名称(根据实际情况修改)
)
if connection.is_connected():
print("Successfully connected to the database")
# 创建游标对象
cursor = connection.cursor(dictionary=True) # 使用 dictionary=True 返回字典格式的结果
# 执行 SQL 查询
query = "SELECT id, title_en FROM fa_xgn_englishdetail"
cursor.execute(query)
# 获取查询结果
records = cursor.fetchall()
# 循环输出字段 id 和 title_en
for row in records:
print(f"ID: {row['id']}, Title (EN): {row['title_en']}")
mp3_url = text_to_speech(row['title_en'], row['id'])
if mp3_url is None:
print("Failed to generate mp3 file")
continue
# 更新 mp3_url字段
update_query = "UPDATE fa_xgn_englishdetail SET mp3_url = %s WHERE id = %s"
cursor.execute(update_query, (mp3_url, row['id']))
connection.commit()
# break
except Error as e:
print(f"Error: {e}")
finally:
# 关闭游标和连接
if connection.is_connected():
cursor.close()
connection.close()
print("Database connection is closed")
def text_to_speech(text, mp3_name):
try:
# 创建 gTTS 对象,指定语言为英语
tts = gTTS(text=text, lang='en', slow=True)
# 保存语音到文件
mp3_url = f"mp3/{mp3_name}.mp3"
tts.save(mp3_url)
# os.system("start speech.mp3")
return mp3_url
except Exception as e:
print(f"Error: {e}")
return None
if __name__ == "__main__":
fetch_data()
这个音乐更自然些:
import asyncio
import edge_tts
from edge_tts import VoicesManager
TEXT = "Hello, welcome to the Python text to speech tutorial."
VOICE = "en-US-AriaNeural"
OUTPUT_FILE = "output1.mp3"
async def amain1() -> None:
communicate = edge_tts.Communicate(TEXT, VOICE)
await communicate.save(OUTPUT_FILE)
# 语音参数
TEXT = "Hello, welcome to the Python text to speech tutorial."
VOICE = "en-US-AriaNeural"
OUTPUT_FILE = "output3.mp3"
async def amain2() -> None:
communicate = edge_tts.Communicate(TEXT, VOICE, rate="+10%", volume="+10%", pitch="+10Hz")
await communicate.save(OUTPUT_FILE)
if __name__ == "__main__":
asyncio.run(amain2())
结束