首先,我们需要设置 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);