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

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Ответить
Аватара пользователя
S_Nick
Сообщения: 67
Зарегистрирован: Сб сен 30, 2017 7:44 pm
Откуда: Минск
Благодарил (а): 9 раз
Поблагодарили: 54 раза
Контактная информация:

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

Сообщение S_Nick » Сб фев 08, 2020 2:54 pm

Столкнулся с проблемой, при работе модуля в режиме через 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 ------------------------- 
							for ($i = 0; $i <= 3; $i++) {
								if (!$response) {
									$ch = curl_init();
									curl_setopt($ch, CURLOPT_AUTOREFERER, true);
									curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
									curl_setopt($ch, CURLOPT_URL, $base_url . $qs);
									curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
									curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
									curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
									if ($post !== false) {
										curl_setopt($ch, CURLOPT_POST, 1);
										curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
									}
									curl_setopt($ch, CURLOPT_HEADER, false);
									//curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
									//curl_setopt($ch, CURLOPT_TIMEOUT, 60);
									$response = curl_exec($ch);
									if (curl_errno($ch)) {
										if ($this->MyDebug) DebMes("Error: " . curl_error($ch));
									}
									if (curl_getinfo($ch, CURLINFO_HTTP_CODE) != 200) {
										$decodedResponse = json_decode($response, true);
										if ($this->MyDebug) DebMes("Error code: " . $decodedResponse["error_code"]);
										if ($this->MyDebug) DebMes("Error message: " . $decodedResponse["error_message"]);
									} else {
										if ($response) {
											$contents = $response;
										} else {
											$contents = NULL;
										}
									}
									curl_close($ch);
								}
							}
							//------------------------- MY PATH ------------------------- 
Модифицированный yandex_tts.class.php прикрепил
yandex_tts.class.zip
Модифицированный yandex_tts.class.zip
(4.86 КБ) 124 скачивания
Уже недели две "полет нормальный", Алиса всегда произносит текст полностью.

Прошу sergejey обратить внимание и внести изменение в модуль.
За это сообщение автора S_Nick поблагодарили (всего 6):
xor (Сб фев 08, 2020 5:43 pm) • tarasfrompir (Сб фев 08, 2020 5:59 pm) • IRONDED (Пт мар 06, 2020 11:14 am) • timurufa86 (Вт мар 17, 2020 6:36 pm) • enzo0508 (Вс июн 21, 2020 1:18 pm) • u885 (Вт дек 07, 2021 1:06 am)
Рейтинг: 6.98%
Ответить