Как использовать текст фестиваля в речь с php - PullRequest
0 голосов
/ 12 февраля 2020

Я реализую преобразование текста в речь, используя Festival на локальном хосте. Мне удалось создать файл схемы, но я не могу создать файл mp3. Вот коды

index. php

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Festival Voice Tester</title>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <script>
    function play() {
      $.ajax({url: "voice.php?voice=" + $("#voice").val() + "&text=" + $("#text").val(), success: function(result){
        console.log(result);
      }});
    }
  </script>
</head>
<body>
  <div class="container" style="max-width:500px;padding-top:100px;">
    <form method="GET" action="fwrite.php">
      <div class="form-group">
      <label for="voice">Voice:</label>
      <select id="voice" class="form-control">
        <?php
          echo '<option value="kal_diphine">kal_diphine</option>';
        ?>
      </select>
    </div>
    <div class="form-group">
      <label for="text">Text:</label>
      <textarea id="text" class="form-control" rows="5"></textarea>
    </div>
    <!-- <button class="btn btn-default" onclick="play()" >Listen</button> -->
    <button class="btn btn-default">Listen</button>
    </form>
    <audio controls="true">

    </audio>
  </div>
</body>

fwrite. php

<?php
$tex= $_GET['text'];
$synth_voice ="(voice_rab_diphone)\n"; 
$myfile = fopen('/home/david/Desktop/david/newfile.scm', "w") or die("Unable to open file");

fwrite($myfile, $synth_voice);
// create the scheme file for the generation of the voice
fwrite($myfile, "(set! utt1 (Utterance Text $tex))\n");
fwrite($myfile, "(utt.synth utt1)\n");
fwrite($myfile, '(utt.save.wave utt1 "/home/david/Desktop/newf.wav")');

//storing the result in a wav in the specified directory since scheme does not have passing values by reference;
write($myfile, "\n(quit)");
fclose($myfile);

shell_exec('festival /home/david/Desktop/david/newfile.scm');
echo ("wav file generated\n");

shell_exec('aplay /home/david/Desktop/newf.wav');
echo('OK!!\n');

?>

Вот что я получаю:

Примечание: неопределенный индекс: текст в /opt/lampp/htdocs/interface/fwrite.php в строке 2

Предупреждение: fopen (/home/david/Desktop/david/newfile.scm): не удалось открыть поток: отказано в разрешении в /opt/lampp/htdocs/interface/fwrite.php в строке 4 Не удается открыть файл

Мне бы хотелось, чтобы файл fwrite. php возвратил результат, который я могу воспроизвести в Интернете с помощью аудиотэгов.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

@ avidkihara сначала вы передаете переменную через textarea. и использовал метод GET, поэтому вы также добавляете name = "text". в текстовой области. как сказал @Farzad Rastgar Sani

<form method="GET" action="fwrite.php">
      <div class="form-group">
      <label for="voice">Voice:</label>
      <select id="voice" class="form-control">
        <?php
          echo '<option value="kal_diphine">kal_diphine</option>';
        ?>
      </select>
    </div>
    <div class="form-group">
      <label for="text">Text:</label>
      <textarea name="text" class="form-control" rows="5"></textarea>
    </div>
    <!-- <button class="btn btn-default" onclick="play()" >Listen</button> -->
    <button class="btn btn-default">Listen</button>
 </form>
0 голосов
/ 12 февраля 2020

Если вы хотите отправить форму HTML, вы должны определить атрибут name для ваших входных данных. Идентификатора недостаточно.

      <textarea id="text" class="form-control" name='text' rows="5"></textarea>
...