
Fin da quando ho iniziato a utilizzare i primi computer dotati di un minimo di capacità multimediali – più o meno dai tempi dell’Amiga, quindi – mi sono sempre prodigato per trovare soluzioni che mi consentissero di gestire la musica in modo semplice e pratico.
Bla bla bla… arriviamo a un paio di giorni fa: quando lavoro al computer non riesco a farlo senza un sottofondo musicale, e quel sottofondo musicale è sempre stato iTunes (che adesso, da qualche anno, si chiama Music). All’interno ho qualcosa come trent’anni di brani che nonostante la mia natura precisina e perfezionista non ho ancora perfettamente classificato come dico io. Parlo proprio di voti: brani bellissimi, belli, carini, così così. Quelli brutti no, perché li cancello. Mi è sempre servita una utility che mi permettesse di assegnare velocemente un voto (o cambiarlo, perché negli anni si modificano anche i gusti personali) durante l’ascolto; passare tutte le volte dall’applicazione è una rottura e una seccante fonte di distrazione.
Su macOS esistono diversi programmini che si posizionano sulla barra dei menu; con un semplice clic, mostrano le informazioni sul brano in riproduzione e offrono controlli rapidi. Però ognuno di loro ha un approccio diverso: uno mostra solo il titolo, un altro solo la valutazione, mentre un terzo offre tutto ma non ti permette di votare. Un altro ancora ti lascia votare, ma non mostra il nome dell’album. E sebbene alcuni facciano tutto e di più, spesso le funzioni che ti servono sono solo una piccola parte, e non puoi nascondere il resto delle opzioni superflue.
Naturalmente non mi stava bene e, dopo lungo cercare, ho trovato un programma che faceva al caso mio: Xbar. No, non è un’estensione musicale, è un aggregatore di script. Va visto come una sorta di playground dove tu programmi istruzioni e lui le esegue, come i robottini motorizzati anni ’80, che gli dicevi “vai avanti per tre metri, gira a destra, suona l’allarme, poi torna qui”. Xbar ti permette di fare cose e vedere gente. No, vedere gente no, ma fare cose sì. E poi molta gente non è nemmeno tanto bella da guardare.
Ok, mi sono detto. Non devo fare niente di complicato: voglio che sulla barra del menu compaia il nome del brano musicale in riproduzione e che, cliccandoci sopra, possa assegnargli una valutazione che va da zero a cinque stelline; quanto ci vorrà mai? Un’oretta di lavoro…
Sì, il cazzo…
Ho deciso di non affrontare quest’impresa da solo, ma di iniziare una collaborazione alla pari con ChatGPT. Sono convinto che queste intelligenze artificiali, se usate nel modo giusto, possano offrire un aiuto concreto per completare anche i lavori più complessi.
Dopo circa dieci minuti avevo la mia utility pronta e funzionante:

Nome della canzone, stelline a destra e, cliccandoci sopra, un menu che mi consentiva di assegnare un nuovo voto (in seguito i tre puntini li ho sostituiti con una stellina vuota ☆). Bene, potevo fermarmi qui. E infatti…

Nella seconda versione ho aggiunto le informazioni sui brani, nella terza ho inserito comandi veloci per controllarli. Ho messo anche l’anno tra parentesi dopo il nome dell’album, ma ero troppo pigro per rifare gli screenshot.
Mi sono fermato qui? Beh…

Nella quarta incarnazione, che poi è quella definitiva (almeno per quanto riguarda il menu) ho aggiunto il commento, se presente nel brano, un link per passare velocemente all’applicazione Music, o lanciarla se è chiusa, e una piccola progress bar minimale, per sapere al volo a che punto è la canzone.
Mi sarebbe piaciuto poter aggiungere l’immagine della copertina dell’album ma a quanto pare non è possibile (Xbar dialoga con le applicazioni tramite AppleScript, una sorta di linguaggio interno di MacOS, ma non può addentrarsi troppo in profondità dentro i loro database). Pazienza… in ogni caso non avrebbe aggiunto molto e occupato spazio prezioso sullo schermo.
Bene, l’utility era completa, potevo fare tutto quello che mi serviva, quindi era il momento giusto per fermarsi.
E infatti non mi sono fermato.

Per prima cosa era inutile mostrare le stelline vuote sulla barra. Dopo tanti anni ho ormai imparato che sono al massimo cinque, quindi niente informazioni superflue. Ne utilizzerò una vuota solo quando un brano non ha ancora ricevuto un voto, e gli sarà assegnato il colore bianco. I voti seguiranno uno schema di colori che mi aiuterà a capire quanto un brano mi piace. La singola stella in realtà non mi serve per classificare i brani brutti; non ha senso tenere i brani brutti (non li aggiungo neanche, a dirla tutta). La utilizzo invece come un mio codice personale per segnare le nuove canzoni che ho ascoltato e che al momento non mi convincono del tutto, per poter dare loro una seconda possibilità. Se non passano il secondo ascolto (o il terzo, o il quarto… non sono bravo a capire subito cosa mi piace), le elimino. Quindi quando vedo rosso (letteralmente, non quando sono incazzatissimo) so che devo prestare particolare attenzione a quello che Music sta riproducendo. Il colore grigio lo uso quando il brano è in pausa.
Bene, avevo fatto tutto e tutto era perfetto. Non c’era davvero più nulla da aggiungere per cui mi sono ferm… No, non mi sono fermato.
Ogni tanto uso il campo “commento” per inserire annotazioni importanti, come curiosità sulla canzone, oppure tag che mi permettono di includerla in una determinata playlist. Se è valorizzato lo vedo nel menu. Però, se non apro il menu, come so che c’è?

Lo so perché compare quel pallino microscopico a sinistra del nome. Se c’è, allora c’è anche un commento.
Bene, basta, ho finito, possiamo chiudere…
Aspetta, e della micro progress bar non ne parlo?

Ma certo che ne parlo, è forse la caratteristica più figa di tutto il lavoro!
Ne avevo messa una grande all’interno del menu, ed è utile perché mi dà il tempo trascorso e quello rimanente, ma è per l’appunto dentro il menu. Allora ne ho fatta una sempre visibile. È molto semplice, ci sono in tutto cinque puntini: se ne vedo tre illuminati, come nell’immagine qui sopra, significa che sono a metà canzone; se ce ne sono cinque, il brano sta finendo come l’estate, e via dicendo. Adoro osservare quei puntini che spuntano come funghetti. :)
Ok, dopo questa cretinata mi sono fermato oppure andremo avanti di questo passo ancora per una settimana?
Sì, mi sono fermato. :)
Raccontata in questo modo, la mia piccola impresa potrebbe apparire tutta rose e fiori. Quello che non ho menzionato, anche perché spero presto di dimenticarlo, è il tempo spropositato che ho impiegato per domare e farmi ubbidire da ChatGPT. Non ho familiarità con AppleScript, e tantomeno con il linguaggio di Xbar, che è Bash – uno script di Shell di Unix che conosco ancora meno.
No, davvero, è stata follia pura. Nonostante ChatGPT comprenda molto bene le tue esigenze e riesca a scrivere funzioni piuttosto complesse, la sfida più grande è stata mantenerla concentrata. Basta un attimo per mandare tutto all’aria: ti scrive un codice che funziona, ma quando passi al blocco successivo, il primo smette di funzionare. Quando le spieghi l’errore, ti risponde: “Ah, sì, mi sono sbagliata, ora lo correggo”, ma a quel punto è la seconda funzione che smette di andare. E se cerchi di risolvere tutto insieme, ti cambia il codice sotto il naso, e a un certo punto ti accorgi che la prima funzione è addirittura sparita, e ti senti rispondere: “Oops, che sbadata!”, e così via.
Non hai idea su quante versioni di codice ho dovuto mettere mano, spesso arrivando al punto di dover buttare tutto e ricominciare da capo. Semplicemente non puoi fidarti ciecamente di queste intelligenze artificiali, né lasciarle agire senza controllo. L’unica strategia che funziona è concentrarsi su piccoli blocchi di codice, per poi integrarli manualmente nel progetto principale.
Ah, e non ho fatto cenno delle idio(t)sincrasie di Apple Music, un’applicazione che da sempre è afflitta da bug e decisioni discutibili che Apple non ha mai risolto. Un esempio concreto è la gestione delle valutazioni: quando aggiungi un nuovo brano alla libreria, ovviamente non ha un voto. Se però decidi di metterlo, poi non lo puoi più rimuovere. Puoi cambiarlo, certo, ma solo da una a cinque stelle. Nelle versioni precedenti eri libero di fare quello che volevi, ora non più (e non se ne capisce il motivo).
Inoltre, nell’applicazione, le stelline del voto sono solitamente di colore viola. Se provi a scorrere col mouse per portarle a zero, il programma ne rimette forzatamente una, ma la visualizza in nero. Quindi ci ritroviamo con canzoni con una stellina rossa e canzoni con una stellina nera. A me sembra una cagata pazzesca. Il problema poi è che per AppleScript una stella è una stella, indipendentemente dal suo colore.
Come ho risolto? Ho ideato una soluzione creativa ma funzionante: quando imposto zero stelle tramite lo script, scrivo un identificatore univoco del brano (titolo + autore + album) in un file di supporto. In questo modo, quando lo script parte, controlla se il brano ha una sola stella e, in caso affermativo, verifica se è presente nel file. Se lo trova, lo interpreta come un brano senza voto. Quando poi gli assegno un voto, lo script cancella il brano dal file. In ogni caso, grazie Apple!
Ci sono state numerose montagne da scalare, come gestire lo stato di Music: quando è in esecuzione, quando è chiuso, quando non ha brani selezionati, quando si trova in pausa.
Insomma, un viaggio decisamente impegnativo durato una trentina di ore molto intense. Ma che alla fine ha dato i suoi risultati. Dai, brava ChatGPT, tutto sommato. :)
Se ti interessa il codice da usare con Xbar – e che potrebbe presentare qualche bug qui e là perché al momento l’ho testato soltanto per qualche ora (ma finora tutto bene) – puoi scaricarlo cliccando qui.
Pensa che, per assurdo, anche io sto cercando di scrivere un plugin per Rhythmbox.
Quando usavo MacOS c’era un buon programma chiamato DesktopLyrics che metteva in sovraimpressione sullo sfondo del desktop il testo della canzone in riproduzione.
Sto provando ormai da luglio a fare la stessa cosa ma in Python, sfruttando il meccanismo dei plugin di Rhythmbox, con alterne fortune anche a causa del poco tempo a disposizione.
La cosa buona è che su Linux sono già disponibili tutte le librerie necessarie (ho installato a parte solo mutagen) quindi appena riuscirò a dedicarmici a tempo pieno dovrei risolvere in pochi giorni.
Una volta riuscito poi dovrò anche fare in modo che il plugin funzioni sia con Xorg che con Wayland e lì saranno problemi…
Se ci capissi qualcosa ti darei volentieri una mano. Però dai qualche possibilità alle A.I. perché se non le lasci andare troppo a briglie sciolte potrebbero darti un apprezzabile aiuto.
Io da solo non avrei combinato niente.
Ci ho provato subito dopo aver letto il tuo articolo ma a quanto pare non riesce a capire il meccanismo (che in effetti è un po’ cervellotico)
Io gli ho spiegato esattamente cosa doveva fare, ma il progetto di partenza era molto semplice: chiedere a Music il nome del brano e il rating, e poi mostrarlo nella barra del menu. Una volta che c’è riuscito gli ho fatto aggiungere il menu con le stelline e gli ho spiegato che il numero scelto lo doveva salvare come voto della canzone sul programma. Poi mi sono lanciato in cose più complesse, ma solo una alla volta e diffidando quando mi diceva “ok, ti rifaccio tutto lo script?”. Perché in quel modo ogni tanto cambiava o toglieva completamente qualcosa che funzionava alla perfezione. Dovresti fargli fare tante funzioni, ognuna che fa una sola cosa; e poi integrarle tu all’interno dello script generale, in modo da avere sempre il controllo.
In ogni caso serve pazienza infinita: spesso qualche cambiamento rompeva parti che prima andavano benissimo; altre volte diceva di aver capito e non aveva capito, altre ancora diceva di aver fatto cambiamenti ma non li aveva fatti.
il grande limite di queste A.I. è che possono solo costruire codice a livello teorico, ma non sono in grado di testarlo in ambiente reale o simulato. E sappiamo che la realtà è diversa dalla teoria. Quindi lui ti risponde “ah, capito il problema, questa è una modifica che funziona sicuramente!” e sicuramente non funziona il più delle volte.