Gemini 2.5 Flash TTS: преобразование текста в речь
curl --request POST \
--url https://api.highwayapi.ai/v3/gemini-2.5-flash-tts \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>' \
--data '
{
"contents": {
"role": "<string>",
"parts": {
"text": "<string>"
}
},
"generation_config": {
"temperature": 123,
"speech_config": {
"voice_config": {
"prebuilt_voice_config": {
"voice_name": "<string>"
}
},
"language_code": "<string>",
"multi_speaker_voice_config": {
"speaker_voice_configs": [
{
"speaker": "<string>",
"voice_config": {
"prebuilt_voice_config": {
"voice_name": "<string>"
}
}
}
]
}
}
}
}
'import requests
url = "https://api.highwayapi.ai/v3/gemini-2.5-flash-tts"
payload = {
"contents": {
"role": "<string>",
"parts": { "text": "<string>" }
},
"generation_config": {
"temperature": 123,
"speech_config": {
"voice_config": { "prebuilt_voice_config": { "voice_name": "<string>" } },
"language_code": "<string>",
"multi_speaker_voice_config": { "speaker_voice_configs": [
{
"speaker": "<string>",
"voice_config": { "prebuilt_voice_config": { "voice_name": "<string>" } }
}
] }
}
}
}
headers = {
"Content-Type": "<content-type>",
"Authorization": "<authorization>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': '<content-type>', Authorization: '<authorization>'},
body: JSON.stringify({
contents: {role: '<string>', parts: {text: '<string>'}},
generation_config: {
temperature: 123,
speech_config: {
voice_config: {prebuilt_voice_config: {voice_name: '<string>'}},
language_code: '<string>',
multi_speaker_voice_config: {
speaker_voice_configs: [
{
speaker: '<string>',
voice_config: {prebuilt_voice_config: {voice_name: '<string>'}}
}
]
}
}
}
})
};
fetch('https://api.highwayapi.ai/v3/gemini-2.5-flash-tts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.highwayapi.ai/v3/gemini-2.5-flash-tts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'contents' => [
'role' => '<string>',
'parts' => [
'text' => '<string>'
]
],
'generation_config' => [
'temperature' => 123,
'speech_config' => [
'voice_config' => [
'prebuilt_voice_config' => [
'voice_name' => '<string>'
]
],
'language_code' => '<string>',
'multi_speaker_voice_config' => [
'speaker_voice_configs' => [
[
'speaker' => '<string>',
'voice_config' => [
'prebuilt_voice_config' => [
'voice_name' => '<string>'
]
]
]
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.highwayapi.ai/v3/gemini-2.5-flash-tts"
payload := strings.NewReader("{\n \"contents\": {\n \"role\": \"<string>\",\n \"parts\": {\n \"text\": \"<string>\"\n }\n },\n \"generation_config\": {\n \"temperature\": 123,\n \"speech_config\": {\n \"voice_config\": {\n \"prebuilt_voice_config\": {\n \"voice_name\": \"<string>\"\n }\n },\n \"language_code\": \"<string>\",\n \"multi_speaker_voice_config\": {\n \"speaker_voice_configs\": [\n {\n \"speaker\": \"<string>\",\n \"voice_config\": {\n \"prebuilt_voice_config\": {\n \"voice_name\": \"<string>\"\n }\n }\n }\n ]\n }\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "<content-type>")
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.highwayapi.ai/v3/gemini-2.5-flash-tts")
.header("Content-Type", "<content-type>")
.header("Authorization", "<authorization>")
.body("{\n \"contents\": {\n \"role\": \"<string>\",\n \"parts\": {\n \"text\": \"<string>\"\n }\n },\n \"generation_config\": {\n \"temperature\": 123,\n \"speech_config\": {\n \"voice_config\": {\n \"prebuilt_voice_config\": {\n \"voice_name\": \"<string>\"\n }\n },\n \"language_code\": \"<string>\",\n \"multi_speaker_voice_config\": {\n \"speaker_voice_configs\": [\n {\n \"speaker\": \"<string>\",\n \"voice_config\": {\n \"prebuilt_voice_config\": {\n \"voice_name\": \"<string>\"\n }\n }\n }\n ]\n }\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.highwayapi.ai/v3/gemini-2.5-flash-tts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = '<content-type>'
request["Authorization"] = '<authorization>'
request.body = "{\n \"contents\": {\n \"role\": \"<string>\",\n \"parts\": {\n \"text\": \"<string>\"\n }\n },\n \"generation_config\": {\n \"temperature\": 123,\n \"speech_config\": {\n \"voice_config\": {\n \"prebuilt_voice_config\": {\n \"voice_name\": \"<string>\"\n }\n },\n \"language_code\": \"<string>\",\n \"multi_speaker_voice_config\": {\n \"speaker_voice_configs\": [\n {\n \"speaker\": \"<string>\",\n \"voice_config\": {\n \"prebuilt_voice_config\": {\n \"voice_name\": \"<string>\"\n }\n }\n }\n ]\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"audioContent": "<string>",
"usageMetadata": {
"totalTokenCount": 123,
"promptTokenCount": 123,
"candidatesTokenCount": 123
}
}Аудио
Gemini 2.5 Flash TTS: преобразование текста в речь
POST
/
v3
/
gemini-2.5-flash-tts
Gemini 2.5 Flash TTS: преобразование текста в речь
curl --request POST \
--url https://api.highwayapi.ai/v3/gemini-2.5-flash-tts \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>' \
--data '
{
"contents": {
"role": "<string>",
"parts": {
"text": "<string>"
}
},
"generation_config": {
"temperature": 123,
"speech_config": {
"voice_config": {
"prebuilt_voice_config": {
"voice_name": "<string>"
}
},
"language_code": "<string>",
"multi_speaker_voice_config": {
"speaker_voice_configs": [
{
"speaker": "<string>",
"voice_config": {
"prebuilt_voice_config": {
"voice_name": "<string>"
}
}
}
]
}
}
}
}
'import requests
url = "https://api.highwayapi.ai/v3/gemini-2.5-flash-tts"
payload = {
"contents": {
"role": "<string>",
"parts": { "text": "<string>" }
},
"generation_config": {
"temperature": 123,
"speech_config": {
"voice_config": { "prebuilt_voice_config": { "voice_name": "<string>" } },
"language_code": "<string>",
"multi_speaker_voice_config": { "speaker_voice_configs": [
{
"speaker": "<string>",
"voice_config": { "prebuilt_voice_config": { "voice_name": "<string>" } }
}
] }
}
}
}
headers = {
"Content-Type": "<content-type>",
"Authorization": "<authorization>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': '<content-type>', Authorization: '<authorization>'},
body: JSON.stringify({
contents: {role: '<string>', parts: {text: '<string>'}},
generation_config: {
temperature: 123,
speech_config: {
voice_config: {prebuilt_voice_config: {voice_name: '<string>'}},
language_code: '<string>',
multi_speaker_voice_config: {
speaker_voice_configs: [
{
speaker: '<string>',
voice_config: {prebuilt_voice_config: {voice_name: '<string>'}}
}
]
}
}
}
})
};
fetch('https://api.highwayapi.ai/v3/gemini-2.5-flash-tts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.highwayapi.ai/v3/gemini-2.5-flash-tts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'contents' => [
'role' => '<string>',
'parts' => [
'text' => '<string>'
]
],
'generation_config' => [
'temperature' => 123,
'speech_config' => [
'voice_config' => [
'prebuilt_voice_config' => [
'voice_name' => '<string>'
]
],
'language_code' => '<string>',
'multi_speaker_voice_config' => [
'speaker_voice_configs' => [
[
'speaker' => '<string>',
'voice_config' => [
'prebuilt_voice_config' => [
'voice_name' => '<string>'
]
]
]
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.highwayapi.ai/v3/gemini-2.5-flash-tts"
payload := strings.NewReader("{\n \"contents\": {\n \"role\": \"<string>\",\n \"parts\": {\n \"text\": \"<string>\"\n }\n },\n \"generation_config\": {\n \"temperature\": 123,\n \"speech_config\": {\n \"voice_config\": {\n \"prebuilt_voice_config\": {\n \"voice_name\": \"<string>\"\n }\n },\n \"language_code\": \"<string>\",\n \"multi_speaker_voice_config\": {\n \"speaker_voice_configs\": [\n {\n \"speaker\": \"<string>\",\n \"voice_config\": {\n \"prebuilt_voice_config\": {\n \"voice_name\": \"<string>\"\n }\n }\n }\n ]\n }\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "<content-type>")
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.highwayapi.ai/v3/gemini-2.5-flash-tts")
.header("Content-Type", "<content-type>")
.header("Authorization", "<authorization>")
.body("{\n \"contents\": {\n \"role\": \"<string>\",\n \"parts\": {\n \"text\": \"<string>\"\n }\n },\n \"generation_config\": {\n \"temperature\": 123,\n \"speech_config\": {\n \"voice_config\": {\n \"prebuilt_voice_config\": {\n \"voice_name\": \"<string>\"\n }\n },\n \"language_code\": \"<string>\",\n \"multi_speaker_voice_config\": {\n \"speaker_voice_configs\": [\n {\n \"speaker\": \"<string>\",\n \"voice_config\": {\n \"prebuilt_voice_config\": {\n \"voice_name\": \"<string>\"\n }\n }\n }\n ]\n }\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.highwayapi.ai/v3/gemini-2.5-flash-tts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = '<content-type>'
request["Authorization"] = '<authorization>'
request.body = "{\n \"contents\": {\n \"role\": \"<string>\",\n \"parts\": {\n \"text\": \"<string>\"\n }\n },\n \"generation_config\": {\n \"temperature\": 123,\n \"speech_config\": {\n \"voice_config\": {\n \"prebuilt_voice_config\": {\n \"voice_name\": \"<string>\"\n }\n },\n \"language_code\": \"<string>\",\n \"multi_speaker_voice_config\": {\n \"speaker_voice_configs\": [\n {\n \"speaker\": \"<string>\",\n \"voice_config\": {\n \"prebuilt_voice_config\": {\n \"voice_name\": \"<string>\"\n }\n }\n }\n ]\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"audioContent": "<string>",
"usageMetadata": {
"totalTokenCount": 123,
"promptTokenCount": 123,
"candidatesTokenCount": 123
}
}Gemini 2.5 Flash TTS на основе интерфейса Google Vertex AI generateContent. Поддерживает синхронный и потоковый синтез речи для одного или нескольких говорящих, позволяя точно управлять стилем, акцентом, ритмом, интонацией и эмоциональной выразительностью с помощью подсказок на естественном языке. Поле contents поддерживает максимум 8000 байт, максимальная длительность выходного аудио — около 655 секунд. Vertex AI выводит аудио в формате LINEAR16 PCM (24kHz, моно) без WAV-заголовка. Для других аудиоформатов клиент должен выполнить преобразование самостоятельно.
Заголовки запроса
string
обязательно
Перечисляемое значение:
application/jsonstring
обязательно
Формат Bearer-аутентификации: Bearer {{API 密钥}}.
Тело запроса
object
обязательно
Скрыть properties
Скрыть properties
string
по умолчанию:"user"
обязательно
Роль, фиксированное значение — userДопустимое значение:
userobject
обязательно
Скрыть properties
Скрыть properties
string
обязательно
Текстовое содержимое, которое нужно синтезировать в речь. Vertex AI API объединяет подсказку и текст в одном поле в формате ’: ’, например ‘Say the following in a curious way: OK, so… tell me about this AI thing.’. Общий размер — до 8000 байт; аудио длительностью более 655 секунд будет обрезано. Поддерживаются встроенные теги разметки: [sigh], [laughing], [uhm], [sarcasm], [robotic], [shouting], [whispering], [extremely fast], [short pause], [medium pause], [long pause]Ограничение длины: 0 - 8000
object
обязательно
Скрыть properties
Скрыть properties
number
по умолчанию:2
Параметр температуры, управляющий случайностью и креативностью генерации речи. Чем выше значение, тем более креативным и разнообразным будет результат; чем ниже значение, тем более предсказуемым и сфокусированным он будет. Допустимый диапазон: (0.0, 2.0], рекомендуемое значение — 2.0Диапазон значений: [0, 2]
object
обязательно
Скрыть properties
Скрыть properties
object
Конфигурация голоса для одного говорящего. Используется один из двух вариантов: voice_config или multi_speaker_voice_config
Скрыть properties
Скрыть properties
object
Скрыть properties
Скрыть properties
string
Название предустановленного голоса (без учета регистра). Доступно 30 голосов (как мужские, так и женские)Возможные значения:
Achernar, Achird, Algenib, Algieba, Alnilam, Aoede, Autonoe, Callirrhoe, Charon, Despina, Enceladus, Erinome, Fenrir, Gacrux, Iapetus, Kore, Laomedeia, Leda, Orus, Pulcherrima, Puck, Rasalgethi, Sadachbia, Sadaltager, Schedar, Sulafat, Umbriel, Vindemiatrix, Zephyr, Zubenelgenubistring
Код языка (формат BCP-47, без учета регистра). Необязательное поле; если не передано, язык будет автоматически определен по входному тексту. Языки GA: ar-EG, bn-BD, nl-NL, en-IN, en-US, fr-FR, de-DE, hi-IN, id-ID, it-IT, ja-JP, ko-KR, mr-IN, pl-PL, pt-BR, ro-RO, ru-RU, es-ES, ta-IN, te-IN, th-TH, tr-TR, uk-UA, vi-VN. Языки Preview включают cmn-CN (китайский путунхуа) и еще 63 языкаВозможные значения:
af-ZA, am-ET, ar-001, ar-EG, az-AZ, be-BY, bg-BG, bn-BD, ca-ES, ceb-PH, cmn-CN, cmn-TW, cs-CZ, da-DK, de-DE, el-GR, en-AU, en-GB, en-IN, en-US, es-419, es-ES, es-MX, et-EE, eu-ES, fa-IR, fi-FI, fil-PH, fr-CA, fr-FR, gl-ES, gu-IN, he-IL, hi-IN, hr-HR, ht-HT, hu-HU, hy-AM, id-ID, is-IS, it-IT, ja-JP, jv-JV, ka-GE, kn-IN, ko-KR, kok-IN, la-VA, lb-LU, lo-LA, lt-LT, lv-LV, mai-IN, mg-MG, mk-MK, ml-IN, mn-MN, mr-IN, ms-MY, my-MM, nb-NO, ne-NP, nl-NL, nn-NO, or-IN, pa-IN, pl-PL, ps-AF, pt-BR, pt-PT, ro-RO, ru-RU, sd-IN, si-LK, sk-SK, sl-SI, sq-AL, sr-RS, sv-SE, sw-KE, ta-IN, te-IN, th-TH, tr-TR, uk-UA, ur-PK, vi-VNobject
Конфигурация голосов для нескольких говорящих. Используется один из двух вариантов: voice_config или multi_speaker_voice_config. Примечание: gemini-2.5-flash-lite-preview-tts не поддерживает синтез с несколькими говорящими
Скрыть properties
Скрыть properties
object[]
Список конфигураций голосов говорящих
Скрыть properties
Скрыть properties
string
обязательно
Псевдоним говорящего; должен состоять только из буквенно-цифровых символов и не содержать пробелов. Должен совпадать с идентификатором говорящего в contents.parts.text
object
обязательно
Скрыть properties
Скрыть properties
object
Скрыть properties
Скрыть properties
string
Название предустановленного голоса (без учета регистра). Доступно 30 голосов (как мужские, так и женские)Возможные значения:
Achernar, Achird, Algenib, Algieba, Alnilam, Aoede, Autonoe, Callirrhoe, Charon, Despina, Enceladus, Erinome, Fenrir, Gacrux, Iapetus, Kore, Laomedeia, Leda, Orus, Pulcherrima, Puck, Rasalgethi, Sadachbia, Sadaltager, Schedar, Sulafat, Umbriel, Vindemiatrix, Zephyr, ZubenelgenubiИнформация об ответе
string
Аудиоконтент в кодировке Base64. Формат — LINEAR16 PCM (24kHz, моно, 16-bit signed little-endian), без WAV-заголовка. Клиент может выполнить преобразование с помощью ffmpeg: ffmpeg -f s16le -ar 24k -ac 1 -i input.raw output.wav
⌘I