我正在尝试创建一个使用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
答案 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