使用Automator“运行Applescript”变量

时间:2013-10-04 23:21:04

标签: string variables applescript truncate automator

请求帮助截断/修剪自动机操作中的字符串,该操作用于创建文本选择范围从30个左右的字符到800+的文本到语音音频文件,这对于文件名来说太长了。

简而言之,我正在尝试将字符串截断为30个字符,并将其作为文件名传递给“文本到音频文件”操作。

基本工作流程是:

选择文字 通过服务菜单启动以下Automator操作

  1. “设置变量值”以输入(例如,选定的文本)并定义为TextToSpeech
  2. “设置变量值”以输入(例如,所选文本)并定义为FileName
  3. “获取变量值”FileName
  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. “设置变量值”输入(例如所选文本)并定义为FileName

  6. “获取变量值”TextToSpeech
  7. “文本到音频文件”,另存为:设置为“FileName”
  8. “编码为MPEG音频”
  9. 非常感谢任何帮助/建议!

    此致

    西风

2 个答案:

答案 0 :(得分:3)

通常,您可以使用代码末尾的“return”命令从Applecript传递到下一个操作。在你的情况下,虽然自动机操作“文本到音频文件”不接受fileName变量,所以如果你想要那么多控件,你需要另一种方法。幸运的是,可以使用简单的“说”命令在AppleScript代码中轻松替换自动机操作。

因此,请创建您的自动贩卖机服务并接收所选文字。然后添加一个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

答案 1 :(得分:0)

这是有效的:

选择文字

通过服务菜单启动以下Automator操作

“设置变量值”以输入(例如,所选文本)并定义为TextToSpeech

“运行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

“设置变量值”输入(例如所选文本)并定义为FileName

“获取变量值”TextToSpeech 忽略此操作的输入

“文本到音频文件”,另存为:设置为“FileName”并保存为位置设置。

“编码为MPEG音频”

结果:所需文本说出的所选文本的音频文件,文件名设置为所选文本的前50个字符。

(我增加了字符以减少我在工作流程中获得的重复文件名的数量。)

@ regulus6633:你的答案更紧凑,更优雅,但我需要更多地了解Applecript如何获取输入并返回结果。再次感谢。