Синтез речи в формате OggOpus с помощью API v1
С помощью API v1 можно синтезировать речь из текста в TTS-разметке в файл формата OggOpus.
В примере заданы следующие параметры синтеза:
Аутентификация происходит от имени аккаунта на Яндексе или федеративного аккаунта с помощью IAM-токена. Если вы используете сервисный аккаунт, передавать в запросе идентификатор каталога не нужно. Подробнее об аутентификации в API SpeechKit см. Аутентификация в API SpeechKit.
Отправьте запрос на преобразование текста в речь:
read -r -d '' TEXT << EOM
> Я Яндекс Спичк+ит.
> Я могу превратить любой текст в речь.
> Теперь и в+ы — можете!
EOM
export FOLDER_ID=<идентификатор_каталога>
export IAM_TOKEN=<IAM-токен>
curl \
--request POST \
--header "Authorization: Bearer ${IAM_TOKEN}" \
--data-urlencode "text=${TEXT}" \
--data "lang=ru-RU&voice=filipp&folderId=${FOLDER_ID}" \
"https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize" > speech.ogg
Где:
TEXT
— текст в TTS-разметке, который нужно синтезировать.FOLDER_ID
— идентификатор каталога.IAM_TOKEN
— IAM-токен.lang
— язык текста.voice
— голос для синтеза речи.
Синтезированная речь будет записана в файл speech.ogg
в папке, из которой вы отправляли запрос.
Отправьте запрос на преобразование текста в речь:
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;
namespace TTS
{
class Program
{
static void Main()
{
Tts().GetAwaiter().GetResult();
}
static async Task Tts()
{
const string iamToken = "<IAM-токен>";
const string folderId = "<идентификатор_каталога>";
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + iamToken);
var values = new Dictionary<string, string>
{
{ "text", "Я Яндекс Спичк+ит. Я могу превратить любой текст в речь. Теперь и в+ы — можете!" },
{ "lang", "ru-RU" },
{ "voice", "filipp" },
{ "folderId", folderId }
};
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync("https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize", content);
var responseBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("speech.ogg", responseBytes);
}
}
}
Где:
iamToken
— IAM-токен.folderId
— идентификатор каталога.text
— текст в TTS-разметке, который нужно синтезировать.lang
— язык текста.voice
— голос для синтеза речи.
Синтезированная речь будет записана в файл speech.ogg
в папке, из которой вы отправляли запрос.
-
Создайте файл, например
test.py
, и добавьте в него следующий код:import argparse import requests def synthesize(folder_id, iam_token, text): url = 'https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize' headers = { 'Authorization': 'Bearer ' + iam_token, } data = { 'text': text, 'lang': 'ru-RU', 'voice': 'filipp', 'folderId': folder_id } with requests.post(url, headers=headers, data=data, stream=True) as resp: if resp.status_code != 200: raise RuntimeError("Invalid response received: code: %d, message: %s" % (resp.status_code, resp.text)) for chunk in resp.iter_content(chunk_size=None): yield chunk if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--token", required=True, help="IAM token") parser.add_argument("--folder_id", required=True, help="Folder id") parser.add_argument("--text", required=True, help="Text for synthesize") parser.add_argument("--output", required=True, help="Output file name") args = parser.parse_args() with open(args.output, "wb") as f: for audio_content in synthesize(args.folder_id, args.token, args.text): f.write(audio_content)
Где:
-
Выполните созданный файл:
export FOLDER_ID=<идентификатор_каталога> export IAM_TOKEN=<IAM-токен> python3 test.py --token ${IAM_TOKEN} \ --folder_id ${FOLDER_ID} \ --output speech.ogg \ --text "Я Яндекс Спичк+ит. Я могу превратить любой текст в речь. Теперь и в+ы — можете!"
Где:
FOLDER_ID
— идентификатор каталога.IAM_TOKEN
— IAM-токен.--output
— имя файла для записи аудио.--text
— текст в TTS-разметке, который нужно синтезировать.
Синтезированная речь будет записана в файл
speech.ogg
в папке, из которой вы выполняли файл.
Отправьте запрос на преобразование текста в речь:
<?php
$token = '<IAM-токен>'; # Укажите IAM-токен.
$folderId = "<идентификатор_каталога>"; # Укажите идентификатор каталога.
$url = "https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize";
$headers = ['Authorization: Bearer ' . $token];
$post = array(
'text' => "Я Яндекс Спичк+ит. Я могу превратить любой текст в речь. Теперь и в+ы — можете!",
'folderId' => $folderId,
'lang' => 'ru-RU',
'voice' => 'filipp');
$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_HEADER, false);
if ($post !== false) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
if (curl_errno($ch)) {
print "Error: " . curl_error($ch);
}
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) != 200) {
$decodedResponse = json_decode($response, true);
echo "Error code: " . $decodedResponse["error_code"] . "\r\n";
echo "Error message: " . $decodedResponse["error_message"] . "\r\n";
} else {
file_put_contents("speech.ogg", $response);
}
curl_close($ch);
Где:
token
— IAM-токен.folderId
— идентификатор каталога.text
— текст в TTS-разметке, который нужно синтезировать.lang
— язык текста.voice
— голос для синтеза речи.
Синтезированная речь будет записана в файл speech.ogg
в папке, из которой вы отправляли запрос.
Установите необходимые зависимости:
npm install --save axios form-data
Отправьте запрос на преобразование текста в речь:
import FormData from 'form-data';
import axios from 'axios';
import fs from 'node:fs';
const IAM_TOKEN = '<IAM_TOKEN>';
const FOLDER_ID = '<FOLDER_ID>';
const formData = new FormData();
formData.append('voice', 'filipp');
formData.append('text', 'Я Яндекс Спичк+ит. Я могу превратить любой текст в речь. Теперь и в+ы — можете!');
formData.append('lang', 'ru-RU');
formData.append('folderId', FOLDER_ID);
const headers = {
Authorization: `Bearer ${IAM_TOKEN}`,
...formData.getHeaders(),
};
axios
.post('https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize', formData, {
headers,
responseType: 'arraybuffer'
})
.then(response => fs.writeFileSync('speech.ogg', response.data));
Где:
IAM_TOKEN
— IAM-токен.FOLDER_ID
— идентификатор каталога.text
— текст в TTS-разметке, который нужно синтезировать.lang
— язык текста.voice
— голос для синтеза речи.
Синтезированная речь будет записана в файл speech.ogg
в папке, из которой вы отправляли запрос.