Forum
Dobrodošao, Gost
Molimo Prijava ili Registracija.    Izgubljena lozinka?
iTunes - akcija na promjenu trenutnog tracka?
Idi na dno Označenih tema: 0
TEMA: iTunes - akcija na promjenu trenutnog tracka?
Admin
Poruka: 4855
graphgraph

iTunes - akcija na promjenu trenutnog tracka? prije 1 Godina, 8 Mjeseci Karma: 176  
Dakle želio bih informaciju o trenutnom tracku u iTunesu poslati nekamo. Sva Applescript rješenja koja sam našao počivaju na tome da se skripta pokreće svake minute ili dvije da pokupi tu informaciju. To mi nikako ne odgovara - postoji li način da se skripta izvrši onda kada treba, tj. svaki put kada počne play ili kada se promijeni track? Automator, bilo što? Tnx.
| Administrator je onemogućio pisanje neprijavljenim korisnicima.
Poruka: 681
graphgraph

iTunes - akcija na promjenu trenutnog tracka? prije 1 Godina, 8 Mjeseci Karma: 102  
Dakle želio bih informaciju o trenutnom tracku u iTunesu poslati nekamo. Sva Applescript rješenja koja sam našao počivaju na tome da se skripta pokreće svake minute ili dvije da pokupi tu informaciju. To mi nikako ne odgovara - postoji li način da se skripta izvrši onda kada treba, tj. svaki put kada počne play ili kada se promijeni track? Automator, bilo što? Tnx.
Skoro sam promašio ovo!

global lastTrack

on run
  set lastTrack to -1
end run

on idle
  tell application "iTunes"
    try
      if player state is playing then
        if current track's database ID is not lastTrack then
          -- track has changed
          set lastTrack to current track's database ID
          beep
        end if
      else
        -- do nothing/something when idle
      end if
    end try
  end tell
  return 0.1 -- interval
end idle
Obavezno snimi skriptu kao "Application" i među opcijama odaberi "Stay Open". Skripta koristi dva handlera: run i idle s kojima glumi "observera". Kad je pokreneš, izvrši se "on run" i samo postavi varijablu "lastTrack" na -1.

"On idle" se izvršava dok ne quitaš aplikaciju, a interval diktira broj nakon returna pri kraju skripte (return 0.1 znači 1/10 sekunde). Try blok se brine da aplikacija ne pukne ako iTunesi nisu dignuti. Ako su dignuti, provjerava da li svira isti track koji je svirao i "malo prije" (1/10 sekunde ranije), pohranjuje novi track u "lastTrack" i beepne - umjesto beepa možeš ubaciti neki suvisao kod koji će obaviti to što trebaš kad se promjeni track. U else blok možeš smjestiti kod koji će izvršiti dok je skripta idle (dakle, dok čeka promjenu tracka).

Nije najoptimalnija skripta na svijetu - bila bi da se zakači na iTunesov notification center pa da reagira isključivo na željeni event, promjenu tracka, bez da testira uvjet u svakom intervalu čekanja.

E, da... ako pokušaš quitati iTunes dok skripta radi, sama će ga ponovo dignuti pa prvo quitaj skriptu pa tek onda iTunes. Alternativa bi bila dodati u skriptu testiranje da li je iTunes uopće dignut pa ako nije, preskočiti obraćanje iTunesu ili pak quitati samu skriptu (da se ne izvršava "u prazno" ).
| Administrator je onemogućio pisanje neprijavljenim korisnicima.
Poruka: 1497
graphgraph

iTunes - akcija na promjenu trenutnog tracka? prije 1 Godina, 8 Mjeseci Karma: 59  
Ti si fakat altruista..
puno jabuka i maca... www.ajetoragdoll.com
| Administrator je onemogućio pisanje neprijavljenim korisnicima.
Admin
Poruka: 4855
graphgraph

iTunes - akcija na promjenu trenutnog tracka? prije 1 Godina, 8 Mjeseci Karma: 176  
Znam za to ali to nije ono što sam tražio. Ja ne želim skriptu koja stalno polla iTunes, već želim da iTunes pošalje event skripti. Dakle to nije moguće? U tom slučaju moj flert sa Applescriptom će biti zaista kratkog vijeka.
Postoji li neki drugi način da iTunes pokrene applescript kod promjene tracka?
| Administrator je onemogućio pisanje neprijavljenim korisnicima.
Poruka: 681
graphgraph

iTunes - akcija na promjenu trenutnog tracka? prije 1 Godina, 8 Mjeseci Karma: 102  
Znam za to ali to nije ono što sam tražio. Ja ne želim skriptu koja stalno polla iTunes, već želim da iTunes pošalje event skripti. Dakle to nije moguće? U tom slučaju moj flert sa Applescriptom će biti zaista kratkog vijeka.
Postoji li neki drugi način da iTunes pokrene applescript kod promjene tracka?

Zbunjuješ me. U prvoj poruci si napisao da ti ne paše "da se skripta pokreće svake minute ili dvije da pokupi tu informaciju". Zaključio sam (ne nužno ispravno) da ti ne paše iz dva razloga: predug interval između dva poziva skripte i overhead koji donosi pokretanje skripte uvijek iznova. Rješenje koje sam naveo rješava oba problema jer se konkretna skripta pokrene samo jednom i ne radi ništa osim što vrti vlastiti run loop (on idle) i u njemu provjerava svira li još uvijek isti track ili je došlo do promjene. Kad dođe do promjene, pokreće onaj dio koda u kojem je "beep". Umjesto toga možeš umetnuti kod koji pokreće neku desetu skriptu. Bottom line: skripta glumi sustav za distibuciju iTunesovih notificationa (implementiran je samo jedan, zovimo ga "on track change" ). Zašto ti nije upotrebljivo takvo rješenje? Znatiželjan sam.

Što se pak tiče "pravih" notifikacija, da, moguće su. Zakačiš se za Notification Center, "slušaš" i reagiraš kad stigne notifikacija.

U Cocoa aplikaciji (trebat će ti Xcode) to izgleda ovako nekako (zamijeni defaultni main.m sa kodom u nastavku, buildaj i pokreni):


#import <Cocoa/Cocoa.h>

@interface iTunesLink : NSObject
- (id) init;
@end

@implementation iTunesLink
- (id) init {
    NSDistributedNotificationCenter *dnc = [NSDistributedNotificationCenter defaultCenter];
    [dnc addObserver:self selector:@selector(trigger:) name:@"com.apple.iTunes.playerInfo" object:nil];
    return self;
}

- (void) trigger:(NSNotification *)notification {
    NSString *myScript = [NSString stringWithFormat:
        @"tell application \"Finder\"\ndisplay dialog (\"iTunes mi želi nešto reći!\")\nend tell"];
    NSAppleScript *as = [[[NSAppleScript alloc] initWithSource:myScript] autorelease];
    [as executeAndReturnError:nil];
}
@end

int main(int argc, char *argv[])
{
iTunesLink *connection;
connection = [[[iTunesLink alloc] init] autorelease];
return NSApplicationMain(argc, (const char **) argv);
}


Da li je moguće isto to u AppleScriptu? Je, ali kao Cocoa AppleScript aplikacija (kompajlirano). Kad kreiraš projekt, u NazivProjektaAppDelegate.applescript, umjesto onoga što je defaultno u njemu, umetneš ovo (gornji koncept, "preveden" u AppleScript), buildaš, pokreneš:


script NazivProjektaAppDelegate
property parent : class "NSObject"
property dnc : class "NSDistributedNotificationCenter"

on awakeFromNib()
set dnc to dnc's defaultCenter
tell dnc to addObserver_selector_name_object_(me, "trigger:", "com.apple.iTunes.playerInfo", missing value)
end awakeFromNib

on trigger_()
display dialog ("iTunes mi želi nešto reći!")
end trigger_

on applicationWillFinishLaunching_(aNotification)
-- Insert code here to initialize your application before any files are opened 
end applicationWillFinishLaunching_

on applicationShouldTerminate_(sender)
-- Insert code here to do any housekeeping before your application quits 
return current application's NSTerminateNow
end applicationShouldTerminate_
end script

U oba slučaja (Obj-C i AppleScript) dodaješ observer iTunesima koji trigga "trigger" metodu/handler kad iTunes pošalje notifikaciju. U "pravom" programu bi trebalo obraditi notifikaciju, da znaš što ti je iTunes zapravo rekao (ovo gore će reagirati na Play/Pause/Next Track...), a poželjno je i removati observera kad quitaš aplikaciju.
| Administrator je onemogućio pisanje neprijavljenim korisnicima.
Admin
Poruka: 4855
graphgraph

iTunes - akcija na promjenu trenutnog tracka? prije 1 Godina, 8 Mjeseci Karma: 176  
Djipi je napisao:
Zbunjuješ me. U prvoj poruci si napisao da ti ne paše "da se skripta pokreće svake minute ili dvije da pokupi tu informaciju". Zaključio sam (ne nužno ispravno) da ti ne paše iz dva razloga: predug interval između dva poziva skripte i overhead koji donosi pokretanje skripte uvijek iznova. Rješenje koje sam naveo rješava oba problema jer se konkretna skripta pokrene samo jednom i ne radi ništa osim što vrti vlastiti run loop (on idle) i u njemu provjerava svira li još uvijek isti track ili je došlo do promjene. Kad dođe do promjene, pokreće onaj dio koda u kojem je "beep". Umjesto toga možeš umetnuti kod koji pokreće neku desetu skriptu. Bottom line: skripta glumi sustav za distibuciju iTunesovih notificationa (implementiran je samo jedan, zovimo ga "on track change" ). Zašto ti nije upotrebljivo takvo rješenje? Znatiželjan sam.

Zato jer sam po netu čitao da taj idle u applescriptu zna žderati CPU a to je problem nama sa vintage strojevima. Proučit ću ova alternativna rješenja.
| Administrator je onemogućio pisanje neprijavljenim korisnicima.
Poruka: 681
graphgraph

iTunes - akcija na promjenu trenutnog tracka? prije 1 Godina, 8 Mjeseci Karma: 102  
Zato jer sam po netu čitao da taj idle u applescriptu zna žderati CPU a to je problem nama sa vintage strojevima.
Taj dio je istina. Ono prvo AppleScript rješenje troši 4x više CPU (čak 23% na mom stroju) od samih iTunesa (5-6%) , što je apsurd. No, zato ovo "ozbiljno", s observerima ne troši skoro ništa (CPU usage u mu je ~0%).
| Administrator je onemogućio pisanje neprijavljenim korisnicima.
Idi na vrh

Novo na Jabučnjaku

Komentari

Prijava

Vikalica™

Poruka primljena: pred 4 sati, 41 min
  • BB: :)
  • metalni: hvala!
  • BB: Pogledaj u poruke :)
  • metalni: zanima me ili dan brown ili mario puzo
  • BB: A kako da znam što je tebi zanimljivo? Hoćeš 12. planet?
  • metalni: Ako imaš šta zanimljivo pošalji :)
  • BB: Ja sam našla svašta na engleskom, a ponešto i na hrvatskom, ali moram potražiti te linkove...
  • metalni: na hrvatskom
  • metalni: Da li tko zna gdje ima e-knjiga ili pdf-a beletristike za skinuti?
  • smayoo: Da
  • kinsif: ufff... :) thx! nego kratko pitanje, kad povucem timemachine backup, dali povlacim i update koji je bio na starom macu? 10.7.2 konkretno.
  • smayoo: jelda je sexy mala mašina? ;) Uživaj!
  • kinsif: stigao mini konacno! koje veselje :D
  • scarface32: john sto brzi oporavak ti zelim
  • john_st: hvala boris, hvala smayoo :)
  • smayoo: Samo hrabro, john_st! Sjeti se da uvijek može gore! ;)
  • boriskr: @john_st-želim ti da što prije možeš ležati kako hoćeš: na trbuhu, na glavačke, na oba ramena istovremeno. Puno sreće!
  • john_st: @boris - da, samo jednom. i to šta je najčudnije od svega, na ono na kojem sam operiran :eek: kad se okrenem na lijevi bok imam osjećaj ko da mi iznutrice plešu i dođe mi muka.
  • H2O: nekoliko puta ponovljeno 'clear browsing data' + quit chrome + start chrome izgleda da je izlječilo boljku
  • H2O: Riba, probao sam resetirati safari i obrisati cache, ali u chrome i dalje ne radi. u safariju ide ok, u chrome sve normalno osim na jabučnjakovim stranicama blokirava i izbacuje "Aw, Snap!"
  • Nikola_Kala: da ali ne nadjem ja to xD meni treba ako znas xD gledo sam ali ne nadem a i neda mi se traziti samo me zanima zna li tko !
  • BB: Ima, stavila sam ti tamo link :)
  • Nikola_Kala: ima koga ?
  • boriskr: john_st, samo na jednom?
  • H2O: jučer sam čuo na jednom predavanju da postoji nekakav problem oko virtualbox-a + "ostali OS" kad je Mac u pitanju jer se na Apple strojevima po licenčnim pravima ne smije koristiti non-Apple software. koliko ima u tome istine?
  • DrAle: @BB onda imaš pravo. Nedostaje odgovor za tvoj slučaj.
  • BB: @DrAle: ne slažem se - ne kupujem ništa, a odobri ih onaj tko ih nudi (npr. Cydia, BigBoss itd.). I nije to samo moj slučaj :)
  • DrAle: @BB OK, nisam baš u toku s time, znam da nekada nije bilo tako. BTW imaš odgovor "Da, zbog kupovine neodobrenih aplikacija", tu bi spadao tvoj slučaj. Nisu odobrene, no valjda mogu biti legalne.
  • BB: @DrAle: Jailbreak je legalan, odobravao ga Apple ili ne, a time onda i programi...
  • john_st: jeeeej mogu spavati na boku 8) a i rame popušta :roll:

Moraš biti prijavljen!

Prisutni jabučari

Prijavljeni: BB, culo23, Hackerivs
Anonimaca: 30

Anketa

Jailbreakate li svoj iOS uređaj?

Apple novosti


0.2115