Skip to content

Instantly share code, notes, and snippets.

@antirek
Created July 19, 2019 10:33
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save antirek/8f81097bef058b258248960ed40a6716 to your computer and use it in GitHub Desktop.
Save antirek/8f81097bef058b258248960ed40a6716 to your computer and use it in GitHub Desktop.
Yandex Cloud SpeechKit (TTS) Example on Node.js - Пример работы с API технологии синтеза речи Yandex Cloud SpeechKit
const fetch = require('node-fetch');
const api_key = 'API_KEY';
const { URLSearchParams } = require('url');
const fs = require('fs');
const params = new URLSearchParams();
const text = 'Добрый день, у нас новая акция! Пицца Добряк сегодня за полцены, закажите по телефону 222. Уже ждем вашего заказа :) '
params.append('text', text);
params.append('voice', 'zahar');
params.append('emotion', 'good');
params.append('lang', 'ru-RU');
params.append('speed', '1.0');
params.append('format', 'oggopus');
fetch('https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize', {
method: 'post',
body: params,
headers: {
// 'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Api-Key ' + api_key,
},
})
.then(res => {
console.log(res);
// return res.json();
const dest = fs.createWriteStream('./octocat.ogg');
res.body.pipe(dest);
})
.catch(err => console.error(err));
@proger-coder
Copy link

Возможно ли адаптировать для просто JS? для сайта. Спасибо!

@powerdot
Copy link

@DIMANVAZ распознавание нужно делать на бекенде, потому что при запросе к API яндекса фигурирует твой личный api-ключ.
Любой программист сможет у тебя его изъять через devtools.

Текст с твоего фронта (сайта) -> твой бекенд: запрос+api_ключ -> Яндекс speech api -(результат в бинарнике)> твой бекенд -(результат в base64, допустим)> твой сайт (воспроизведение аудио)

@AlexBatya
Copy link

AlexBatya commented May 7, 2023

То-же самое можно провернуть и через axios

const params = new URLSearchParams();
const text = 'Привет, сосочка-девочка'

params.append('text', text);
params.append('lang', 'ru-RU');
params.append('voice', 'ermil');
params.append('format', 'mp3');
params.append('emotion', 'good');
params.append('speed', '1.0');


(async () =>{
    const result = await axios ({
        method: 'POST', 
        url: api,
        responseType: 'stream',
        headers: {
            Authorization: "Api-Key " + YA_API_KEY,
        },
        data: params 
    })
    result.data.pipe(fs.createWriteStream('./newFile.mp3'))
})();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment