在Windows和Linux上的eSpeak到php中的mp3(在线文本到语音转换)

问题描述 投票:0回答:1

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

它需要同时运行:

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

eSpeak不提供最高质量的声音,但至少在语言方面有很强的支持,简单的实现,而且它是免费的。所以经过一番挖掘,我意识到没有太多的例子可以将它集成到php中。我总结说StackOverflow应该包含一个简单的php文本到语音脚本的实现,它可以生成带有eSpeak和lame的mp3。

php linux windows text-to-speech espeak
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斑点稍后用所需的值替换。 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);
© www.soinside.com 2019 - 2024. All rights reserved.