2013-10-04 54 views
1

請求幫助以截斷/裁剪字符串中的一個字符串操作,用於從30個左右字符到800多個字符的文本選擇中創建文本到語音的音頻文件,這也是長文件名。使用Automator「運行Applescript」變量

總之,我試圖截斷一個字符串爲30個字符,並將其作爲文件名稱傳遞給「文本到音頻文件」操作。

基本工作流程是:

選擇文本 啓動將通過服務菜單下面的Automator動作

  1. 「的一組變量值」輸入(例如選定文本),並定義爲文字轉語音
  2. 「設置的變量值」,以輸入(例如選擇的文本),並且定義爲文件名
  3. ‘獲取的變量值’文件名
  4. 「運行AppleScript」

    on run {input, parameters} 
        set theResult to input as string 
        set finalResult to input as string 
        set txtLength to (length of theResult) 
        if txtLength > 30 then 
         set finalResult to (characters 1 thru 30 of theResult) as string 
        end if 
        return finalResult 
    end run 
    
  5. 「設置變量的值」 輸入(例如選定的文本),並定義爲文件名

  6. 「獲得的變量值」文字轉語音
  7. 「文本到音頻文件」與另存爲:設置爲「文件名」
  8. 「編碼爲MPEG音頻」

任何援助/建議,非常感謝!

問候,

西風

+0

除了不確定步驟4中的Applescript是否無錯,我無法找到任何有關如何將變量傳入/傳出「運行Applescript」操作並由此通過其餘操作的明確信息。 –

回答

3

一般來說,你從AppleScript的下一個動作不管它需要使用的代碼的結束「返回」命令通過。在你的情況下,雖然automator動作「文本到音頻文件」不接受一個fileName變量,所以如果你想要很多控制,你需要另一種方法。幸運的是,可以用簡單的「say」命令在applescript代碼中輕鬆替換automator動作。

因此,創建您的automator服務並接收選定的文本。然後添加一個applescript動作並使用下面的代碼。然後添加「編碼到MPEG音頻」操作。

對於applescript代碼,只需使用您選擇的值修改voiceName和saveFolder變量即可。 saveFolder路徑必須以冒號(:)結尾。請注意,我使用26而不是30,因爲我們將「.aif」添加到文件名的末尾......以獲得總共30個字符。

on run {input, parameters} 
    set voiceName to "Jill" 
    set saveFolder to path to desktop as text 

    set selectedText to item 1 of input 
    if (length of selectedText) > 26 then 
     set fileName to text 1 thru 26 of selectedText 
    else 
     set fileName to selectedText 
    end if 
    set fileName to fileName & ".aif" 
    set filePath to saveFolder & fileName 

    say selectedText using voiceName saving to file filePath 

    return {POSIX path of filePath} 
end run 

如果你需要確定你的saveFolder使用它來獲取路徑。運行此代碼並將結果複製/粘貼到上面的saveFolder變量中。

(choose folder) as text 
+0

非常感謝您的幫助。您的提示和我的試用和錯誤的組合讓它起作用。太感謝了! –

+0

只要能夠正確編輯/發佈,就會發布解決方案。 –

0

這裏是什麼工作:

選擇文本

啓動通過服務菜單下面的Automator動作

「的一組變量值」輸入(例如選定文本),並定義爲文字轉語音

「Run AppleScript」

on run {input, parameters} 
    set theResult to input as string 
    set finalResult to input as string 
    set txtLength to (length of theResult) 
    if txtLength > 50 then 
     set finalResult to characters 1 thru 50 of theResult as string 
    end if 
    return finalResult as string 
end run 

「設置變量值」輸入(例如,選定的文本),並定義爲文件名

「獲得的變量值」文字轉語音忽略這個動作的輸入

「文本到音頻文件」與另存爲:設置爲「文件名」,並保存爲位置設置。

「編碼爲MPEG音頻」

結果:由所需的語音設置爲所選擇的文本的第一個50個字符的文件名所說的選定的文本的音頻文件。

(我上升到角色,以減輕我正在爲我的工作流的一部分重複的文件名的數量。)

@ regulus6633:你的回答是更緊湊,優雅,但我需要更多地瞭解蘋果如何獲得它的輸入並返回結果。再次感謝。

相關問題