0

我想在我的 Web 应用程序中实现简单的文本到语音转换脚本,该脚本会从给定的文本中动态生成 mp3。

它需要同时运行:

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

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

4

1 回答 1

1

首先,我们需要设置 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 点稍后替换为所需的值。espeak 命令列表可以在这里找到

如果您不需要 mp3 转换并且您对 .wav 文件感到满意,只需删除后面的部分|(包括此字符)并将参数替换--stdout为这两个 args -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);
于 2014-05-10T17:29:25.053 回答