使用afplay和相对文件路径使用AppleScript播放声音

时间:2015-06-11 18:50:14

标签: macos applescript finder

我正在尝试创建一个使用afplay(如suggested here)播放随机声音文件的AppleScript,该文件位于与脚本相同的目录中的目录中。

folder
-- applescript.scpt
-- sounds
----- sound-x.aiff

我发现this comment关于可能有用的相对路径:

 (POSIX path of (path to me))

但是,当我尝试使用this approach for randomness ...

进行混搭时,我一直收到错误
set theNumber to 3

set theFiles to {}
repeat
    set file_path to quoted form of (POSIX path of (path to me))
    tell application "Finder" to set aFile to (some file of file_path & "/sounds_dir") as text
    if aFile is not in theFiles then
        set end of theFiles to aFile
        tell application "Finder" to open file aFile
        do shell script ("afplay " & file_path & " > /dev/null 2>&1 &")
    end if
    if (count of theFiles) is equal to theNumber then exit repeat
end repeat

2 个答案:

答案 0 :(得分:1)

你的路径都搞砸了。 Applescript没有使用" posix路径"因此,您无法将此类路径传递给Finder等应用程序。 Shell脚本确实使用posix路径,你必须引用它们。

除了AppleScript之外,每当你的路径是字符串格式时,你必须把单词" file"或"文件夹"在使用它之前在路径前面,以便AppleScript可以理解它是一个被操作的对象,否则applescript只会把它当成一个字符串。 applescript中的字符串路径也应该是冒号分隔(:)而不是斜杠分隔(/)。最后,applescript路径以您的硬盘名称开头,例如" Macintosh HD"。

您可以看到,必须使用与shell相同的方式处理AppleScript中的路径。无论如何,我没有测试这段代码,但使用这些基本规则应该可行。祝你好运。

set theNumber to 3

set theFiles to {}
repeat
    set file_path to (path to me) as text
    set file_dir to file_path & ":sounds_dir:"
    tell application "Finder" to set aFile to (some file of folder file_dir) as text
    if aFile is not in theFiles then
        set end of theFiles to aFile
        tell application "Finder" to open file aFile
        do shell script "afplay " & quoted form of POSIX path of aFile & " > /dev/null 2>&1 &"
    end if
    if (count of theFiles) is equal to theNumber then exit repeat
end repeat

答案 1 :(得分:1)

script中,path to me会将path返回给script file,但我们需要parent path才能添加{ {1}}。

要构成正确的路径,我们可以使用子程序composeFilePath(fileName)

主要动作在重复循环中。我还添加了sub path,因此更容易测试。 在使用之前保存脚本,因为delay在未保存时会返回错误的路径。

path to me