我想在我的Web应用程序中实现简单的文本到语音脚本,该脚本将动态生成给定文本的mp3。
它需要同时运行:
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);