Google Text to Speech (TTS) используя CURL и Консоль


Google даёт отличную библиотеку для преобразования текста в голос. Сервис Google Text to Speech позволяет преобразовать текстовый контент в mp3-файл с произношением указанной фразы.

В этой статье я расскажу вариант использования TTS при помощи консоли и cURL.

Начнём.
Получаем ключи.
Первое, что нужно сделать — зарегистрироваться и получить необходимые ключи для работы. Я не буду останавливаться на этом этапе т.к. Google часто меняет алгоритм получения ключей и информация скоро, вероятно, станет неактуальной, тем самым только больше собьет Вас с толку.

На момент написания статьи о том, как получить ключи можно узнать по ссылке в блоке Before you begin.

Добавляем переменную окружения.
Получив заветный json-файл разместите его в удобном для Вас месте на Вашем сервере.
Для работы Cloud SDK (установку рассмотрим в след. шаге) и генерации токена доступа нам нужна переменная окружения GOOGLE_APPLICATION_CREDENTIALS, в которой будет указан путь к json с ключами.

Единоразово установить это значение можно так:

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

Не забывайте, что срок жизни переменной, в таком случае, закончится вместе с Вашей консольной сессией. Чтобы не добавлять каждый раз — добавьте строку в ~/.bash_profile.

Просто добавьте указанную выше строку EXPORT GOOGLE_APPLICATION_CREDENTIALS........... в конец файла.

Устанавливаем Google Cloud SDK.
Перейдите по ссылке.
Скачайте подходящий вариант архива и следуйте инструкциям. В этом месте не должно возникнуть проблем — мануал по установке достаточно исчерпывающий.

Если что-то пошло не так — напишите в комментарии — постараемся решить проблему.

Признаком успешности выполнения будет вывод токена в ответ на команду

gcloud auth application-default print-access-token

Работаем с API

Консоль
Для консольного обращения достаточно использовать пример с Документации:

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
https://texttospeech.googleapis.com/v1/text:synthesize

В примере используется файл request.json — привожу его ниже:

{
  "input":{
    "text":"Text example"
  },
  "voice":{
    "languageCode":"en-gb",
    "name":"en-GB-Standard-A",
    "ssmlGender":"FEMALE"
  },
  "audioConfig":{
    "audioEncoding":"MP3"
  }

php cURL

        $data   =   [
            'input'   =>  [
                "text"      =>  'Text example'
            ],
            'voice'   =>    [
                 'languageCode' => 'en-gb',
                 'name' => 'en-GB-Standard-A',
                 'ssmlGender' => 'FEMALE'
            ],
            'audioConfig'     =>  [
                'audioEncoding'     =>  'MP3'
            ]
        ];

        curl_setopt($ch, CURLOPT_URL, 'https://texttospeech.googleapis.com/v1/text:synthesize');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode( $data ) );

        $headers    =   array();
        $authKey    =   trim( file_get_contents('/var/www/html/tts-key') ); // получаем ключ
        $headers[]  =   'Authorization: Bearer ' . $authKey;
        $headers[]  =   'Content-Type: application/json; charset=utf-8';
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

        $result     =   json_decode( curl_exec($ch), true );


        if (curl_errno($ch)) {
            echo 'Error:' . curl_error($ch);
            exit;
        }
        curl_close($ch);

        echo '

Приведенный выше пример выведет html-тег audio, который уже сможет озвучить Ваш текст.

Также есть два момента. В моём случае получение токена для каждого обращения было не очень удобным, поэтому я создал sh-файл, который в Кроне вызывается каждые 10 минут и сохраняет ключ в файл. Php, в свою очередь, забирает ключ с этого файла и подставляет в header.

sh-файл выглядит так:

#!/bin/bash
# tts key

/path/to/google-cloud-sdk/bin/gcloud auth application-default print-access-token > /var/www/html/tts-key

Этот файл получит токен и сохранит его в нужный файл, с которого далее мы читаем его при помощи php. При желании можно добавить EXPORT GOOGLE_APPLICATION_CREDENTIALS........... также в sh-ник перед вызовом gcoud.

Обратите внимание — мы указываем ПОЛНЫЙ путь к gcloud. Если Вы не помните, где он находится — используйте команду:

whereis gcloud

И последнее. Если Вам нужно сохранить полученный голосовой поток в файл — используйте следующий код:

file_put_contents('path/to/file.mp3', base64_decode($result['audioContent']));

Вместо последней строки с echo.

Текста получилось много, но, по сути, ничего сложного в задаче нет. Если у Вас что-то не получилось или остались вопросы — пишите в комментарии.
Удачи!


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *