まず、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 ファイルに満足している場合は、(この文字を含む) 後の部分を削除し、引数をこの 2 つの args|
に置き換えます。その場合、後で %s 変数を正しく設定してください。--stdout
-w desired_file_path
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);