Google Apps Script: Как реализовать преобразование текста в речь?

Что такое Google Apps Script и его возможности?

Google Apps Script — это облачная платформа разработки, позволяющая автоматизировать задачи и расширять функциональность Google Workspace (такие как Google Sheets, Docs, Forms, Drive и другие). Используя JavaScript, разработчики могут создавать собственные решения, интегрировать сервисы Google и сторонние API, а также автоматизировать рутинные процессы. Apps Script предоставляет доступ к широкому спектру сервисов Google, включая доступ к Google Cloud Platform.

Обзор сервисов Google для преобразования текста в речь

Google предоставляет несколько вариантов преобразования текста в речь (TTS). Основной и наиболее функциональный — это Google Cloud Text-to-Speech API, который предоставляет высококачественные голоса и гибкие настройки. Существуют и другие, менее функциональные альтернативы, но они обычно уступают Cloud Text-to-Speech API по качеству и возможностям.

Преимущества использования Apps Script для автоматизации TTS

Использование Apps Script для автоматизации TTS предоставляет ряд преимуществ:

  • Интеграция с Google Workspace: Легкая интеграция с Google Sheets, Docs и другими сервисами для автоматизации озвучивания данных.
  • Автоматизация задач: Автоматическое преобразование текста в речь на основе триггеров или расписаний.
  • Расширяемость: Возможность создания пользовательских функций и пунктов меню для упрощения использования TTS.
  • Бесплатное использование (в пределах лимитов): Google Cloud Text-to-Speech API предоставляет бесплатный уровень использования, достаточный для многих задач.

Реализация простого преобразования текста в речь с помощью Google Cloud Text-to-Speech API

Настройка Google Cloud Console и получение ключа API

  1. Перейдите в Google Cloud Console.
  2. Создайте новый проект или выберите существующий.
  3. Включите Text-to-Speech API для вашего проекта (в разделе API и сервисы).
  4. Создайте сервисный аккаунт (в разделе IAM и администрирование).
  5. Создайте ключ JSON для сервисного аккаунта и сохраните его.

Важно: Безопасно храните ключ API и не публикуйте его в открытом доступе.

Написание кода Apps Script для вызова Text-to-Speech API

/**
 * Преобразует текст в речь с помощью Google Cloud Text-to-Speech API.
 *
 * @param {string} text Текст для преобразования в речь.
 * @param {string} apiKey Ключ API Google Cloud Text-to-Speech.
 * @return {Blob} Аудиофайл в формате MP3.
 */
function textToSpeech(text: string, apiKey: string): GoogleAppsScript.Base.Blob | null {
  const url = 'https://texttospeech.googleapis.com/v1/text:synthesize?key=' + apiKey;
  const payload = {
    input: {
      text: text
    },
    voice: {
      languageCode: 'ru-RU',
      name: 'ru-RU-Wavenet-B'
    },
    audioConfig: {
      audioEncoding: 'MP3'
    }
  };

  const options: GoogleAppsScript.URL_Fetch.URLFetchRequestOptions = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload)
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const json = JSON.parse(response.getContentText());
    const audioContent = json.audioContent;

    if (!audioContent) {
      Logger.log('Ошибка: Не удалось получить audioContent из ответа API.');
      return null;
    }

    const audioData = Utilities.base64Decode(audioContent);
    const blob = Utilities.newBlob(audioData, 'audio/mp3', 'speech.mp3');
    return blob;
  } catch (e) {
    Logger.log('Ошибка API: ' + e);
    return null;
  }
}

Объяснение параметров запроса: текст, язык, голос

В коде выше используются следующие параметры запроса:

  • input.text: Текст, который необходимо преобразовать в речь.
  • voice.languageCode: Язык текста (например, ru-RU для русского).
  • voice.name: Имя голоса (например, ru-RU-Wavenet-B). Список доступных голосов можно найти в документации Google Cloud Text-to-Speech.
  • audioConfig.audioEncoding: Формат аудиофайла (например, MP3).

Сохранение сгенерированного аудиофайла в Google Drive

/**
 * Сохраняет аудиофайл в Google Drive.
 *
 * @param {Blob} audioBlob Аудиофайл.
 * @param {string} folderId ID папки в Google Drive, куда нужно сохранить файл.
 */
function saveAudioToDrive(audioBlob: GoogleAppsScript.Base.Blob, folderId: string): void {
  try {
    const folder = DriveApp.getFolderById(folderId);
    folder.createFile(audioBlob);
    Logger.log('Аудиофайл успешно сохранен в Google Drive.');
  } catch (e) {
    Logger.log('Ошибка сохранения в Google Drive: ' + e);
  }
}

Чтобы использовать эти функции вместе:

function main() {
  const textToConvert = 'Привет, мир! Это пример преобразования текста в речь с использованием Google Apps Script.';
  const apiKey = 'YOUR_API_KEY'; // Замените на свой ключ API
  const folderId = 'YOUR_FOLDER_ID'; // Замените на ID папки в Google Drive

  const audioBlob = textToSpeech(textToConvert, apiKey);

  if (audioBlob) {
    saveAudioToDrive(audioBlob, folderId);
  }
}

Расширенные возможности: настройка голоса и управление скоростью речи

Выбор различных голосов и языков через API

API позволяет выбирать различные голоса и языки. Измените параметры voice.languageCode и voice.name в payload, чтобы выбрать нужный голос. Полный список доступных голосов можно найти в документации Google Cloud Text-to-Speech API.

Регулировка скорости речи и высоты тона

В audioConfig можно добавить параметры для регулировки скорости речи и высоты тона:

  • speakingRate: Скорость речи (0.25 — 4.0).
  • pitch: Высота тона (-20.0 — 20.0).
    audioConfig: {
      audioEncoding: 'MP3',
      speakingRate: 1.25, // Увеличение скорости речи на 25%
      pitch: 2.0       // Небольшое повышение тона
    }

Использование SSML для расширенного форматирования текста

SSML (Speech Synthesis Markup Language) позволяет добавить расширенное форматирование текста, например, паузы, акценты и произношение слов. Вместо input.text используйте input.ssml и заключите текст в теги <speak>.

    input: {
      ssml: '<speak>Привет, мир! <break time="1s"/> Это пример <emphasis level="strong">SSML</emphasis>.</speak>'
    }

Интеграция преобразования текста в речь в Google Sheets и Docs

Создание пользовательских функций для Google Sheets

Можно создать пользовательскую функцию в Google Sheets для преобразования текста из ячейки в речь. Функция будет возвращать ссылку на аудиофайл, сохраненный в Google Drive.

/**
 * Преобразует текст из ячейки в речь и возвращает ссылку на аудиофайл.
 *
 * @param {string} text Текст для преобразования в речь.
 * @param {string} apiKey Ключ API Google Cloud Text-to-Speech.
 * @param {string} folderId ID папки в Google Drive.
 * @return {string} Ссылка на аудиофайл в Google Drive.
 * @customfunction
 */
function TTS_SHEET(text: string, apiKey: string, folderId: string): string {
  const audioBlob = textToSpeech(text, apiKey);
  if (audioBlob) {
    const folder = DriveApp.getFolderById(folderId);
    const file = folder.createFile(audioBlob);
    return file.getUrl();
  } else {
    return 'Ошибка преобразования текста в речь.';
  }
}

В Google Sheets используйте функцию `=TTS_SHEET(


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