String “使用自动机”;运行Applescript";变量
请求帮助截断/修剪automator操作中的字符串,该操作用于从大约30个字符到800个字符的文本选择中创建文本到语音音频文件,对于文件名来说,文本选择太长 简而言之,我试图将字符串截断为30个字符,并将其作为文件名传递给“Text to Audio File”操作 基本工作流程是: 选择文本 通过“服务”菜单启动以下自动机操作String “使用自动机”;运行Applescript";变量,string,variables,applescript,truncate,automator,String,Variables,Applescript,Truncate,Automator,请求帮助截断/修剪automator操作中的字符串,该操作用于从大约30个字符到800个字符的文本选择中创建文本到语音音频文件,对于文件名来说,文本选择太长 简而言之,我试图将字符串截断为30个字符,并将其作为文件名传递给“Text to Audio File”操作 基本工作流程是: 选择文本 通过“服务”菜单启动以下自动机操作 “设置变量值”输入(如所选文本)并定义为TextToSpeech “设置变量值”输入(如所选文本)并定义为文件名 “获取变量值”文件名 “运行AppleScript”
Zephyr通常,您可以使用代码末尾的“return”命令从applescript传递到下一个操作。在您的例子中,虽然自动操作“文本到音频文件”不接受文件名变量,但是如果您想要那么多的控制,您需要另一种方法。幸运的是,在applescript代码中,可以用一个简单的“say”命令轻松替换自动机操作 因此,请创建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
以下是有效的方法:
选择文本
通过“服务”菜单启动以下自动机操作
“设置变量值”输入(如所选文本)并定义为TextToSpeech
“运行AppleScript”
“设置变量值”输入(如所选文本)并定义为文件名
“获取变量值”TextToSpeech和忽略此操作的输入
“文本到音频文件”,另存为:设置为“文件名”,并设置另存为位置
“编码为MPEG音频”
结果:所选文本的音频文件,由所需语音说出,文件名设置为所选文本的前50个字符
(我增加了个字符,以减少作为工作流程一部分的重复文件名的数量。)
@规则6633:您的答案更加简洁、优雅,但我需要了解更多关于applescript如何获取输入并返回结果的信息。再次感谢。除了不确定第4步中的Applescript是否无错误外,我找不到任何关于变量如何传入/传出“Run Applescript”操作以及如何传入/传出其余操作的清晰信息。非常感谢您的帮助。你的建议加上我的反复试验,使它起了作用。万分感谢!
(choose folder) as text
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