Страница 1 из 1

[Модуль] Yandex TTS Доработка - Работа через CURL

Добавлено: Сб фев 08, 2020 2:54 pm
S_Nick
Столкнулся с проблемой, при работе модуля в режиме через API-key, текст произносится не полностью. Особенно если он длинный, часто обрывается в произвольном месте, не произнося до конца.

В режиме работы модуля через OAuth Облако такой проблемы не наблюдается (там данные передаются CURL-ом как это и рекомендует Yandex)

Стал искать проблему и нашел, в модуле yandex_tts.class.php, mp3-контент синтезированной речи скрипт получает через функцию file_get_contents, что видимо является недостаточно надежным способом. Файл скачивается с серверов Yandex не полностью.

Мое решение, заменить file_get_contents:

Код: Выделить всё

$contents = file_get_contents($base_url . $qs);
на CURL:

Код: Выделить всё

//------------------------- MY PATH ------------------------- 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $base_url . $qs);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$html = curl_exec($ch);
$info_arr = curl_getinfo($ch);
if ($info_arr['redirect_url']) {
	$html = $info_arr['redirect_url'];
}
if (curl_errno($ch)) {	
	print_r("Error Curl: " . curl_error($ch));
}
curl_close($ch);
$contents = $html;
//------------------------- MY PATH ------------------------- 
Модифицированный yandex_tts.class.php прикрепил
yandex_tts.class.zip
Модифицированный yandex_tts.class.php
(4.9 КБ) 47 скачиваний
Уже недели две "полет нормальный", Алиса всегда произносит текст полностью.

Прошу sergejey обратить внимание и внести изменение в модуль.