目录
讯飞开放平台(iFLYTEK Open Platform)提供语音合成服务(Text-to-Speech, TTS),可将文本转换为高质量的MP3音频文件。以下是逐步操作指南,帮助您快速实现该功能。整个过程基于官方API文档,确保可靠性和易用性。
1. 准备工作:注册和获取API凭证
- 步骤1: 注册讯飞开放平台账号
- 访问 讯飞开放平台官网
- 注册账号(右上角有个立即注册)
- 注册完登录
- 登录后,进入右上角“控制台”
- 在上方点击立即实名认证(最好进行实名认证,部分功能需认证)
- 步骤2: 创建应用并获取凭证
- 之后进入“控制台” > “我的应用” > “创建新应用”。
- 填写应用信息。
- 创建后,进入应用详情页如此图:
-
在左边栏选择语音合成,再在下方选中在线语音合成,最后在右上方可以看到
Websocket服务接口认证信息下方APPID
(应用ID)API Secret
( API密钥)API Key
(API密钥)
- 记住这三个,后续代码中需要更改为自己的
APPID,API Secret,API Key
。
- 之后进入“控制台” > “我的应用” > “创建新应用”。
- 访问 讯飞开放平台官网
2. 调用语音合成API生成MP3
讯飞提供RESTful API接口。您可以使用文本内容,并生成MP3格式的音频。
在自己新建一个文件夹或者选择一个文件夹,可以选择用相关软件打开(我这是使用Visual Studio Code打开)( VScode设置中文和python环境在文章末尾)
选择上方文件然后选打开文件夹选刚刚的文件夹(也可以按Ctrl+K然后再按Ctrl+O键)
如果弹出这个界面选择是,我信任此作者(如果是英文的就是选yes)
然后把鼠标移到左边你所选择的文件夹这一行会有小图标显示选择这个亮着的(这个是新建文件的意思)创建一个py文件
之后选择上方3个.选择新建终端
然后输入下方代码安装依赖
# pip install websockets
然后将代码放入,以下是Python代码示例(记得更改里面的#提示更改自己的)
import websockets
import asyncio
import datetime
import hashlib
import base64
import hmac
import json
from urllib.parse import urlencode
# 配置参数区(需替换为您的实际认证信息)
APPID = "your_app_id" # 替换为您的讯飞APPID
APISecret = "your_api_secret" # 替换为您的APISecret
APIKey = "your_api_key" # 替换为您的APIKey
HOST = "tts-api.xfyun.cn"
PATH = "/v2/tts"
class XunfeiTTS:
def __init__(self, app_id, api_key, api_secret):
self.APPID = app_id
self.APIKey = api_key
self.APISecret = api_secret
def _create_ws_param(self, text, voice="xiaoyan"):
business_args = {
"aue": "lame",
"sfl": 1,
"auf": "audio/L16;rate=16000",
"vcn": voice,
"speed": 50,
"volume": 50,
"pitch": 50,
"tte": "utf8"
}
data = {
"status": 2,
"text": base64.b64encode(text.encode()).decode()
}
return {
"common": {"app_id": self.APPID},
"business": business_args,
"data": data
}
def _get_auth_url(self):
date = datetime.datetime.now().strftime('%a, %d %b %Y %H:%M:%S GMT')
signature_origin = f"host: {HOST}\ndate: {date}\nGET {PATH} HTTP/1.1"
signature_sha = hmac.new(
self.APISecret.encode(),
signature_origin.encode(),
digestmod=hashlib.sha256
).digest()
signature = base64.b64encode(signature_sha).decode()
authorization = base64.b64encode(
f'api_key="{self.APIKey}", algorithm="hmac-sha256", headers="host date request-line", signature="{signature}"'.encode()
).decode()
return f'wss://{HOST}{PATH}?{urlencode({"authorization": authorization, "date": date, "host": HOST})}'
async def synthesize(self, text, output_file="output.mp3"):
auth_url = self._get_auth_url()
ws_param = self._create_ws_param(text)
async with websockets.connect(auth_url) as ws:
await ws.send(json.dumps(ws_param))
with open(output_file, 'wb') as f:
while True:
try:
resp = json.loads(await ws.recv())
if resp.get('code') != 0:
raise Exception(f"Error {resp.get('code')}: {resp.get('message')}")
if audio := resp.get('data', {}).get('audio'):
f.write(base64.b64decode(audio))
if resp.get('data', {}).get('status') == 2:
break
except websockets.ConnectionClosed:
break
return output_file
# 使用示例
async def main():
tts = XunfeiTTS(APPID, APIKey, APISecret)
await tts.synthesize("你好,这是一个语音合成测试", "test.mp3")#你好,这是一个语音合成测试换成自己的文本内容,后面test可以换成自己所想的MP3文件名
if __name__ == "__main__":
asyncio.run(main())
3. 运行和测试
- 将上述代码保存为Python文件(我的文件名称为1.py)。检查代码中是否为自己的
APPID,API Secret,API Key
。 - 替换代码中的
APP_ID
、API_KEY
和API_SECRET
为您的实际凭证。 - 在终端运行脚本:
python 1.py
。(python 自己的文件名称) - 成功后,当前目录会生成
test.mp3
文件,您可直接播放。
4. 注意事项
- 免费额度: 讯飞提供每日免费调用次数(新用户约500次),还要额外的可以点击剩余服务量后面的购买服务量产品价格的免费试用包,上方的个人免费套餐中在线语音合成的立即领取。
- 文本限制: 单次请求文本长度有限制(通常500字以内),长文本需分段处理。
- 音色选择: 可通过
voice_name
参数更换发音人,详细可以参考官方文档。 - 错误处理: API可能返回错误码(如鉴权失败),代码中已包含基本处理,建议添加重试逻辑。
- 官方资源: 更多参数和SDK支持,请查阅 讯飞语音合成API文档。
通过以上步骤,您可以轻松生成MP3音频。如果遇到问题,优先检查凭证是否正确或查阅官方支持。
VScode设置
我的设置了中文如果想弄可以在点击左边有4个小方块的地方在搜索栏中输入chinese有一个地球仪后方有一个蓝色的Install按钮点击安装即可
没有python环境的可以在vscode中安装Python插件,注意名称是Python的(步骤和之前中文设置一致)