iTunes - akcija na promjenu trenutnog tracka?
(1 korsinik/a gleda/ju temu) (1) Gost

iTunes - akcija na promjenu trenutnog tracka?


27.05.2010 | 13:31
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.
27.05.2010 | 22:41
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" ).
  • Dijete
  • Posjetitelj
27.05.2010 | 23:41
Ti si fakat altruista..
28.05.2010 | 11:07
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?
28.05.2010 | 15:27
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.
28.05.2010 | 17:05
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.
28.05.2010 | 19:30
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%).
Moderatori: Bertone
  • Stranica:
  • 1

Vikalica™

Zadnja poruka: pred 9 sati, 3 minuta
  • smayoo: piši u forum
  • user: Ako zna netko kako dobiti njihovu zadnju poznatu lokaciju to bi bilo korisno
  • user: pretražio sam sve itd.
  • user: Već sam "play sound" aktivirao, ništa
  • user: nestale mi Airpods 4, what do? Piše "No location found" u FindMy.
  • user: ljudi,
  • CoffeePod: Cijeli 26 relase je bio sramotan za Apple i morali su “double down” i back to the lab da sve tweakaju kako su trebali
  • CoffeePod: Performansi i ulickani dizajn je ono sto treba
  • CoffeePod: Iskreno ne razumjem vas kojima je ovo “dosadno”. Stvarno morate ici taknuti travu.
  • dpasaric: Objavio sam osvrt na naslovnici, pa tamo komentirajte...
  • drlovric: Meni je Siri skroz OK, upakirali su to lijepo. Ocekivano ce vecina puno ovih stvari iic na pretplatu jer trosi compute (i Gemini) resurse. Lejpse mi izgleda UI jer smanjuju prozirnost :)
  • dpasaric: Što je najbolje nećemo imati niti Siri AI jer je EU učinila sve da se to regulatorno zabrani.
  • pontmax1: A dosade, imate li nešto više od šugave SIri AI
  • drlovric: Kao da ce roditelji ovo raditi. Otkljucat ce im sve i cao.
  • drlovric: Smorise sa ovom djecom :) Nestvarno...
  • dpasaric: Za sada dosadno za poludit... :)
  • dpasaric: I ja imam niska očekivanja, pa da vidimo! :)
  • dpasaric: Kreće za 5 minuta! :)
  • drlovric: Meni su ocekivanaj jako nisko. Pricati ce o Siri, koja ce opet doci kao beta. Pa ce raditi kako treba u inacici 27.4 :) Volio bih da grijesim, ali vise im ne vjerujem na rijec.
  • ping: Bit će to zanimljiva večer. Kupio sam dvije vrečice indijskih oraščića i planiram još barem mali paket Munchmallowa.
  • dpasaric: Danas u 19h WWDC! :)
  • Riba: user, ne upisuj admin password ano ne znas tko i zasto te pita i to je u osnovi to.
  • Yonkis: U Berlinu se otvara Developer Centar [link]
  • user: kako biti siguran od virusa na Macu? Sad ću reinstalirati OS i želim biti siguran.
  • user: bok ljudi,
  • Yonkis: Mene, kao prišlića, iznenadilo koliko je puno zastupljeniji Viber nego WhatsApp a Signal skoro nitko nije ni čuo (osim jabučnjaka). Zanimljivo.
  • Riba: Za tajne stvari imam pisacu masinu. :)
  • Riba: Ja imam instalirano sve pa tko kako hoce.
  • drlovric: Sve koje znam koriste Whatsapp. Viber, je isto popularan. Kao i Telegram. Signal nije bas zastupljen u mojim krugovima :)
  • dpasaric: Hehe, odlično, ja sam odavno prebacio sve na Signal.
  • Performita: Hvala Smayoo, Kako je Davor napisao ispod članka, i ja ebo čitam knjigu i lagano sve prijatelje, osobito one koji nemaju iPhone nagovaram na Signal.
  • smayoo: svima koje znam, to jest. :)
  • smayoo: skinuo i proslijedio link svima koji su još sposobni čitati knjige... :)
  • Performita: Ekipa, idemo sad svi skinuti besplatnu knjigu Guya Kawasakija da mu na administraciji stranice pokaže kako je odjeknulo u Hrvatskoj ;-)
  • dpasaric: Jest sitni sat, ali je published! :) Uživajte!
  • Yonkis: [link]
  • Yonkis: Baš baš sve!
  • Djuro genijalac: Izgleda da je BAŠ sve ovdje
  • Djuro genijalac: [link]
  • Yonkis: Hooorayyyy [link]
  • dpasaric: Radim na tome da nabavim zanimljiv monitor za tehnički review, držite palčeve da upali jer bi moglo biti mnogima zanimljivo. :)
  • Yonkis: Font je drugačiji.
  • Performita: :-)
  • dpasaric: Pogledajte naslovnicu! :)
  • dpasaric: Taaaa-daaaa! :)
  • dpasaric: Javim uskoro... :)
  • dpasaric: Ne, ovdje na Jabučnjaku!
  • Yonkis: dpasaric - Jel' u Kokolu?
  • dpasaric: Spremamo poslasticu za večeras! :)
  • ivan.ocd: Hvala za konkretni model, budem i ja pogledao za takav neki model… imam puno knjiga koje trrba analizirati i tu je onda preslab.

Za vikanje moraš biti prijavljen.

Prijava

Novo na Jabučnjaku

Teme

Poruke

Oglasi

Anketa

Koji Mac koristite?

Page Speed 0.75 Seconds

Provided by iJoomla SEO