Я создаю умного домашнего помощника, я пробовал использовать базовый Chrome TTS, другие API, а затем попал на Google Cloud Platform Text To Speech WaveNet. Я использовал пример кода PHP, чтобы он поместил звук в файл в папке (с именем clips).
Когда я пытаюсь запустить файл PHP в браузере, он не работает, но запуск его с помощью команды php в терминале Mac OS работает и успешно создает файл без ошибок.
Я пытался использовать Node.js, но это не сработало, потому что мне нужно было запустить файл с HTML-страницы, и я не хотел раскрывать свои учетные данные Google Cloud Platform API.
<?php
header("Content-Type: application/json");
if (!isset($_GET['text'])) {
json_encode(array(
"success" => "false",
"error" => "missingPhrase"
));
}
require 'vendor/autoload.php';
use Google\Cloud\TextToSpeech\V1\AudioConfig;
use Google\Cloud\TextToSpeech\V1\AudioEncoding;
use Google\Cloud\TextToSpeech\V1\SynthesisInput;
use Google\Cloud\TextToSpeech\V1\TextToSpeechClient;
use Google\Cloud\TextToSpeech\V1\VoiceSelectionParams;
$textToSpeechClient = new TextToSpeechClient();
$input = new SynthesisInput();
$input->setText($_GET['text']);
$voice = new VoiceSelectionParams();
$voice->setLanguageCode('en-US-Wavenet-D');
$audioConfig = new AudioConfig();
$audioConfig->setAudioEncoding(AudioEncoding::LINEAR16);
$number = 0;
$fi = new FilesystemIterator("clips", FilesystemIterator::SKIP_DOTS);
foreach ($fi as $f) {
$number = $number + 1;
}
$number = $number + 1;
$resp = $textToSpeechClient->synthesizeSpeech($input, $voice, $audioConfig);
file_put_contents("clips/" . $number . '.mp3', $resp->getAudioContent());
echo json_encode(array(
"file_name" => 'clips/' . $number . ".mp3"
));
?>
Результат приведенного выше кода приводит к тому, что хром по умолчанию «Эта страница не работает» не имеет смысла.
PS, я просмотрел некоторые другие ответы о переполнении стека, связанные с проблемой, с которой я столкнулся, и они действительно НЕТ решили мою проблему и почти не касались той же проблемы.
Спасибо, Натан
Нет, журнал ошибок не часто хранится в папке скрипта. Загляните в /Applications/MAMP/logs/
Привет @aynber, я нашел журнал ошибок. Вот что у него было внутри. Я убедился, что очистил файл и снова попытался загрузить страницу, hastebin.com/ocoyomemuz.sql. Это было в папке MAMP. :)
Похоже, он не может найти учетные данные. Убедитесь, что он может загрузить ваш файл учетных данных. Для получения дополнительной информации см. URL-адрес, указанный в сообщении об ошибке.
Привет, @aynber, я немного не понимаю, что делать.
Обратитесь к связанной странице Developers.google.com/accounts/docs/… для получения подробной информации о настройке учетных данных. Вы можете либо предоставить его с помощью переменной среды, как описано в этом документе, либо загрузить ключевой файл и передать его непосредственно в свой клиент: new TextToSpeechClient(['credentials' => '/path/to/keyfile.json']);
@jdp спасибо за помощь! Теперь работает безотказно. :)
С помощью @jdp я смог решить эту проблему. Мне нужно было сослаться на файл json, содержащий учетные данные авторизации. Теперь это работает. :)
$textToSpeechClient = new TextToSpeechClient(['credentials' => 'credentials.json']);
Я бы посоветовал проверить журналы ошибок сервера, если там написано «Эта страница не работает», что обычно указывает на внутреннюю ошибку сервера 500. Единственное, что я могу предположить, это то, что путь к файлу автозагрузки не совпадает, когда вы загружаете его через веб. Попробуйте использовать абсолютный путь или относительный путь к
$_SERVER['DOCUMENT_ROOT']