Hello, I don’t know why but I can’t use fonts in my project: I keep creating and loading fonts from processing but it gives me the same error every time:
"GeorgiaPro-Light-48.vlw0" is not available, so another font will be used. Use PFont.list() to show available fonts.
Here it is my code:
import ddf.minim.*; // Importa la library del Player musicale
import ddf.minim.analysis.*;
//Variabili
int r = 100; //Valore di partenza del raggio del cerchio più grande
float rad = 70; //Cerchio più piccolo
int timer; //Timer in millisecondi
int i; //Variabile casistica switch
int mouse = 0; //Contatore click del mouse
float scale = 1.0; //Valore di scale per le immagini degli uomini
float scale1 = 2.0;
int offx = 200; int offy = 400; //offset di riposizionamento delle figure degli uomini
int offx1 = 650; int offy1 = 360;
boolean testoClick = true; //Condizione per verificare la variazione del testo
//Immagini
PImage Stanza;
PImage Foresta;
PImage Uomo1;
PImage Uomo2;
PImage Donna;
PImage Fiore;
//Musica
//loop midi.Wav
//Cowboy
//Wind.mp3
//Bomb.mp3
//Scream.mp3
//Tick.mp3
//Audio player
Minim minim;
AudioPlayer player; //Player per la musica di sottofondo
AudioPlayer Effetto1; //Effetto vento
AudioPlayer Effetto2; //Effetto urlo
AudioPlayer Effetto3; //Effetto passi
AudioPlayer Effetto4; //Effetto ticchettio degli stivali
AudioPlayer Effetto5; //Effetto bomba
AudioMetaData meta; //Recupera i dati per il corretto avviamento del player
BeatDetect beat; //Rileva i battiti della canzone nel player
//Lettering, font e battute
PFont f; //Dichiarazione del font
String b1 = "Li manda il giardiniere, dice di metterli in sala da pranzo."; //Battute in ordine
String b2 = "Portami del kvas.";
String b3 = "Subito.";
String b4 = "C'è la brina, siamo a -3° e i ciliegi sono tutto un fiore.";
String b5 = "Non riesco proprio ad approvarlo il nostro clima. Non posso. \n Non lo si può di certo definire un clima ideale.";
String b6 = "Ecco permettetemi di aggiungere un'atra cosa: \n mi sono comprato, l'altro giorno, degli stivali che, vi assicuro, \n scricchiolano in modo impossibilile.";
String b7 = "Con che cosa diavolo li potrei ungere?";
String b8 = "Piantala, mi hai stufato!";
String b9 = "Ogni giorno mi succede qualche disgrazia... \n ma non mi lamento, ci ho fatto il callo.";
String b10 = "Me ne vado.";
String b11 = "Avete visto? se mi è permesso il termine, che circostanza tra l'altro...\n Non è addirittura soprendente?!";
void settings() {
size(1080, 720, P2D);
smooth(); //Aiuta l'elaborazione del framerate
}
void setup() {
//Sfondo
Uomo1 = loadImage("figura uomo 1.png"); //carica in memoria le immagini
Uomo2 = loadImage("figura uomo 2.png");
Donna = loadImage("Donna.png");
Fiore = loadImage("Fiore.png");
Foresta = loadImage("cold-fog-forest-1003124.jpg");
Foresta.resize(1080, 720);
Stanza = loadImage("castle-european-interiors-68389.jpg");
Stanza.resize(1080, 720);
background(0); //Sfondo nero
//Centro
//Player
minim = new Minim(this); //Inizializzazione del player
player = minim.loadFile("loop midi.Wav"); //Carica file "loop midi.Wav" dalla cartella data dello sketch
meta = player.getMetaData();
beat = new BeatDetect(); //Rileva i battiti più rilevanti della canzone
player.loop(); //La canzone gira in loop
//player.play();
//Effetti sonori
minim = new Minim(this); //Creazione nuovo suono tramite la library minim
Effetto1 = minim.loadFile("Wind.mp3");
minim = new Minim(this);
Effetto2 = minim.loadFile("Scream.mp3");
minim = new Minim(this);
Effetto3 = minim.loadFile("Footsteps.mp3");
minim = new Minim(this);
Effetto4 = minim.loadFile("Tick.mp3");
minim = new Minim(this);
Effetto5 = minim.loadFile("Bomb.mp3");
//Davanti
PFont myFont = createFont("GeorgiaPro-Light-48.vlw0", 48); //Creazione di un nuovo font
textFont(myFont); //Dichiarazione del font
//Tempo
timer = millis(); //Conteggio del timer il millisecondi
}
void draw() {
switch (i) { //Casistica
case 0 :
textSize(50);
textAlign(CENTER);
text("SOLID VODKA", width/2, 250); //Titolo del progetto
fill(255);
textSize(30);
textAlign(CENTER);
text("RENI EDOARDO \n TECNOLOGIE DIGITALI PER IL SUONO E LE IMMAGINI \n ANNO ACCADEMICO 2018-2019 \n Da un'opera di Anton Cechov", width/2, 400); //Campo con informazioni dello studente
fill(255, 0, 0);
if ( millis () - timer > 5000) { //Se il conteggio è superiore si passa alla condizione successiva
timer = millis();
i++;
}
break;
case 1 :
background(Stanza);
scale = 1.0; //Fattore di ingrandimento delle figure degli uomini
if (mouseover()) scale = 0.9;{ //Nel caso il cursore del mouse si sovrapponga alle figure il fattore di ingrandimento è di 0.9
if ( millis () - timer > 500 ){
Effetto3.play();
}if (millis () - timer > 7000 && mouse == 0){ //Nel caso il timer sia maggior della condizione dichiarata e i click del mouse siano corrispondenti a quanto dichiarato
image(Uomo2, offx1, offy1, Uomo2.width*scale, Uomo2.height*scale); //Comparsa figure uomini e dimensione standard
image(Uomo1, offx, offy, Uomo1.width*scale, Uomo1.height*scale);
Effetto5.play();
}if (testoClick & mouse == 1){
image(Uomo1, offx, offy, Uomo1.width*scale, Uomo1.height*scale);
image(Uomo2, offx1, offy1, Uomo2.width*scale1, Uomo2.height*scale1); //'immagine del personaggio che recitta la battuta è ingrandita tramite fattore precedentemente dichiarato
image(Fiore, 600, 400, 150, 150);
}if (testoClick & mouse == 2){
image(Uomo1, offx, offy, Uomo1.width*scale1, Uomo1.height*scale1);
image(Uomo2, offx1, offy1, Uomo2.width*scale, Uomo2.height*scale);
}if (testoClick & mouse == 3){
image(Uomo1, offx, offy, Uomo1.width*scale, Uomo1.height*scale);
image(Uomo2, offx1, offy1, Uomo2.width*scale, Uomo2.height*scale);
image(Donna, 900, 350, 138, 440);
}if (testoClick & mouse == 4){
image(Uomo1, offx, offy, Uomo1.width*scale, Uomo1.height*scale);
image(Uomo2, offx1, offy1, Uomo2.width*scale1, Uomo2.height*scale1);
}
}
beat.detect(player.mix);
fill(#1A1F18, 100); //Riempimento del triangolo che copre lo schermo per mettere in evidenza il player
noStroke();
rect(0, 0, width, height); //Grandezza della finestra della composizione
translate(width/2, height/2); //Posiziona la figura al centro della composizione
fill(-1, 10);
ellipse(0, 0, 2*rad, 2*rad);
stroke(-1, 50);
int bsize1 = player.bufferSize(); //Dimensione del player dinamico che segue i beats della musica
for (int i = 0; i < bsize1 - 1; i+=5) {
float x = (r)*cos(i*2*PI/bsize1);
float y = (r)*sin(i*2*PI/bsize1);
float x2 = (r + player.left.get(i)*100)*cos(i*2*PI/bsize1);
float y2 = (r + player.left.get(i)*100)*sin(i*2*PI/bsize1);
line(x, y, x2, y2);
if (testoClick & mouse == 1) { //Se il sistema rileva il click del mouse e la condizione viene verificata, a conteggio dei click viene variata la battuta
textSize(35); //Battute dei personaggi
text(b1, CENTER, -230);
textAlign(CENTER);
fill(255);
}else if (testoClick & mouse == 2){
textSize(35);
text(b2, CENTER, -230);
textAlign(CENTER);
fill(255);
}else if (testoClick & mouse == 3){
textSize(35);
text(b3, CENTER, -230);
textAlign(CENTER);
fill(255);
}else if (testoClick & mouse == 4){
textSize(35);
text(b4, CENTER, -230);
textAlign(CENTER);
fill(255);
}else{
noFill();
}
}
beginShape();
noFill();
stroke(-1, 50);
endShape();
if ( (millis () - timer > 25000) | mouse == 5) {
timer = millis ();
i++;
}
break;
case 2:
background(Foresta);
image(Uomo1, 200, 400, 138, 415); //Immagini statiche degli uomini
image(Uomo2, 650, 360, 138, 415);
beat.detect(player.mix);
fill(#1A1F18, 100);
noStroke();
rect(0, 0, width, height); //Grandezza della finestra della composizione
translate(width/2, height/2); //Posiziona la figura al centro della composizione
fill(-1, 10);
ellipse(0, 0, 2*rad, 2*rad);
stroke(-1, 50);
int bsize2 = player.bufferSize();
for (int i = 0; i < bsize2 - 1; i+=5) {
Effetto1.play();
float x = (r)*cos(i*2*PI/bsize2);
float y = (r)*sin(i*2*PI/bsize2);
float x2 = (r + player.left.get(i)*100)*cos(i*2*PI/bsize2);
float y2 = (r + player.left.get(i)*100)*sin(i*2*PI/bsize2);
line(x, y, x2, y2);
}
beginShape();
noFill();
stroke(-1, 50);
endShape();
if ( millis () - timer > 4000) {
timer = millis();
i++;
}
break;
case 3:
background(Stanza);
scale = 1.0;
if (mouseover()) scale = 0.9;{
if ( millis () - timer > 500 ){
if (mouse == 5){
image(Uomo1, offx, offy, Uomo1.width*scale, Uomo1.height*scale);
image(Uomo2, offx1, offy1, Uomo2.width*scale, Uomo2.height*scale);
}if (mouse == 6){
image(Uomo1, offx, offy, Uomo1.width*scale, Uomo1.height*scale);
image(Uomo2, offx1, offy1, Uomo2.width*scale1, Uomo2.height*scale1);
}if (testoClick & mouse == 7){
image(Uomo1, offx, offy, Uomo1.width*scale, Uomo1.height*scale);
image(Uomo2, offx1, offy1, Uomo2.width*scale1, Uomo2.height*scale1);
Effetto4.play();
}if (testoClick & mouse == 8){
image(Uomo1, offx, offy, Uomo1.width*scale, Uomo1.height*scale);
image(Uomo2, offx1, offy1, Uomo2.width*scale1, Uomo2.height*scale1);
}if (testoClick & mouse == 9 ){
image(Uomo1, offx, offy, Uomo1.width*scale1, Uomo1.height*scale1);
image(Uomo2, offx1, offy1, Uomo2.width*scale, Uomo2.height*scale);
}if (testoClick & mouse == 10){
image(Uomo1, offx, offy, Uomo1.width*scale, Uomo1.height*scale);
image(Uomo2, offx1, offy1, Uomo2.width*scale1, Uomo2.height*scale1);
}if (testoClick & mouse == 11 ){
image(Uomo1, offx, offy, Uomo1.width*scale, Uomo1.height*scale);
image(Uomo2, offx1, offy1, Uomo2.width*scale1, Uomo2.height*scale1);
}if (testoClick & mouse == 12){
Effetto2.play();
image(Uomo1, offx, offy, Uomo1.width*scale, Uomo1.height*scale);
image(Uomo2, offx1, offy1, Uomo2.width*scale1*2, Uomo2.height*scale1*2);
}
}
}
beat.detect(player.mix);
fill(#1A1F18, 100);
noStroke();
rect(0, 0, width, height); //Grandezza della finestra della composizione
translate(width/2, height/2); //Posiziona la figura al centro della composizione
fill(-1, 10);
ellipse(0, 0, 2*rad, 2*rad);
stroke(-1, 50);
int bsize3 = player.bufferSize();
for (int i = 0; i < bsize3 - 1; i+=5) {
float x = (r)*cos(i*2*PI/bsize3);
float y = (r)*sin(i*2*PI/bsize3);
float x2 = (r + player.left.get(i)*100)*cos(i*2*PI/bsize3);
float y2 = (r + player.left.get(i)*100)*sin(i*2*PI/bsize3);
line(x, y, x2, y2);
if (testoClick & mouse == 6) {
textSize(30);
text(b5, CENTER, -230);
textAlign(CENTER);
fill(255);
}else if (testoClick & mouse == 7){
textSize(28);
text(b6, CENTER, -230);
textAlign(CENTER);
fill(255);
} else if (testoClick & mouse == 8){
textSize(35);
text(b7, CENTER, -230);
textAlign(CENTER);
fill(255);
} else if (testoClick & mouse == 9){
textSize(35);
text(b8, CENTER, -230);
textAlign(CENTER);
fill(255);
} else if ( testoClick & mouse == 10){
textSize(32);
text(b9, CENTER, -230);
textAlign(CENTER);
fill(255);
}else if (testoClick & mouse == 11){
textSize(35);
text(b10, CENTER, -230);
textAlign(CENTER);
fill(255);
} else if ( testoClick & mouse == 12){
textSize(30);
text(b11, CENTER, -230);
textAlign(CENTER);
fill(255);
}else {
noFill();
}
}
beginShape();
noFill();
stroke(-1, 50);
endShape();
if ( millis () - timer > 35000 || mouse == 13) {
timer = millis();
i++;
}
break;
case 4:
background(0);
beat.detect(player.mix);
fill(#1A1F18, 100);
noStroke();
rect(0, 0, width, height); //Grandezza della finestra della composizione
translate(width/2, height/2); //Posiziona la figura al centro della composizione
fill(-1, 10);
ellipse(0, 0, 2*rad, 2*rad);
stroke(-1, 50);
int bsize4 = player.bufferSize();
for (int i = 0; i < bsize4 - 1; i+=5) {
float x = (r)*cos(i*2*PI/bsize4);
float y = (r)*sin(i*2*PI/bsize4);
float x2 = (r + player.left.get(i)*100)*cos(i*2*PI/bsize4);
float y2 = (r + player.left.get(i)*100)*sin(i*2*PI/bsize4);
line(x, y, x2, y2);
textSize(30);
text("Fonti: \n www.SoundBible.com \n www.pexels.com \n www.freepik.com", CENTER, -310);
textAlign(CENTER);
fill(255);
}
beginShape();
noFill();
stroke(-1, 50);
endShape();
if ( millis () - timer > 10000) {
timer = millis();
i++;
player.pause();
}
break;
}
}
void mousePressed(){ //Se il mouse viene premuto
testoClick = true; //Se la condizione di pressione del mouse per la variazione del testo è verificata ed è vera
if (millis () - timer > 500){
mouse++; //Auomento del conteggiatore dei click del mouse
}
}
boolean mouseover() { //Booleane che determinano le condizioni attraverso cui il sistema verifica se il cursore del mouse è sovrapposto alle immagini degli uomini e quindi se andare ad ingrandire le stesse
if ( ( mouseX > offx && mouseX < Uomo1.width+offx ) && ( mouseY > offy && mouseY < Uomo1.height +offy) || ( ( mouseX > offx1 && mouseX < Uomo2.width+offx1) && ( mouseY > offy1 && mouseY < Uomo2.height +offy1 ) ) ) return false;
return true;
}
Thank you!