我安装了SVOX pico2wave并创建了一个脚本。现在当我输入:
speech "Hello world"
计算机文本转语音引擎大声说“Hello world”。此外,我使用.bashrc
变量PROMPT_COMMAND
定义如下:
PROMPT_COMMAND="speech 'Command executed.'"
因此,优秀的文本转语音引擎会在终端返回提示之前大声宣布命令已执行。
然而,一段时间后,这变得无聊了,我认为在终端中用计算机说一句话来结束每个命令会很酷。不同的一行文字(想想企业号星舰的自动驾驶仪)。
因此我在 .bashrc 中创建了一个数组变量,其中包含不同的消息:
array[0]="Shields at 90%"
array[1]="Engaging proton overdrive"
array[2]="Autopilot disengaged"
array[3]="Targetting solution available"
array[4]="Alert. Incoming missile."
array[5]="Deploying countermeasures."
array[6]="Firing torpedoes."
array[7]="Engaging auto-cannon."
array[8]="Severe damage on deck 17. Sealing off."
array[9]="Deploying repair droids to deck 17."
我想要的是每个当我在终端运行命令时,要更新的变量PROMPT_COMMAND
并读取不同的数组中的随机行。
我认为我需要一个循环,但我不知道如何制作它。
我将非常感激您的帮助。谢谢。
答案1
创建一个脚本并将其保存在某个地方,其中包含您的行和从数组中随机选择一个行并speech
在该行上调用命令的逻辑:
array[0]="Shields at 90%"
array[1]="Engaging proton overdrive"
array[2]="Autopilot disengaged"
array[3]="Targetting solution available"
array[4]="Alert. Incoming missile."
array[5]="Deploying countermeasures."
array[6]="Firing torpedoes."
array[7]="Engaging auto-cannon."
array[8]="Severe damage on deck 17. Sealing off."
array[9]="Deploying repair droids to deck 17."
line=${array[$RANDOM % ${#array[@]}]}
speech "$line"
然后在您的.bashrc
或.profile
集合中PROMPT_COMMAND
:
PROMPT_COMMAND="bash $HOME/PATH/TO/myscript.sh"
只需将speech
其替换echo
为即可获取消息而不是语音。
答案2
稍后编辑教程:
感谢 Ravexina 的上述回答,现在问题已经解决,解决方案非常有效。我将在下面提供分步说明,供其他有兴趣在 Ubuntu 18.04 中使用它的人使用
1.安装 SVOX pico2wave 包:
sudo apt-get install libttspico0 libttspico-utils libttspico-data libsox-fmt-mp3
2. 创建演讲稿
cd ~/scripts
gedit speech
并将此内容放入里面,在路径中插入正确的用户:
#!/bin/bash
pico2wave -l=en-US -w=/home/user/test.wav "$1"
aplay -q ~/test.wav
rm /home/user/test.wav
保存并退出。
3. 按照上面的 Ravexina 所示创建 shell_speech.sh 脚本:
gedit shell_speech
array[0]="Shields at 90%"
array[1]="Engaging proton overdrive"
array[2]="Autopilot disengaged"
array[3]="Targetting solution available"
array[4]="Alert. Incoming missile."
array[5]="Deploying countermeasures."
array[6]="Firing torpedoes."
array[7]="Engaging auto-cannon."
array[8]="Severe damage on deck 17. Sealing off."
array[9]="Deploying repair droids to deck 17."
line=${array[$RANDOM % ${#array[@]}]}
speech "$line"
保存并退出。
4. 使脚本可执行并将其目录添加到 PATH,以便可以从任何地方调用它们:
chmod u+x ~/scripts/bin/speech
chmod u+x ~/scripts/bin/shell_speech
export PATH=$PATH:~/scripts
5.修改.bashrc
gedit ~/.bashrc
添加以下行:
PROMPT_COMMAND="bash shell_speech"
保存并关闭
笔记:您可以在数组中添加任意数量的新行~/scripts/bin/shell_speech