Java接收到执行Ruby脚本的错误;终端不是
这是这个问题的分叉问题:flac: "ERROR: input file has an ID3v2 tag" (it doesn't)。我已经解决了最初的问题,但这并没有解决我遇到的一个问题,所以我将在此单独介绍它。Java接收到执行Ruby脚本的错误;终端不是
我使用称为speech2text的Ruby gem将音频文件转换为(近似)文本。在命令行上调用它可以正常工作(Mac终端)。但是,下面的Java代码:
String[] cmd = {"speech2text", "tmp/audio/pop-test-audio.wav"};
ProcessBuilder builder = new ProcessBuilder(cmd);
builder.redirectErrorStream(true);
Process process = builder.start();
只接收来自过程流这回:
/Library/Ruby/Gems/1.8/gems/speech2text-0.3.4/lib/speech/audio_inspector.rb:50:in `initialize': undefined method `first' for nil:NilClass (NoMethodError)
from /Library/Ruby/Gems/1.8/gems/speech2text-0.3.4/lib/speech/audio_splitter.rb:77:in `new'
from /Library/Ruby/Gems/1.8/gems/speech2text-0.3.4/lib/speech/audio_splitter.rb:77:in `initialize'
from /Library/Ruby/Gems/1.8/gems/speech2text-0.3.4/lib/speech/audio_to_text.rb:15:in `new'
from /Library/Ruby/Gems/1.8/gems/speech2text-0.3.4/lib/speech/audio_to_text.rb:15:in `to_text'
from /Library/Ruby/Gems/1.8/gems/speech2text-0.3.4/bin/speech2text:11
from /usr/bin/speech2text:19:in `load'
from /usr/bin/speech2text:19
我不知道什么红宝石,因此我的轻量级应用通过Java库的。我真的不知道这里发生了什么,但我知道它在终端以完全相同的方式执行时工作。有没有人知道可能会导致这种情况?
您也可以沟通终端并尝试JRuby。它与普通的Ruby VM一样快,并且更容易与Java集成。
现在有一个想法。看起来很棒的图书馆,我会看看。谢谢! – mtrc 2012-03-25 18:43:25
这本身已证明有困难。 speech2text是一个宝石(我相信),但我对Ruby非常不熟悉,我不知道如何编写必要的Java代码来执行它。 在'irb'中,我可以运行示例Ruby代码,但实际上编写一个Ruby脚本时,它无法识别最初的导入,所以还有其他复杂性。令人沮丧! – mtrc 2012-03-26 16:35:56
我发现了一些更好的资源,我不得不说,我认为这是要走的路。虽然我无法解决原来的问题,但这个答案让我找到了一个解决方案。谢谢! – mtrc 2012-03-26 22:46:24
我有类似的问题试图运行jslint.js(对于node.js)。实际上我的确更好地运行bash,然后以这种方式在我的命令中打印文本,但即使如此,我还记得有些问题。
基本上问题是,如果没有加载可用的环境设置,用Java执行事情可能会失败。这可能是一个难以解决的问题。
嗯。路径tmp/audio ...实际上在Java Eclipse项目的文件夹中。它适用于其他程序,但你可能是对的 - 可能是Ruby不那么受欢迎。我会检查它,谢谢! – mtrc 2012-03-25 16:37:54
好吧,完整路径无法使用。我测试了它在不正确的路径上运行,并且抛出了一个不同的错误,所以我们可以排除这个错误。 – mtrc 2012-03-25 16:40:55