1

我正在尝试使用 Java Runtime.getRuntime().exec(String) 命令运行 Festival,然后使用 OutputStreamWriter 将一些命令写入进程的输出流。

这很好用,我可以做这样的事情:

Process p = Runtime.getRuntime().exec("festival");
Writer w = new OutputStreamWriter(p.getOutputStream());
w.append("(SayText \"Hello World\")");
w.flush();

显然,我可以告诉它的方式是它通过扬声器说出文本。

我真正困难的是从终端中看到的文本输出。我正在尝试运行一些其他输出文本的命令(例如(voice.list)),大概是到stdout。

例如,我尝试通过以下方式使用 BufferedReader:

BufferedReader reader = new BufferedReader (new InputStreamReader(p.getInputStream()));
w.append("(voice.list)");
w.flush();

String output = "";
String line = reader.readLine();
System.out.println(line);

while ((line = reader.readLine()) != null)
{
  System.out.println("Reading: " + line);
  output += line;
}

(System.out.println 仅用于调试,如果我能够让它工作,我会以更简洁的方式完成整个工作。)

无论我尝试什么代码,我都无法从 Festival 获得任何输出。我可以从其他命令中获取输出。EG 我也尝试过这段代码http://en.allexperts.com/q/Java-1046/2008/2/Runtime-getRuntime-exec-cmd.htm它适用于许多其他命令(如ls)但不适用于 Festival .

有什么知道我将如何使它工作的吗?

谢谢。

4

1 回答 1

0

Festival 可能会在 stderr 而不是 stdout 上输出它的文本。尝试更换

p.getInputStream()

p.getErrorStream()
于 2013-01-16T01:35:28.567 回答