Выбор всех треков в iTunes с AppleScript - PullRequest
2 голосов
/ 07 января 2011

У меня есть очень простой AppleScript, который я пытаюсь запустить на своем Mac, чтобы удалить оценки из всех моих песен в iTunes:

tell application "iTunes"
    set sel to every track in library playlist
    repeat with i from 1 to the count of sel
        set rating of track i in sel to 0
    end repeat
end tell

Я никогда раньше не писал ничего в AppleScript, нодумал, что я бы попробовал (так как это должно быть настолько интуитивно понятно).К сожалению, я получаю эту ошибку при попытке запустить скрипт:

error "Can’t get every track of library playlist." number -1728 
from every «class cTrk» of «class cLiP»

Что это за ошибка?Есть ли альтернативный способ выбора треков в iTunes?Спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 07 января 2011

Я не совсем понимаю, почему, но ответ таков: список воспроизведения библиотеки на самом деле не содержит дорожек.Странно, я знаю, но так как вы просто хотите запустить это на каждом треке, есть еще более простое решение.Вместо every track of library просто используйте every track;это буквально получит каждый трек в приложении, что вы и пытаетесь сделать.И с некоторыми другими упрощениями это становится

tell application "iTunes" to set the rating of every track to 0

Синтаксис tell application "iTunes" to ... подобен обычному блоку tell, но это только одна инструкция длиной и не занимает end tell.И вы можете автоматически запускать команду set для каждой записи в списке сразу, так что это все, что вам нужно.В общем, вам редко нужно перечислять через индексы;например, для чего-то более близкого к вашему решению, есть эквивалент

tell application "iTunes"
  repeat with t in every track
    set the rating of t to 0
  end repeat
end tell

Это позволяет избежать индексации и, скорее всего, будет быстрее (хотя однострочник, вероятно, будет быстрее, , если есть разница)

1 голос
/ 07 января 2011

Вы были дезинформированы: AppleScript не очень интуитивно понятен, в первую очередь потому, что большая часть наблюдаемого поведения определяется реализацией каждого приложения своей объектной модели.Хотя он может быть очень мощным, вам часто приходится экспериментировать, пока вы не найдете правильные заклинания, которые подходят для конкретного приложения.

В этом случае вам необходимо выбрать первый элемент списков воспроизведения.Обратите внимание на различия:

get library playlist
    Result:
        library playlist  -- the class
get library playlists
    Result:
        {library playlist id 51776 of source id 67 of application "iTunes"} -- a list
get first library playlist
    Result:
        library playlist id 51776 of source id 67 of application "iTunes" -- first item

Но то, что вы, вероятно, хотите сделать, выглядит примерно так:

tell application "iTunes"
    repeat with tr in every track in first Library playlist
        set rating of tr to 60  -- values are 0 to 100
    end repeat
end tell

Если у вас большая библиотека, вы можете сначала поэкспериментировать снапример, меньший список воспроизведения, выберите дорожку в тестовом списке воспроизведения и затем подставьте in current playlist в оператор repeat.

...