iTunes Scripting Bridge - Как воспроизвести определенную дорожку

Я пишу приложение для Mac, которое использует мост сценариев для управления iTunes. Я сгенерировал заголовочный файл iTunes.h, и объект SBApplication может рассказывать мне самые разные замечательные вещи.

Однако команды кажутся очень ограниченными. Есть функция "playpause", но я не вижу возможности сделать это

// iTunes - это мой объект SBApplication [iTunes play: @ "Smoke On The Water"];

Applescript для этого довольно простой

скажите iTunes play songName

и этот мост сценариев должен быть для меня супер крутым и мощным способом управления объектами, доступными для сценариев в Objective C, так что же мне здесь не хватает?


person Tom Schulz    schedule 27.08.2010    source источник


Ответы (2)


Найдите в Интернете эквивалентные фрагменты кода AppleScript или просмотрите словарь сценариев iTune в приложении AppleScript Editor. Затем преобразуйте полученный сценарий в команды сценария моста. Возможный эквивалент AppleScript:

tell application "iTunes"
    play first item of (search first library playlist for "Smoke On The Water")
end tell

P.S. Возможно, вам будет проще работать с objc-appscript (или, если Objective C не является требованием, его кузены, py-appscript или rb-appscript).

person Ned Deily    schedule 27.08.2010
comment
+1 за предложение разобрать исходный Applescript и перенести оттуда. Это лучший способ найти решение этих различных проблем с мостом сценариев (включая py-appscript в этом определении). - person Philip Regan; 29.08.2010
comment
Я не совсем понимаю, что вы имеете в виду, говоря о переводе полученного сценария в команды сценария моста. Я понимаю пример applescript, я просто не знаю, как выполнить applescript с помощью моста сценариев. - person Tom Schulz; 07.09.2010

Вам нужно просто отправить сообщение «playOnce: (BOOL)» в свой объект iTunesTrack. Вот пример:

iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
iTunesPlaylist *playlist = [iTunes currentPlaylist];
SBElementArray *tracks = [playlist tracks];
[[tracks objectAtIndex:0] playOnce:YES];

Будет воспроизведена первая дорожка в текущем списке воспроизведения. Адаптируйтесь к вашей ситуации.

person inket    schedule 13.01.2011