我一直在试图让某个Google API工作两天。已经尝试了三个不同的项目 - 一个使用Perl(在很早的时候就死掉了),一个使用Python(在最后一道障碍时崩溃并烧毁),最后一个使用Ruby。从命令行调用时作为一个标准的命令,Ruby的一个实际工作,即:Ruby Gem在命令行和irb上运行 - 以ruby脚本或通过Java进程运行时失败
speech2text somefile.wav
,即使你打通irb
,并把在项目现场发现,样本代码工作:
require 'speech'
audio = Speech::AudioToText.new("i-like-pickles.wav")
puts audio.to_text.inspect
但是,使用ruby -rubygems somescript.rb
执行时,带有上述内容的Ruby .rb文件将不起作用。它退出这个:
/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 script/test_s2t.rb:6
试图使用从Java命令行二进制speech2text
如在相同的错误消息的运行时处理结果被反馈。它抱怨的那一行的是:
def initialize(file)
self.duration = Duration.new(`ffmpeg -i #{file} 2>&1`.strip.scan(/Duration: (.*),/).first.first)
end
但实际上存在是一个问题的想法似乎不太可能对我来说,因为当在任一irb
或通过终端上的二进制执行它完美。
这里真正的问题是我根本不了解Ruby - 我在Java中工作,而且我只需要这个API来运行。事实上,它运行在某些方法告诉我,我可能安装它正确,但除非我可以得到一个.rb脚本工作或让它执行外部,我看不到如何使用它。我有JRuby推荐给我的,但对我来说这可能太复杂了,因为它似乎需要手动安装JRuby的ruby gem,我不知道该怎么做(或者至少,我不会我不知道该怎么做!)
对核心错误消息的任何建议非常感谢,但如果你看到明确的问题,请让我知道。
编辑 - 这确实是一个路径问题 - 至少在表面上是这样。 Ruby在查找涉及的确切文件时遇到了困难,因此,speech2text/ffmpeg因此而失败。谢谢!
哪个特别的东西被误操作?这是宝石speech2text吗?红宝石安装本身?或者speech2text本身使用的东西(如ffmpeg,如你所说)?我很抱歉,我对此非常明确,只是我很少知道Ruby是如何工作的,而且我现在太忙了,无法开始玩这个游戏! – mtrc 2012-03-26 16:55:29
此外 - 感谢您花时间阅读和回复。 – mtrc 2012-03-26 16:55:55
两件事:'我喜欢pickles.wav'和'ffmpeg'二进制。您应该首先尝试使用声音文件的绝对路径。 – 2012-03-26 16:58:00