Ableton Certified Trainer, Music Technologist, Creative Coder, Educator

Caricare file esterni in Processing

In tutti gli esempi visti finora abbiamo sempre utilizzato le funzioni interne di Processing per disegnare qualcosa sullo schermo. È possibile, ovviamente, caricare all’interno dei nostri sketch file esterni in vari formati come, ad esempio, font, immagini, file vettoriali, suoni e altro.

Dati gli argomenti che affronteremo a breve, è importante capire come effettuare questa operazione nel modo corretto per evitare di incorrere in problemi soprattutto quando distribuiamo i nostri programmi ad altre persone.

La prima regola fondamentale che dobbiamo sempre tenere a mente è che prima di poter essere utilizzati, i file devono essere caricati dal nostro sketch. Questo avviene ogni volta che lanciamo il programma.

Processing è in grado di caricare file che:

  • si trovano all’interno della cartella dello sketch
  • si trovano in una cartella qualsiasi sul computer
  • si trovano su un server accessibile via internet.

Ciascuna di queste situazioni presenta dei pro e dei contro e non esiste una soluzione che possa andare bene in tutti i casi. La prima opzione è, però, quella più comune.

Caricare file esterni in Processing

Tutti i file esterni sono generalmente inseriti in una cartella chiamata data che troviamo all’interno della cartella dello sketch.

Aggiungere file dal menu

Cliccando sul menu Sketch > Add File… si aprirà una finestra di dialogo dove andremo a selezionare il file da inserire.

Drag and drop

La seconda opzione, forse la più comoda, permette di trascinare uno o più file direttamente nella finestra di processing.

Processing drag and drop

Aggiunta manuale

Oppure è possibile aggiungere i file manualmente aprendo la cartella dello sketch dal menu Sketch > Show Sketch Folder, scorciatoia ⌘+K, creando una cartella data (se non esiste) e copiando direttamente i file all’interno di essa.

Processing aggiungere file manualmente

Consigli

Quando andremo a caricare il o i file è buona regola specificare l’estensione, ad esempio “file.txt” e fare attenzione all’uso delle lettere maiuscole: se il file si chiama immagine.jpg provare a caricare Immagine.jpgimmAgine.jpgimmagine.JPG genererà sempre un errore.

Per rendere il contenuto del file disponibile all’interno dell’interno programma, normalmente si crea una variabile globale al di fuori dei cicli di setup()draw() come avevo spiegato qui nel paragrafo scopo delle variabili.


15 responses to “Caricare file esterni in Processing”

  1. Angelo avatar
    Angelo

    Grazie per la risposta. Forse dovrei trasformare la data in numero così da potere selezionare il file che ha il numero più grande. Che ne pensi?

    1. Federico avatar

      La data è già un numero quindi non c’è bisogno di trasformarla in nulla di diverso. Dopo una breve ricerca credo che il modo migliore per ottenere il risultato e non appesantire troppo il codice su Processing sia fare così (prendo come riferimento l’esempio che ti ho linkato nel commento precedente):

      All’inizio del codice aggiungi:


      import java.util.Date;
      import java.util.Comparator;
      import java.util.Arrays;

      Dopodiché subito dopo la riga dove viene creato l’array con i file File[] files = listFiles(path); e prima del ciclo for che estrae le informazioni sui file aggiungi il seguente codice:


      Arrays.sort(files, new Comparator() {
      public int compare(File f1, File f2) {
      return Long.valueOf(f2.lastModified()).compareTo(f1.lastModified());
      }
      });

      Ho fatto una prova veloce ma sembra funzionare senza problemi. Potresti avere problemi di prestazione in base al numero di file che devi comparare.

      Con questa funzione l’array files viene ordinato con i file più nuovi al primo posto quindi ti basta, poi, pescare il primo elemento dell’array per essere sicuro di leggere il più recente.

  2. Angelo avatar
    Angelo

    Mi da errori:
    Arrays.sort(files, new Comparator() {
    alla funzione sort

    1. Federico avatar

      Mi fai un copia-incolla di tutto il codice? Eventualmente anche su un sito tipo: https://notepad.pw/ per non intasare i commenti :)

  3. Angelo avatar
    Angelo

    https://notepad.pw/s0yesm19

    è la prima volta che uso questo notepad.

    1. Federico avatar

      Il problema è alla riga:

      new Comparator

      (va la F maiuscola su File)

  4. Angelo avatar
    Angelo

    Grazie, sei super.
    Da qui, adesso cerco di arrivare ad avere il solo nome del più recente.

    1. Federico avatar

      Figurati! Ora non dovrebbe essere troppo difficile ma se hai problemi, scrivimi pure :)

    2. Federico avatar

      Figurati! Ora non dovrebbe essere troppo complicato… se hai problemi sono comunque qui :)

  5. Angelo avatar
    Angelo

    Ciao Federico, ho un dubbio sull’utilizzo delle librerie da caricare:
    import java.io.*;
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.File;

    se carico la prima è ancora necessario caricare le altre 3?
    Grazie anticipatamente

    1. Federico avatar

      Ciao Angelo, caricando la prima non è necessario aggiungere le altre tre e non vai incontro a problemi/miglioramenti di performance. Di solito, però, si preferisce essere specifici e caricare solo le librerie necessarie (evitando, quindi di mettere * e scrivendo una alla volta tutte le librerie necessarie al tuo programma per funzionare).

  6. Giuseppe Lombardo avatar
    Giuseppe Lombardo

    Scusate volevo sapere se esiste in italiano qualche testo relativo alla creazione di file in processing.
    Grazie

    1. Federico avatar

      Ciao Giuseppe: che tipo di file devi creare? Magari posso fare un articolo ad hoc per te :)

  7. Kevin Molino avatar
    Kevin Molino

    Scusate qualcuno mi può aiutare a far partire un file audio su Processing? Mi dice duplicate field lezione _6sfile

    1. Federico avatar

      Ciao Kevin, puoi mettere tutto il codice del tuo sketch?

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.