ibroid/php-tts

使用 PHP 将文本转换为语音

dev-master 2024-07-01 14:56 UTC

This package is auto-updated.

Last update: 2024-10-01 00:08:03 UTC


README

它是如何工作的?

这个库利用 Google Translate 的能力提供文本转语音功能。尽管其方法非传统,但它已经可靠多年。

Google Translate 可以处理数百万个请求,因此您可以放心地使用这个库。

  1. 库向 Google Translate 页面发送标准请求,包括需要转换的文本的查询参数。

  2. 请求头配置为指示 Google Translate 以 base64 编码的格式返回音频数据。这是必要的,因为 PHP 不能原生处理音频格式。

  3. base64 编码的音频数据随后交给 JavaScript,JavaScript 将其解码为可播放的音频格式。

安装

需求

  • PHP >= 7.4
composer require ibroid/php-tts:dev-master

示例

<form onsubmit="sendText(event)" action="/index.php" method="post">
  <input required type="text" name="text" placeholder="Type any words" />
  <button>Play Audio</button>
  <h2 id="indicator">Status : Waiting for request</h2>
  <div id="output"></div>
</form>
function sendText(event) {
  event.preventDefault();
  document.getElementById("indicator").innerText = "Status : Loading...";

  const body = new FormData();
  body.append("text", event.target.text.value);

  fetch("/index.php", {
    method: "POST",
    body: body,
  })
    .then(async (response) => {
      document.getElementById("indicator").innerText = "Status : Playing";

      const audio = new Audio(
        "data:audio/wav;base64," + (await response.text())
      );

      audio.addEventListener("ended", () => {
        document.getElementById("indicator").innerText = "Status : Ended";
      });

      const audioElement = document.createElement("audio");
      audioElement.src = audio.src;
      audioElement.controls = true;
      document.getElementById("output").append(audioElement);

      audio.play();
    })

    .then((err) => {
      document.getElementById("indicator").innerText = "Status : Error. " + err;
    });
}
include "./vendor/autoload.php";

use Ibroid\PhpTts\Tts as Tts;

if (isset($_POST['text'])) {
  $audio = Tts::generateAudio($_POST['text'], [
    "lang" => "en",
    "timeout" => 5000
  ]);

  echo $audio;
}