2015-12-05 22 views
0

我想在一個序列在Mac終端與多種聲音上使用的say命令。如何使用`say`命令在序列中使用多個聲音?

例如,請注意下面的代碼:

say -v 'Alex' 'Hello World' 
say -v 'Kathy' 'Hello World!' 

這將做我想做的,但重複命令say。我假裝是這樣的:

say -v 'Alex' 'Hello World' -v 'Kathy' 'Hello World' 

此行不工作,但它代表着我想要做的事。

say -o ttsTest.aiff \ 
-v 'Kathy' "Hello world! This is Kathy speaking!" \ 
-v 'Fred' "And here is Fred." \ 
-v 'Bruce' "Right" \ 
-v 'Alex' "Alex over here, don't forget me." 

上面的代碼讀取一個聲音中的所有文本:

當前腳本如下寫入。

參考文獻: say(1)

PS:正如我上面的腳本的摘錄顯示,我想輸出的多種聲音到同一個文件。

+0

「男人說」給你任何希望,它會接受多個參數,如你所願? (我沒有Mac,我無法檢查)。祝你好運。 – shellter

回答

0

您可以通過鏈接cmd1 && cmd2運行其他命令。所以,你會放

say -v 'Alex' 'Hello World' && say -v 'Kathy' 'Hello World!'

+0

是的,但這仍然代表兩次調用該函數,會有兩個輸出文件。我只想調用'say' *一次*以便我可以添加'-o文件名。aiff'輸出標誌。 – Maslor

+0

只是挑剔,但'x && y'的意思是「只有在x成功的情況下運行y,在這種情況下它可以工作,因爲x成功了,但是如果你想鏈接兩個命令並運行第二個命令而不管第一個命令是成功的,它會是'x; y',你也可以做'x || y',這意味着如果x不成功就運行y。 – Mecki

0

你可以只寫了一個腳本:

#!/bin/bash 
while [ ! -z "$1" ]; do 
    voice="$1" 
    shift 
    say -v "$voice" "$1" 
    shift 
done 

保存到一個文件,運行chmod +x myscript然後調用它像這樣:

`./myscript Kathy "Hello world! This is Kathy speaking!" Fred "And here is Fred." Bruce "Right" Alex "Alex over here, don't forget me."` 
2

你想要做什麼是不可能的命令say。如果有可能做到這一點,那麼參考文獻肯定會注意到-v可以多次使用,但他們不會。

你所需要的是合併AIFF文件的工具。 OS X沒有提供,但是存在這樣的命令行工具,例如, soxffmpeg等,但你將不得不自己構建它們。

BTW獲得在終端的命令的引用,只是使用man工具,例如man say顯示參考(用箭頭鍵向上/向下滾動,空格鍵向下滾動整頁,<轉到第一行,>轉到最後一個,退出q;也可以搜索,例如鍵入/voice並按回車,它會搜索語音,n再次搜索,?voice搜索語音,但倒退,打h更多的幫助)

相關問題