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 17 sati, 8 minuta
  • jmustac: poslano
  • Riba: Javi se meni s detaljima.
  • jmustac: kako obrisati profil na ovom forumu?
  • rusty: @marioart - ovisi o hipervizoru, ali ukratko da. Moguće je dobiti emulaciju x86 na ARM bare metal stroju. UTM hypervisor kojeg osobno koristim nudi u mogućnost. Jasno, to zovu emulacijom, ne virtualizacijom ali eto
  • marioart: @rusty .. moze li se ikako dobiti x86 win kroz virtualizaciju?
  • stefanjos: drlovric. pa odgovaranje poruka na aplikacijama koje namu mac app i ako se puni da ne secem po mob, rijesim preko maca i to je to
  • rusty: Virtualizacija bi bio moj odabir, e sada da li je besplatno ili ne, ovisi o tome kako ćeš tu kopiju licencirati
  • VanjusOS: ima li nekakav besplatni način za imati Windows na Macbook sa M čipovima?
  • drlovric: Za sta ti konkretno mirroring sluzi? Ja mu nisam nasao primjenu :/
  • stefanjos: affinty na popustu 50%. ja sam si uzeo novu licensu. do sada sam bio na v1
  • stefanjos: tako da, meni je to top feature
  • stefanjos: ja imam australski app store i iphone mirroring koristim svaki dan
  • drlovric: To ces probati jednom i nikad vise. Nema razloga za biti razocaran :)
  • Zdravac: - NIJE :/
  • Zdravac: Jel proradio iPhone Mirroring? :)
  • Yonkis: iOS 18.1.1 / macOS Sequoia 15.1.1 [link]
  • kupus: pretpostavljam da to ide meni, znaci fino radi.
  • kupus: hahaha
  • drlovric: Znas kako lijepo klepece. Mozes i mijenjati zvuk. Merak pravi ????????
  • kupus: svejedno hvala smayoo
  • smayoo: Ma nemoj me zajebavat... :D
  • drlovric: Prekrasna aplikacija ako zelite zvuk fancy mehanicke tipkovnice :) [link]
  • drlovric: I ja to ocekujem. Na proljece cu u USA i iskreno se nadam da ce izaci do tada. Da donesem makar dva komada :)
  • Borisone: Osim ako nisi na ti s Tim Cookom, najbliže nagađanju kada je: [link]
  • VanjusOS: zna li netko, hoće li izaći uskoro Air sa M4 čipom?
  • smayoo: Pokušao sam, ali sam odustao kad me zavrtio u krug s registracijom i sign-inom na Epic games. Najprije kaže da može iskoristiti moj AppleID, kad napravi login preko AppleID i kažem da ne želim pokazati svoj AppleID onda me opet svejedno traži login. Tako da... sorry, ne bih.
  • kupus: hvala
  • kupus: moze li netko probat ovaj besplatan virtualan masterpiece na m macovima? [link]
  • ping: @drlovric imaš besplatne konvertere na netu pdf to excel ili konvertiraj u jpeg pa potrazi online free konverter ocr to excel
  • drlovric: nemam Acrobat....smo PDF Exprt i Wondershare.... Raspadne se na oba
  • drlovric: Daj mi mail na poruku pls, pa da ti posaljem....a kakav Pentagon, prosla su ta vremena, glupost neka :)
  • Zdravac: negdje ju uploadaj, pošalji mi link pa ak hoćeš, da vidimo kak će ispasti (osim ako nisu neke secret Pentagon pi*darije :)
  • Zdravac: @drlovric - "export to excel" ?! Adobe acrobat
  • drlovric: Imam fakturu u PDF, htio bih od nje napraviti Excel file. Sta da radim? :)
  • mariolino1971: Pozdrav. Pokušavam poslati oglas no stalno dobivam poruku 413 Request Entity Too Large. U čemu je problem?
  • kupus: UK korisnici vs Apple [link]
  • Yonkis: Jeste li znali da se iPhone sam reboota ako nije otključan u 72 sata? [link]
  • Yonkis: jeste čitali komentare na [link]
  • Ender: takodje zainteresovan za neki IPTV, predlog moze u PM.
  • cariblanco: Ako hočeš ja ti svog "provajdera" kojeg koristim 4-5 godina, pošaljem na pp ?
  • cariblanco: Kako veli Zdravac dobar iptv za 10 E i imaš sve i gdjedaš od kud hočeš. Meni je to jako važno pošto puno putujem, trebam samo dobar net i mirna bosna
  • drlovric: Moj Telemach nema Arene vec Sport Klubove....ali postoji kabelska u zgradi koja ima Arene, preko koaksijalnog kabela.... Pa sam se tehnloski vratio deteljece unatrag. Ali radi evo :)
  • Zdravac: Ali to je paket ex yu kanala, nema samo sport vec sve
  • Zdravac: Kvalitetni, koji mogu preporučiti 10 eur/mj
  • Zdravac: Ima, iptv
  • kupus: hometv to go ili kako već
  • kupus: znači ide i eronet aplikacija
  • kupus: u bih prava ima arenasport ako se ne varam
  • drlovric: Jel ima neki nacin da se HNL Supersport liga gleda online? Neki app? Streaming? Iptv?
  • cariblanco: Prošlo iz petog pokušaja...bit će da je Riba na suhom ;)

Za vikanje moraš biti prijavljen.

Prijava

Prisutni jabučari

Novo na Jabučnjaku

Teme

Poruke

Oglasi

Komentari

Anketa

Koji Mac koristite?

Page Speed 1.15 Seconds

Provided by iJoomla SEO