我为树莓派制作了一个非常小的应用程序,它使用 Sinatra:
https ://github.com/khebbie/SpeakPi
该应用程序允许用户在 textarea 中输入一些文本,并要求 Google 为其创建一个 mp3 文件。
在那里,我有一个名为 speech2.sh 的 shell 脚本,它调用 Google 并播放 mp3 文件:
#!/bin/bash
say() {
wget -q -U Mozilla -O out.mp3 "http://translate.google.com/translate_tts?tl=da&q=$*";
local IFS=+;omxplayer out.mp3;
}
say $*
当我像这样从命令行调用 speech.sh 时:
./speech2.sh %C3%A6sel
它的发%C3%A6
音像丹麦字母“æ”,这是正确的!
我从 Sinatra 路由中调用 Speech2.sh,如下所示:
post '/say' do
message = params[:body]
system('/home/pi/speech2.sh '+ message)
haml :index
end
当我这样做时,谷歌会发出一些非常奇怪的字符,例如“破管子......”这是错误的!
所有字符a-z
都正确发音
我尝试了一些 URL 编码和解码,但没有任何效果。
我尝试将消息输出到命令行,这"%C3%A6"
确实没有意义。你知道我做错了什么吗?
编辑
总结和简化 - 如果我在 bash 中这样输入:
./speech2.sh %C3%A6sel
有用
如果我开始一个 irb 会话并输入:
system('/home/pi/speech2.sh', '%C3%A6sel')
这没用!