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" ).
  • Anonimac
  • 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 16 minuta
  • CoffeePod: [link]
  • CoffeePod: Ima li tko iskustva sa kuycon monitorima?
  • miomika: nebi niti ja preporučio RAM servis....bez da se ITKO ljuti.
  • cariblanco: Ja sam našao stari filter u boji, dok još nije bilo kolor-tv, ako netko ima crno-bijeli, ja mu taj filter poklanjam :)
  • zvone: Ljudi imam neke screen protectore za 12 pro i par caseova. Zena ima novi mob a ostali stari dodaci. Ako netko zeli pokupiti na podrucju Zagreba.
  • drlovric: Ja koristim FluidVoice diktiram vise od 70% mailove, kao i text poruka.
  • smayoo: :D
  • Bertone: Ma znam kako diktiranje funkcionira ali iskreno se ne sjećam kada sam zadnji put čuo tišinu :(
  • smayoo: To naravno da ne funkcionira ako više ljudi priča u glas ili ako ti radio svira dok pričaš.
  • Bertone: Ma to sa diktiranjem je pušiona, nevezano za poruke nekidan vozim mamu doma i trebam nešto ženu pa je pokušam nazvati no auto ponavlja da ne razumije,... na kraju sam morao reći mami da malo zašuti :D
  • smayoo: Ne smiješ diktirati kako normalno pričaš. Kad se priča usporeno i jasno razdvaoja riječi, točnost je ≥90%
  • smayoo: :-D
  • Bertone: Znam, zato često i dobijem haiku od poruka :D
  • smayoo: Diktiraj poruke u vožnji. Radi sve bolje.
  • Yonkis: Bertone, ne mogu, vozim. :)
  • Bertone: Eto današnje mladeži, vozi i piše poruke,... ajd se sad sam kazni :)
  • Yonkis: "obaviti", pobjeglo mi, naletio sam na šaht u vožnji.
  • Yonkis: Kloba, ne možemo ti ga MI aktivirati, to moraš sam bavi
  • Kloba: Pozdrav ekipa ima neki znalac da mi aktivira whats app?
  • smayoo: A propos smještanja konektora... :P
  • smayoo: U Beogradu ulazi stari deda sa štapom, klimavo i s mukom u gradski autobus, obrati se vozaču: "Mladiću reci mi gde bih mogao da smestim kosti...?", a vozač na to skoči ljutito: "Nemoj da tebi Kosta smesti!" :D
  • Bertone: Bolje i straga nego kad ga Apple smjesti ispod :D
  • jura22: I smjestila ga straga.
  • smayoo: To je sve EU standardizirala na USB-C. :D
  • jura22: Izgleda da mora biti više od dva konektora!
  • jura22: Landtag Brandenburg ih ke nabrojao: Gejevi, lezbijke, androgini, birodne osobe, trans muškarci, trans žene, rodno promjenjive osobe, rodno kvir osobe, interseksualne osobe, interseksualne žene, interseksualni muškarci, transseksualne osobe, transseksualne žene, transseksualni muškarci, trans osobe, transmuške osobe, transženske osobe, rodno fluidne osobe, panrodne osobe, osobe s dva duha (
  • jura22: Misliš da se smiju stavljati samo muški ili ženski konektori?
  • smayoo: :D
  • Riba: Po muskim i zenskim konektorima.
  • jura22: Zašto ženski robot mora imati sise? U stvari, zašto uopće postoje muški i iženski roboti? Kako ih tazlikovati?
  • smayoo: @bbosnjak, otvori temu u forumu pa pitaj da ti se jave jabučari iz Zagreba ili okolice koji imaju monitor iz te generacije da probaš s njihovom ciglom
  • smayoo: Aha, to ima vanjsku ciglu za napajanje? Pa da, onda svakako treba probati s drugom ciglom prije ikakvog servisa.
  • jura22: Sumnjam. Rekoi su neka nabavim nateriju i onda je budu zamijenili. U stvari, trebao sam je nabaviti, sam zamijeniti i inda njima odnjeti novce.
  • dpasaric: Za Cinemu 23 prvo provjeri da nije samo napajanje, 90% slučajava bude to.
  • Riba: Vjerojatno su pretrpani poslom kao i svi.
  • jura22: Vidim hvalite RAM servis. Ja sam ih pitao za promjenu baterije pa su poceli kolutati s ocima. Kao da su me htjeli otpiliti.
  • jura22: Jok, Ludbreg je centar svijeta.
  • bbosnjak: Jbg. mi Zagrebčani mislimo da smo u cetru svijeta. Hvala na linku.
  • Riba: Kad ljudi ne kazi lokaciju obicno se radi o Zagrebu. :) U tom slucaju preporuka za [link]
  • Riba: A gdje se nalazis?
  • bbosnjak: Imam Apple Cinema Display 23-Inch. Radio je ok do prije mjesec dana i prekrasan je. Imao je jednu crtu mrtvih pisela po sredini ali koga briga kad je tako elegantan i dobru sliku ima. I onda je prestao raditi. Ima li igdje servis koji bi to mogao pogledati i možda popraviti ili bi to možda netko udomio pa se time pozabavio. Ne mogu se natjerati da ga odnesem na glomaznni otpad ko da je neki šte
  • smayoo: [link]
  • Pongy75: Meni se čini i jedno i drugo, app šema. A vaditi se na bilesnu djecu, ako je to uopće istina je krajnje bezobrazno. Ovo mjesto nikad nije bila takva zajednica.
  • drlovric: Ja sam slab na djecu i radio bih pomogao i u ovom konkretnom slucaju. Vec sam to radio ovdje. Samo nisam shvatio kakvu pomoc on ocekuje konkretno. Da skupimo pare za M4 ili da mu ga nekako nadjemo unutar njegovog budzeta. Taj dio mi nije jasan...
  • Pongy75: Napad je najbolja obrana - kad te uberu!
  • Sarek: I stvarno mu nitko nije ništa loše napisao, a on je odmah krenuo u neke obrambene teze
  • Sarek: Meni je isto bilo čudno da na jasno postavljeno pitanje krenu traktati nečega što nema veze s pitanjem. Dva su moguća scenarija ili se čovjek pogubio u svemu i samo se krivo izrazio ili je stvarno neka muljaža. U svakom slučaju trebalo bi objašnjenje od dotičnog člana ili ako je ovo drugo u pitanju neka admini reagiraju
  • jura22: Tu je pitao nesto za MacMini M4 > M4 Pro
  • jura22: [link]
  • Pongy75: Avioni, milioni. kamioni

Za vikanje moraš biti prijavljen.

Prijava

Novo na Jabučnjaku

Teme

Poruke

Oglasi

Anketa

Koji Mac koristite?

Page Speed 0.46 Seconds

Provided by iJoomla SEO