php - eSpeak to mp3 in php on both windows and linux (online text-to-speech)

标签 php linux windows text-to-speech espeak

我想在我的 Web 应用程序中实现简单的文本转语音脚本,该脚本可以根据给定的文本动态生成 mp3。

它需要同时运行:

  • 我在 Windows 上的本地 WAMP 服务器
  • 和我的在线 Linux 服务器

eSpeak 不提供最高质量的声音,但至少提供强大的语言支持、简单的实现,而且它是免费的。所以经过一番挖掘后,我意识到将它集成到 php 中的例子并不多。我得出结论,StackOverflow 应该包含一个简单的 php 文本到语音脚本的实现,该脚本使用 eSpeak 和 lame 生成 mp3。

最佳答案

首先我们需要设置 espeak 和 lame 的路径。确保你已经安装了两者。就我而言,它看起来像这样:

我想,有人可能会觉得这很有用。我正在使用此代码在本地 Windows wamp 服务器和在线 Linux 服务器中生成我的命令:

// APPLICATION PATHS AND CONFIG
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    //This is a server using Windows!
    define('ESPEAK', '..\application\libraries\espeak-win\command_line\espeak');
    define('LAME', '..\application\libraries\espeak-win\command_line\lame');
} 
else {
    //This is a server not using Windows!
    define('ESPEAK', '/usr/bin/espeak');
    define('LAME', '/usr/bin/lame');
}

然后,编写自己要执行的命令。我使用了 %s 个点,稍后用所需的值替换。 List of espeak commands can be found here .

如果您不需要 mp3 转换并且您对 .wav 文件感到满意,只需删除 | 之后的部分(包括此字符)并替换参数 --stdout 和这两个参数 -w desired_file_path。在这种情况下,请确保稍后正确设置 %s 变量。

define('COMMAND', ESPEAK.' --stdout -v %s+m3 -p 60 -a 75 -s 130 "%s" | '.LAME.' --preset voice -q 9 --vbr-new - %s');

然后像这样执行脚本:

$lang_voice = 'en';
$input_text = 'some input text to read';
$file_path = 'voice-cache/output.mp3'
$exe_path = sprintf(COMMAND, $lang_voice, $input_text, $file_path); // fills %s spots
exec($exe_path);

作为最后一步,只需输出生成的文件:

header('Content-Type: audio/mpeg');
header('Content-Length: '.filesize($file_path));
readfile($file_path);

关于php - eSpeak to mp3 in php on both windows and linux (online text-to-speech),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23584205/

相关文章:

python - Windows 上 Python 中的长路径

javascript - 如何在jquery select2中获取项目

php - 如何使用我的注册帐户在 php 中输入登录页面

linux - 为什么我不能从 setopt 中 grep zle?

android - C 和 Arduino 之间的通信

windows - 私有(private)字节的 win32 API 函数是什么?

php - readdir 与 scandir

php - MySQL查询从A表中删除所有在B表中找不到id的行?

linux - 如何使用 grep 或 awk 处理特定列(使用文本文件中的关键字)

c - C中的fread错误