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 1 dan, 14 sati
  • MacSin: OS stari do X je bio cool
  • MacSin: na poslu su svi na win lenovo aliu kad dodem doma je melem za oci ali kad treba nesto upgarde napravit tad je vec probelm
  • MacSin: OS je i dalje miljama od ostalih no sto se tice hardware to je vec diskutabilno
  • VanjusOS: neki mi javi se privatno, barem ako može kratko posuditi na probu
  • VanjusOS: ljudi, ima li možda netko viška Thunderbolt 2 to Thunderbolt 2 Cable
  • drpongrac23: Davno sam vozio "kockicu"
  • drpongrac23: @Yonkis - Kakav BMW - Uskoro kupujem za sebe Citrć Berlingo, jbg, godine...
  • drpongrac23: A zamjena ekrana preko 500 EUR!
  • drpongrac23: WTF?!? Ušle mi neke "bubice" u ekran na MBA M1. Totalni hit!!! 3 kom. BUBA ŠVABE!!!
  • Yonkis: Drpongrac23: a M5? Ne mislim na BMW.
  • drpongrac23: Preko 30 god. vjerni Apple korisnik - sada je vrijeme da zahvalim svima, ali Apple u mojim očima više nije što je nekad bio.
  • drpongrac23: Ovaj novi MacOS - bye, bye Apple!!! Ćesme od svega!
  • drpongrac23: PC za 400 EUR iz Pevexa žvače taj prastari MacPro za gablec :)
  • drpongrac23: U PC svijetu je DDR5 RAM polako standard - o čemu vi pričate?!?
  • BigMac: i ja kažem, prvo bolja pasta, nego zadnji put, i nižaa temperatura, očito prvi put nisam dobro stegao hladnjake, pa su procesori radili na nižem taktu :(
  • dpasaric: Odlično! :)
  • BigMac: Promjenio pastu na starom mac pro, osvježenje ....
  • smayoo: plus je sigurno problematičan, ali nije jedini
  • dpasaric: Više sam zaboravio koji su sve znakovi u pitanju, ali u tome je stvar.
  • dpasaric: I meni se često dogodi na nešto napišem i samo PUF!
  • dpasaric: Jura, na Vikalici se "progutaju" neki komentari jer postoje neki karakteri koje modul Vikalice ne podnosi i onda to sve samo ode u crnu rupu!
  • jura22: Mozda nezasitan?
  • VanjusOS: evo ja sam isprobao i radi! na A1 je moguće sa fizičke SIM prebaciti se na e-SIM na samom telefonu..
  • Borisone: Jer je gladan!
  • jura22: Zasto Jabucnjak guta komentare?
  • smayoo: :D
  • Borisone: Kako prebacuješ eSIM između moba za koji žena smije i za koji ne smije znat?
  • VanjusOS: ali bravo drlovric, nekad su najjednostavnija rješenje i najbolja!
  • VanjusOS: hahaha, problem je što imam službenu SIM karticu, pa ako mi se sjebe moram tražiti od firme da mi šalju novu...
  • drlovric: Pa probas i samo ce ti se kazati jbt. Sta je najgore sto se moze dogoditi? :)
  • VanjusOS: pitam da li je to itko isprobao?
  • VanjusOS: u iphoneu sa fizičkom sim karticom se pojavila opcija da se prebaci ta fizička sim u e-sim
  • VanjusOS: niste me shvatili, očito
  • miomika: na A1 ti samo pošalju na mail/sms ili putem aplikacije Moj A1 i to je to
  • rusty: Prije jedno 3 godine na Tmobile. u 22h navečer putem supporta jer se u protivnom trebalo ići u poslovnicu
  • VanjusOS: da li je netko isprobao funkciju konvertiranja SIM u e-SIM, i na kojoj mreži?
  • ZoPaj: ha ha, nisu li usbC isforsirali upravo radi štednji na punjačima:)
  • dpasaric: I bez punjača... :(
  • Borisone: Danas najavljeni novi iPad Pro, Vision Pro i MacBook Pro 14-inch. Sve s M5 procesorima (bez Pro i Max varijanti).
  • Air: Veliko priznanje Fedora našem Filipoviću - pozvao ga je na boksački meč.
  • Air: Taj pc laptop je imao cijenu cca 800 eura što nije malo
  • Air: Mislio sam da su se malo pomakli u tom smjeru, ali jok
  • Air: trackpad je... hm...
  • Bertone: Rekao sam ti da je kvaliteta izrade loša, ali sam CPU je brži od CPU-a iz MBP 2014/2015,... stavi na njega LinuxMint pa ćeš vidjeti da nije spor ;)
  • Air: Moj MBP 2014 je ferari / Bentley za usporedbu...
  • Air: Moj utisaK da sam ga platio 100-150 eura plakao bi što nisam dao još 150 za MBP 2014 - 2016 godište.
  • Air: Samo da javim, na kraju sam dobio laptop od frenda. Nije htio čuti za nikakve pare. Skro smo se posvađali ali eto pametniji popušta ;)
  • hal9000: Steve Jobs, vrati se! Sve ti je oprošteno! [link]
  • hal9000: Kakva pizdarija: [link]
  • drpongrac23: Meni onaj sa uzorkom krzna leoparda

Za vikanje moraš biti prijavljen.

Prijava

Prisutni jabučari

Novo na Jabučnjaku

Teme

Poruke

Oglasi

Komentari

Anketa

Koji Mac koristite?

Page Speed 0.43 Seconds

Provided by iJoomla SEO