eSpeak时要在Windows和Linux的PHP MP3(在线文本到语音)(eSpeak to

2019-11-03 05:25发布

我想实现我的web应用程序,将动态生成的MP3出给定文本的简单文本到语音脚本。

它需要在这两种运行:

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

eSpeak时不提供声音最高的质量,但至少一个强有力的支持语言,实现简单,也很自由。 因此,一个小挖之后,我意识到有没有把它集成到PHP的很多例子。 我总结的StackOverflow应该包含一个简单实现一个PHP文本到语音脚本与eSpeak文字和跛脚产生的mp3。

Answer 1:

首先,我们需要设置路径espeak的和跛脚。 确保两者都已安装。 在我的情况是这样的:

我因子评分,有人可能会发现这很有用。 我使用这个代码来生成我在本地的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);


文章来源: eSpeak to mp3 in php on both windows and linux (online text-to-speech)