2012-10-06 42 views
2

我正在創建一個基於ruby的應用程序,我希望它講一些文本。到目前爲止,我正在使用espeak:讓紅寶石說話

fork{exec ("espeak 'New file located #{timelog.hour} #{timelog.min}' \" > /dev/null")} 

它工作時,我作爲普通用戶運行它,但我需要此腳本以root身份運行。當它以root身份運行時,我得到:

ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side 
ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Connection refused 

爲什麼我不能以root身份運行此腳本? 另外,是否有另一種方法讓我的紅寶石腳本做TTS(文本到語音)?

添加:我甚至嘗試節日,當我運行它甚至沒有任何反應,即使作爲普通用戶。

require "rubygems" 
require "festivaltts4r" 
"I'm talking".to_speech 

(寶石列表)紅寶石1.9

bigdecimal (1.1.0) 
clickatell (0.8.2) 
espeak-ruby (0.4.0) 
festivaltts4r (0.2.0) 
ffi (1.1.5) 
hoe (3.1.0) 
io-console (0.3) 
json (1.5.4) 
minitest (2.5.1) 
nice-ffi (0.4) 
rake (0.9.2.2) 
rdoc (3.9.4) 
ruby-sdl-ffi (0.4) 
rubygame (2.6.4) 
sms_fu (1.1.2) 
tts (0.3.0) 

OS:OpenSuse當中

+0

問題是你爲什麼要以root身份運行這個腳本。 pulseaudio正在用戶空間中運行。你應該爲root運行它,或者更好地運行你的腳本作爲用戶。如果腳本在整個文件系統中檢測到新文件,並且想要大聲說出來,則無法阻止您從自己的用戶運行該文件 –

+0

腳本是否應該以根用戶身份運行,但root用戶有當非root用戶沒有問題時,會遇到alsa問題。 –

+0

我的腳本需要root權限它的一個基本腳本,提醒我文件更改然後掃描它的簽名L1k3 an AntiVirus;> –

回答

0

找到解決方案運行蘇而是使用sudo和它的作品( 「espeak的」)是 感謝所有U」 r幫助StackoverFlow社區;>

1

這個技巧有點俗氣,但它應該工作,如果你擁有一個mac。

make可以使用'say'命令從命令行中說出事情。人機工程學;

$ say 'hello world' 

將有電腦說那些話。這個命令也可以通過Ruby發送;

%x(say 'hello world') 
+0

或者可以使用https:// rubygems.org/gems/mac-say(我前段時間寫過的一款寶石),它的功能完全相同,但可以通過Ruby界面使用MacOS的說法:) – smileart