Можно ли запустить встроенный звуковой эффект корзины через AppleScript?

Если какой-либо файл перемещается в папку «Корзина» на Mac, по умолчанию через аудиовыход Mac воспроизводится короткий звуковой эффект (при условии, что системный звук не отключен).

У меня есть файл .scpt, в котором ничего не перемещается в папку «Корзина», но я все же хотел бы, чтобы звуковой эффект «Корзина» воспроизводился.

Я понимаю, что могу загрузить звуковой эффект на свой компьютер в виде аудиофайла из Интернета, и написать:

do shell script "afplay /Users/Me/Desktop/TrashSoundEffect.aiff"

Однако я бы предпочел сослаться на встроенный звуковой эффект Trash. Это возможно?

Мне просто не нравится идея полагаться на дополнительный файл для правильной работы AppleScript. Встроенный звуковой эффект более надежен, так как он гарантированно останется на моем компьютере на неопределенный срок.

Ответы (1)

Как насчет этого:

do shell script "afplay '/System/Library/Components/CoreAudio.component/Contents/SharedSupport/SystemSounds/dock/drag to trash.aif'"

Обновлять:

Чтобы ответить на ваш комментарий, это описано в Техническом примечании TN2065 - выполните сценарий оболочки в AppleScript в разделе «Другие проблемы» , где говорится:

"... как сделать так, чтобы скрипт оболочки не ждал завершения команды?"

Используйте do shell script \"command &> file_path &\". do сценарий оболочки немедленно вернется без результата, и ваш сценарий AppleScript будет работать параллельно с вашим сценарием оболочки. Вывод сценария оболочки попадет в file_path; если вас не волнует вывод, используйте /dev/null.

Пример:

do shell script "afplay '/System/Library/Components/CoreAudio.component/Contents/SharedSupport/SystemSounds/dock/drag to trash.aif' &> /dev/null &"
Это прекрасно работает. Я замечаю, что сценарий «приостанавливается» до тех пор, пока звуковой эффект полностью не закончится. Знаете ли вы, как заставить скрипт перейти на следующую строку, как только ваша строка сработает? Другими словами, возможен ли without waiting for completionэффект -type для afplayкоманды?
может tryблок? [просто предположение, я никогда не проверял его.]
Сфера @rubik, я обновил ответ, чтобы скрыть ваш комментарий.
@Tetsujin, try блок операторов ничего не сделает с тем, что было задано сферой рубинов в его комментарии. Пожалуйста, удалите свой комментарий, спасибо.
@user3439894 user3439894 С вашим обновленным ответом скрипт все еще ждет, пока аудиофайл полностью не воспроизведется, прежде чем перейти к следующей строке кода. Я подтвердил это, заменив короткий аудиофайл «перетащить в корзину.aif» на аудиофайл длиной 3 минуты, и сценарий был приостановлен на 3 минуты.
@rubik's сфера, Извините, опечатка, не скопировал &перед >. Я обновил ответ.
Тому, кто только что проголосовал против моего ответа, пожалуйста, укажите законную причину для этого. Мой первоначальный ответ технически правильно ответил на исходный заданный вопрос, и я обновил его, чтобы обработать постфактумный комментарий от ОП. Я даже процитировал Техническую записку TN2065 - сделать сценарий оболочки в AppleScript, и хотя в моем обновленном примере команды изначально была опечатка, которая теперь исправлена, у вас нет законных оснований для того, чтобы проголосовать за мой ответ!
@user3439894 user3439894 Ваш обновленный ответ теперь работает как нужно. Сценарий выполняет следующую строку сразу после запуска аудиофайла. Спасибо!