Applescript per ottenere il numero di brani del brano dall'album multi-cd in iTunes?


1

Ho un oggetto Applescript che riporta il nome del brano attualmente in riproduzione, l'album, il numero del brano e il numero totale di brani dell'album. Se l'album proviene da un singolo CD o se il brano proviene dal CD 1 di un album multi-CD, tutto funziona e ottengo il seguente:

Song 2 of 30

Tuttavia, se l'album proviene da un set multi-CD, il numero del brano non è corretto per i brani da CD 2, CD 3, ecc. Ecco un esempio: L'Elisir d'Amore ha due CD e, in iTunes, è inserito come tale (ad esempio, CD 1 di 2 e CD 2 di 2). Lo script riporta correttamente che ci sono 30 canzoni (16 su CD 1 e 14 su CD 2). Durante la riproduzione di un brano dal CD 1, tutto è accurato. Quando si riproduce un brano dal CD 2, il numero del brano ricomincia da 1, quindi l'ultima canzone appare come

Song 14 of 30

perché è la quattordicesima canzone su CD 2. C'è un modo per far sì che la sceneggiatura riproduca la Canzone 30 di 30 per l'ultima canzone su CD 2 senza un certo sforzo di capire il numero di CD, quindi di contare i brani in CD 1 e poi aggiungendo al numero di traccia della canzone nel CD 2? Questo kludge diventa piuttosto brutto per gli album che coprono fino a 14 CD.

Ecco il bit di codice semplificato:

tell application "iTunes"
    -- code to check that there is a current song
    set z_album to album of current track as string
    set z_num to count of (every track whose album is z_album)
    set z_song to name of current track as string
    set z_trk to track number of current track
    log z_song & " (" & z_trk & " of  " & z_num & ")"
end tell

Sarebbe bello sapere se il mio kludge ha funzionato per te, grazie.
user3439894

Grazie per il suggerimento, che funziona, ed è meno nervoso del mio. Questo è stato solo per scopi informativi che per qualsiasi motivo importante: ho visualizzato le informazioni e non volevo eseguire ripetutamente uno script di grandi dimensioni.
RPW

Risposte:


0

Personalmente non ho molto bisogno, se esiste, di automatizzare iTunes con AppleScript. In passato ho trovato iTunes come una delle applicazioni più difficili da automatizzare. Tuttavia, ho dato un'occhiata al tuo codice , il dizionario AppleScript per iTunes, alcune ricerche sul Web che sostanzialmente non hanno dato risultati degni di nota e alcuni tentativi programmatici non riusciti facilmente prendi un elenco di dischi e track count per ciascuno disco di un album.

Assumerò il kludge contesto nella tua domanda è perché non c'è nessun modo semplice e diretto chiedere a un programmaticamente album per il suo disc count e track count per disco fare il matematica con, in a modo diretto . Quindi con quello ... ecco mio kludge , che è stato testato e funziona come desiderato su mio libreria iTunes:

tell application "iTunes"
    try

        set theCurrentTrackProperties to (properties of current track)

        if (disc number in theCurrentTrackProperties) is not greater than 1 then

            set theSongName to (name in theCurrentTrackProperties)
            set theTrackNumber to (track number in theCurrentTrackProperties)
            set theTrackCount to (track count in theCurrentTrackProperties)

            log theSongName & " (" & theTrackNumber & " of " & theTrackCount & ")"

        else

            set theSongName to (name in theCurrentTrackProperties)
            set theTrackNumber to (track number in theCurrentTrackProperties)
            set theTrackCount to (count of (every track whose album = (album in theCurrentTrackProperties)))

            set theDiscNumber to (disc number in theCurrentTrackProperties)
            set theAlbumsTracksProperties to (properties of every track whose album = (album in theCurrentTrackProperties))

            set theAlbumsDiscNumberTrackCountInfo to ""
            repeat with i from 1 to (count of theAlbumsTracksProperties)
                tell item i in theAlbumsTracksProperties
                    set theAlbumsDiscNumberTrackCountInfo to (theAlbumsDiscNumberTrackCountInfo & disc number & space & track count & linefeed)
                end tell
            end repeat
            tell current application
                set theAlbumsDiscNumberTrackCountInfo to (do shell script "sort -n -k1 -u <<<" & quoted form of theAlbumsDiscNumberTrackCountInfo & " | sed '/^$/d'")
                set theTracksPerDiscCount to ""
                repeat with i from 1 to (theDiscNumber - 1)
                    set theTracksPerDiscCount to (theTracksPerDiscCount + (word 2 of paragraph i in theAlbumsDiscNumberTrackCountInfo))
                end repeat
                set theTrackNumber to (theTrackNumber + theTracksPerDiscCount)
            end tell

            log theSongName & " (" & theTrackNumber & " of " & theTrackCount & ")"

        end if

    on error eStr number eNum
        display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with icon caution
        return
    end try
end tell

L'esempio AppleScript codice , mostrato sopra, fa quanto segue:

  • Imposta il proprietà del current track al variabile theCurrentTrackProperties.
  • Controlla se il valore del disc number proprietà nel variabile , theCurrentTrackProperties, non è maggiore di 1.
  • Se la valore del disc number proprietà non è maggiore di 1, è in elaborazione diretta e registra le informazioni desiderate.
  • Se la valore del disc number proprietà è maggiore di 1, quindi il else ramo esegue il kludge fare il matematica e registra le informazioni desiderate.

Che cosa kludge fa:

  • Imposta alcune iniziali aggiuntive variabili .
    • Uno per il valore del disc number proprietà del current track, theDiscNumber, è usato per determinare quanti dischi il track count è necessario per.
    • Un altro per contenere il proprietà di ogni track di ogni disc nel album, theAlbumsTracksProperties.
      • Il valore del variabile , theAlbumsTracksProperties, viene elaborato in a repeat ciclo continuo a cui il produzione di è detenuto nel variabile theAlbumsDiscNumberTrackCountInfo.
  • Il variabile theAlbumsDiscNumberTrackCountInfo, è un elenco del disc number e track count da tutti track nel album.
    • Questo elenco viene quindi elaborato per rimuovere tutte le informazioni duplicate, in modo da avere una voce singolare per il track count di ciascuna disc number nel album.
  • Il do shell script comando usi sort e sed elaborare il elenco , il valore del variabile theAlbumsDiscNumberTrackCountInfo.
    • sort -n -k1 -u <<<
      • -n confronta in base al valore numerico della stringa
      • -k1 avvia un tasto su POS1
      • -u senza -c , emette solo il primo di una corsa uguale
      • <<< indirizza l'input da riga di comando , non a file
    • theAlbumsDiscNumberTrackCountInfo il elenco come input da riga di comando diretto a sort
    • | sed '/^$/d'
      • | pipe the produzione del sort comando a sed
      • sed '/^$/d' cancella le righe vuote
      • Perché il valore del variabile theAlbumsDiscNumberTrackCountInfo è una concatenazione con a linefeed alla fine di ciascuno repeat ciclo continuo , diventa la prima riga di produzione dal sort comando e viene rimosso con sed, in modo da non dover rendere conto della linea vuota iniziale più avanti nel copione . Se fosse stato lasciato come parte di valore del variabile theAlbumsDiscNumberTrackCountInfo, è (ri) impostato dal ritorno del do shell script comando , poi word 2 of paragraph i dovrebbe essere word 2 of paragraph (i + 1) per saltare la riga vuota iniziale. Quindi ha più senso rimuoverlo prima che finisca come parte della finale valore del variabile theAlbumsDiscNumberTrackCountInfo.
  • Con il variabile , theAlbumsDiscNumberTrackCountInfo, ora contiene solo un elenco di disk number con il suo corrispondente track countuna riga per ciascuno disco nel album, ora è facile fare il matematica , se il album contiene 2 dischi o fino a 14 dischi , o più.
  • Il restante AppleScript codice , che include un altro repeat ciclo continuo , esegue il matematica necessario aggiungere il track count di ciascuna disc number precedente il disc number il current track proviene da, e li aggiunge insieme, quindi registra le informazioni desiderate.

Detto questo, se qualcuno lo sa modo semplice e diretto chiedere a un programmaticamente album per il suo disc count e track count per disco fare il matematica con, in modo diretto per evitare a kludge , per favore pubblica una risposta.


Ho accettato la risposta, che funziona e potrebbe essere adatta per altri scopi. Mi è anche piaciuta la spiegazione chiara! Tuttavia, continuerò a rispondere sulla segnalazione di Song 12 of Disc 3 of 4 semplicemente per mantenere lo script su solo una mezza dozzina di righe.
RPW

@ RPW, grazie. hai detto, "Continuerò a rispondere sulla segnalazione di Song 12 del Disc 3 di 4 semplicemente per mantenere lo script su solo una mezza dozzina di righe.", e se posso, perché c'è e problema con il mantenimento del numero di righe di codice giù?
user3439894
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.