Обновить Yandex SpechKit - как? Кто обновил\перешёл на v3, поделитесь опытом
Как на версии SpeechKit v1. Строка http-запроса к серверу:
https://tts.voicetech.yandex.net/generate?text=Озвучить текст&format=mp3&lang=ru-RU&speaker=jane&emotion=neutral&key=[здесь ваш ключ]
Вставлялось в плеер и всё работало и работает сейчас прекрасно.
Но! Но они создали ИИ и теперь ИИ говорит конечно же приятнее и ближе к человеческой речи.
И с подключением ИИ Yandex перешли сразу на версию 3.
В версии 3 указан формат такого рода:
HTTP-запрос:
GRPC tts.api.cloud.yandex.net: 443
Параметры в теле запроса:
{
"text": "Озвучить текст",
"hints": [
{
"speed": 1
},
{
"voice": "jane"
},
{
"role": "neutral"
}
]
}
И я не понимаю на каком языке это делать? Это явно не строка GET обращения к API, и не php. И что за GRPC такое?
Как это всё "завернуть" в строку GET-запроса не понимаю.
В документации описание прямой реализации не нашёл.
P.S. И с GRPC нет опыта работы. Это устанавливать дополнительно на сервер?
Ответы (1 шт):
В Get запрос сейчас генерацию не завернешь. Они предоставляют GRPC и REST API. Если с первым опыта нет, то со вторым должно быть понятнее. Документация здесь.
Что нужно сделать:
- Получить API-ключ. Думаю, у вас уже есть.
- Сформировать POST-запрос по этому URL:
https://tts.api.cloud.yandex.net/tts/v3/utteranceSynthesis
. - В Header к этому запросу указать
"Authorization": "Api-Key" <ваш_ключ>
. Подробнее здесь. - Тело запроса представляет из себя JSON. Полное описание здесь. Я писал на Python c использованием из библиотеки, поэтому подробно про содержание полей в теле запроса не расскажу. Но основная структура выглядит следующим образом:
{
"model": "string",
"hints": [
{
// `hints[]` includes only one of the fields `voice`, `audioTemplate`, `speed`, `volume`, `role`, `pitchShift`, `duration`
"voice": "string",
"audioTemplate": {
"audio": {
"audioSpec": {
// `hints[].audioTemplate.audio.audioSpec` includes only one of the fields `rawAudio`, `containerAudio`
"rawAudio": {
"audioEncoding": "string",
"sampleRateHertz": "string"
},
"containerAudio": {
"containerAudioType": "string"
},
// end of the list of possible fields`hints[].audioTemplate.audio.audioSpec`
},
"content": "string"
},
"textTemplate": {
"textTemplate": "string",
"variables": [
{
"variableName": "string",
"variableValue": "string"
}
]
},
"variables": [
{
"variableName": "string",
"variableStartMs": "string",
"variableLengthMs": "string"
}
]
},
"speed": "number",
"volume": "number",
"role": "string",
"pitchShift": "number",
"duration": {
"policy": "string",
"durationMs": "string"
},
// end of the list of possible fields`hints[]`
}
],
"outputAudioSpec": {
// `outputAudioSpec` includes only one of the fields `rawAudio`, `containerAudio`
"rawAudio": {
"audioEncoding": "string",
"sampleRateHertz": "string"
},
"containerAudio": {
"containerAudioType": "string"
},
// end of the list of possible fields`outputAudioSpec`
},
"loudnessNormalizationType": "string",
"unsafeMode": true,
// includes only one of the fields `text`, `textTemplate`
"text": "string",
"textTemplate": {
"textTemplate": "string",
"variables": [
{
"variableName": "string",
"variableValue": "string"
}
]
},
// end of the list of possible fields
}