2

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

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

基本工作流程是:

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

  1. “设置变量值”以输入(例如选定的文本)并定义为 TextToSpeech
  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. “获取变量的值”TextToSpeech
  7. “文本到音频文件”,另存为:设置为“文件名”
  8. “编码为 MPEG 音频”

非常感谢任何帮助/建议!

问候,

和风

4

2 回答 2

3

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

因此,创建您的自动化服务并接收选定的文本。然后添加一个 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
于 2013-10-05T09:32:32.497 回答
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

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

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

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

“编码为 MPEG 音频”

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

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

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

于 2013-10-06T15:10:07.103 回答