Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String “使用自动机”;运行Applescript";变量_String_Variables_Applescript_Truncate_Automator - Fatal编程技术网

String “使用自动机”;运行Applescript";变量

String “使用自动机”;运行Applescript";变量,string,variables,applescript,truncate,automator,String,Variables,Applescript,Truncate,Automator,请求帮助截断/修剪automator操作中的字符串,该操作用于从大约30个字符到800个字符的文本选择中创建文本到语音音频文件,对于文件名来说,文本选择太长 简而言之,我试图将字符串截断为30个字符,并将其作为文件名传递给“Text to Audio File”操作 基本工作流程是: 选择文本 通过“服务”菜单启动以下自动机操作 “设置变量值”输入(如所选文本)并定义为TextToSpeech “设置变量值”输入(如所选文本)并定义为文件名 “获取变量值”文件名 “运行AppleScript”

请求帮助截断/修剪automator操作中的字符串,该操作用于从大约30个字符到800个字符的文本选择中创建文本到语音音频文件,对于文件名来说,文本选择太长

简而言之,我试图将字符串截断为30个字符,并将其作为文件名传递给“Text to Audio File”操作

基本工作流程是:

选择文本 通过“服务”菜单启动以下自动机操作

  • “设置变量值”输入(如所选文本)并定义为TextToSpeech
  • “设置变量值”输入(如所选文本)并定义为文件名
  • “获取变量值”文件名
  • “运行AppleScript”

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

  • “获取变量值”TextToSpeech
  • “文本到音频文件”,另存为:设置为“文件名”
  • “编码为MPEG音频”
  • 非常感谢您的任何帮助/建议

    问候,


    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