Skip to content

Gemini系列 语音生成模型(TTS) API 文档

Gemini API 可以使用原生文字转语音 (TTS) 生成功能将文本输入转换为单人或多人音频。文字转语音 (TTS) 生成是可控的,这意味着您可以使用自然语言来构建互动,并指导音频的风格、口音、节奏和语气。

TTS 功能不同于通过 Live API 提供的语音生成功能,后者专为交互式非结构化音频以及多模态输入和输出而设计。虽然 Live API 在动态对话上下文中表现出色,但通过 Gemini API 实现的 TTS 专门针对需要精确朗读文本并对风格和声音进行精细控制的场景,例如播客或有声读物生成。

请求地址

想要更换模型在url中替换名称就可以。

https://www.dmxapi.cn/v1beta/models/gemini-2.5-pro-preview-tts:generateContent"

🌻模型名称

gemini-2.5-pro-preview-ttsgemini-2.5-flash-preview-tts

🚀文字转单人语音 示例代码

python
"""
================================================================================
Gemini 2.5 Pro Preview TTS - 单人语音合成
================================================================================

【功能说明】
    调用 Google Gemini TTS API 将文本转换为自然语音

【使用模型】
    gemini-2.5-pro-preview-tts(预览版专业模型)

【输出格式】
    WAV 音频文件(16位 PCM,24kHz 采样率,单声道)
    文件名格式:out_YYYYMMDD_HHMMSS.wav

【依赖库】
    - requests:发送 HTTP 请求
    - base64:解码音频数据
    - wave:生成 WAV 文件
    - datetime:生成时间戳

【可用声音】
    Aoede, Charon, Fenrir, Kore, Puck, Orbit, Orus, Trochilidae, Zephyr

【使用方法】
    1. 修改 text 字段为你想要转换的文本
    2. 修改 voiceName 选择喜欢的声音
    3. 运行脚本,音频将保存到当前目录

================================================================================
"""

import requests
import base64
import wave
from datetime import datetime

# ================================================================================
# API 配置
# ================================================================================
# 接口地址(使用代理服务)
url = "https://www.dmxapi.cn/v1beta/models/gemini-2.5-pro-preview-tts:generateContent"

# API 密钥(请妥善保管,不要泄露)
api_key = "sk-**************************************"

# 请求头
headers = {
    "x-goog-api-key": api_key,      # API 认证密钥
    "Content-Type": "application/json"  # 请求体格式
}

# ================================================================================
# 请求数据
# ================================================================================
data = {
    # 输入内容
    "contents": [{
        "parts": [{
            # 要转换为语音的文本
            # 支持多种语言,可以添加情感指令如 "Say cheerfully:"
            "text": "Say cheerfully: Have a wonderful day!"
        }]
    }],

    # 生成配置
    "generationConfig": {
        # 响应类型:AUDIO 表示返回音频
        "responseModalities": ["AUDIO"],

        # 语音配置
        "speechConfig": {
            "voiceConfig": {
                "prebuiltVoiceConfig": {
                    # 预置声音名称
                    # 可选:Aoede, Charon, Fenrir, Kore, Puck, Orbit, Orus, Trochilidae, Zephyr
                    "voiceName": "Kore"
                }
            }
        }
    }
}

# ================================================================================
# 发送请求
# ================================================================================
print("正在请求 API...")
response = requests.post(url, headers=headers, json=data)
result = response.json()

# ================================================================================
# 错误处理
# ================================================================================
# 检查 API 是否返回错误
if "error" in result:
    print("=" * 50)
    print("API 错误:")
    print(f"  错误码: {result['error'].get('code', '未知')}")
    print(f"  错误信息: {result['error'].get('message', '未知')}")
    print("=" * 50)
    exit(1)

# 检查响应格式是否正确
if "candidates" not in result:
    print("=" * 50)
    print("响应格式异常,完整响应内容:")
    print(result)
    print("=" * 50)
    exit(1)

# ================================================================================
# 解析并保存音频
# ================================================================================
print("正在解析音频数据...")

# 从响应中提取 Base64 编码的音频数据
audio_data = result["candidates"][0]["content"]["parts"][0]["inlineData"]["data"]

# 将 Base64 解码为原始字节
audio_bytes = base64.b64decode(audio_data)

# 生成带时间戳的文件名,避免覆盖
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"out_{timestamp}.wav"

# 保存为 WAV 格式音频文件
print("正在保存音频文件...")
with wave.open(filename, "wb") as wav_file:
    wav_file.setnchannels(1)        # 声道数:1(单声道)
    wav_file.setsampwidth(2)        # 采样宽度:2 字节(16 位)
    wav_file.setframerate(24000)    # 采样率:24000 Hz
    wav_file.writeframes(audio_bytes)

# ================================================================================
# 完成提示
# ================================================================================
print("=" * 50)
print(f"音频已成功保存为: {filename}")
print(f"音频时长约: {len(audio_bytes) / (24000 * 2):.2f} 秒")
print("=" * 50)

🐯返回示例

json
正在请求 API...
正在解析音频数据...
正在保存音频文件...
==================================================
音频已成功保存为: out_20260115_221023.wav
音频时长约: 2.41
==================================================

🚗文字转双人语音 示例代码

python
"""
================================================================================
Gemini 2.5 Pro Preview TTS - 双人对话语音合成
================================================================================

【功能说明】
    调用 Google Gemini TTS API 将多人对话文本转换为自然语音
    支持为不同说话人配置不同的声音,实现逼真的对话效果

【使用模型】
    gemini-2.5-pro-preview-tts(预览版专业模型)

【输出格式】
    WAV 音频文件(16位 PCM,24kHz 采样率,单声道)
    文件名格式:out_YYYYMMDD_HHMMSS.wav

【依赖库】
    - requests:发送 HTTP 请求
    - base64:解码音频数据
    - wave:生成 WAV 文件
    - datetime:生成时间戳

【可用声音】
    Aoede, Charon, Fenrir, Kore, Puck, Orbit, Orus, Trochilidae, Zephyr

【使用方法】
    1. 修改 text 字段,按格式编写对话内容:
       "TTS the following conversation between 角色A and 角色B:
        角色A: 对话内容
        角色B: 对话内容"
    2. 在 speakerVoiceConfigs 中为每个角色配置声音
    3. 运行脚本,音频将保存到当前目录

【与单人版的区别】
    - 使用 multiSpeakerVoiceConfig 替代 voiceConfig
    - 可以为每个说话人单独指定声音
    - 文本需要标注说话人名称

================================================================================
"""

import requests
import base64
import wave
from datetime import datetime

# ================================================================================
# API 配置
# ================================================================================
# 接口地址(使用代理服务)
url = "https://www.dmxapi.cn/v1beta/models/gemini-2.5-pro-preview-tts:generateContent"

# API 密钥(请妥善保管,不要泄露)
api_key = "sk-***********************************************"

# 请求头
headers = {
    "x-goog-api-key": api_key,          # API 认证密钥
    "Content-Type": "application/json"  # 请求体格式
}

# ================================================================================
# 请求数据(双人对话)
# ================================================================================
data = {
    # 输入内容
    "contents": [{
        "parts": [{
            # 对话文本格式:
            # 1. 首先声明对话参与者:"TTS the following conversation between A and B:"
            # 2. 然后按 "角色名: 对话内容" 的格式编写对话
            "text": """TTS the following conversation between Joe and Jane:
                Joe: Hows it going today Jane?
                Jane: Not too bad, how about you?"""
        }]
    }],

    # 生成配置
    "generationConfig": {
        # 响应类型:AUDIO 表示返回音频
        "responseModalities": ["AUDIO"],

        # 语音配置(多人模式)
        "speechConfig": {
            # 多说话人配置
            "multiSpeakerVoiceConfig": {
                # 每个说话人的声音配置列表
                "speakerVoiceConfigs": [
                    {
                        # 第一个说话人
                        "speaker": "Joe",           # 说话人名称(需与文本中的名称一致)
                        "voiceConfig": {
                            "prebuiltVoiceConfig": {
                                "voiceName": "Kore"  # Joe 使用 Kore 声音
                            }
                        }
                    },
                    {
                        # 第二个说话人
                        "speaker": "Jane",          # 说话人名称(需与文本中的名称一致)
                        "voiceConfig": {
                            "prebuiltVoiceConfig": {
                                "voiceName": "Puck"  # Jane 使用 Puck 声音
                            }
                        }
                    }
                ]
            }
        }
    }
}

# ================================================================================
# 发送请求
# ================================================================================
print("正在请求 API...")
response = requests.post(url, headers=headers, json=data)
result = response.json()

# ================================================================================
# 错误处理
# ================================================================================
# 检查 API 是否返回错误
if "error" in result:
    print("=" * 50)
    print("API 错误:")
    print(f"  错误码: {result['error'].get('code', '未知')}")
    print(f"  错误信息: {result['error'].get('message', '未知')}")
    print("=" * 50)
    exit(1)

# 检查响应格式是否正确
if "candidates" not in result:
    print("=" * 50)
    print("响应格式异常,完整响应内容:")
    print(result)
    print("=" * 50)
    exit(1)

# ================================================================================
# 解析并保存音频
# ================================================================================
print("正在解析音频数据...")

# 从响应中提取 Base64 编码的音频数据
audio_data = result["candidates"][0]["content"]["parts"][0]["inlineData"]["data"]

# 将 Base64 解码为原始字节
audio_bytes = base64.b64decode(audio_data)

# 生成带时间戳的文件名,避免覆盖
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"out_{timestamp}.wav"

# 保存为 WAV 格式音频文件
print("正在保存音频文件...")
with wave.open(filename, "wb") as wav_file:
    wav_file.setnchannels(1)        # 声道数:1(单声道)
    wav_file.setsampwidth(2)        # 采样宽度:2 字节(16 位)
    wav_file.setframerate(24000)    # 采样率:24000 Hz
    wav_file.writeframes(audio_bytes)

# ================================================================================
# 完成提示
# ================================================================================
print("=" * 50)
print(f"音频已成功保存为: {filename}")
print(f"音频时长约: {len(audio_bytes) / (24000 * 2):.2f} 秒")
print("=" * 50)

🐶返回示例

json
正在请求 API...
正在解析音频数据...
正在保存音频文件...
==================================================
音频已成功保存为: out_20260115_221307.wav
音频时长约: 3.53
==================================================

🚢通过提示控制说话风格

您可以使用自然语言提示来控制单人或多人 TTS 的风格、语气、口音和节奏。 例如,在单音箱提示中,您可以说:

python
Say in an spooky whisper:
"By the pricking of my thumbs...
Something wicked this way comes"

在多位发言者的提示中,为模型提供每位发言者的姓名和相应的转写内容。您还可以单独为每个音箱提供指导:

python
Make Speaker1 sound tired and bored, and Speaker2 sound excited and happy:

Speaker1: So... what's on the agenda today?
Speaker2: You're never going to guess!

🥊语音选项

TTS 模型在 voice_name 字段中支持以下 30 种语音选项:

语音名称风格特点语音名称风格特点
Zephyr明亮Puck欢快
Charon信息丰富KoreFirm (坚定)
FenrirExcitable (兴奋)Leda青春
Orus公司AoedeBreezy (轻快)
Callirrhoe轻松Autonoe明亮
Enceladus气声Iapetus清晰
Umbriel轻松自在Algieba平滑
Despina平滑Erinome清除
AlgenibGravelly (沙哑)Rasalgethi信息丰富
Laomedeia欢快Achernar
AlnilamFirm (坚定)SchedarEven (平稳)
Gacrux成熟Pulcherrima直率
Achird友好Zubenelgenubi随意
Vindemiatrix温柔Sadachbia活泼
Sadaltager知识渊博Sulafat偏高

🎉 支持的语言

TTS 模型会自动检测输入语言。它们支持以下 24 种语言:

语言BCP-47 代码语言BCP-47 代码
阿拉伯语(埃及语)ar-EG德语(德国)de-DE
英语(美国)en-US西班牙语(美国)es-US
法语(法国)fr-FR印地语(印度)hi-IN
印度尼西亚语(印度尼西亚)id-ID意大利语(意大利)it-IT
日语(日本)ja-JP韩语(韩国)ko-KR
葡萄牙语(巴西)pt-BR俄语(俄罗斯)ru-RU
荷兰语(荷兰)nl-NL波兰语(波兰)pl-PL
泰语(泰国)th-TH土耳其语(土耳其)tr-TR
越南语(越南)vi-VN罗马尼亚语(罗马尼亚)ro-RO
乌克兰语(乌克兰)uk-UA孟加拉语(孟加拉)bn-BD
英语(印度)en-IN 和 hi-IN 套装马拉地语(印度)mr-IN
泰米尔语(印度)ta-IN泰卢固语(印度)te-IN

© 2025 DMXAPI gemini-2.5-pro-preview-tts 语音生成

一个 Key 用全球大模型