PDA

View Full Version : [JavaFX] Problemi settaggio volume MediaPlayer


VioletFairy
15-04-2010, 16:29
Ciao ragazzi, sto utilizzando un oggetto MediaPlayer per fare un player personalizzato, e sto riscontrando dei problemi nel settaggio del volume:

1) per abbassare il volume io diminuisco il volume di 0.1 di volta in volta. Ed ecco che spunta fuori un comportamento strano. Parto dal volume pari a 0.5.. Diminuisco => 0.4 => 0.3 => e diventa per magia... 0.200000002

??? Non vi sembra un pò strano??? Eppure io diminuisco sempre dello stesso valore!!!

2) carico una canzone, volume 0.5, modifico il volume a 0.1, cambio canzone, e il volume con cui sento la canzone è 0.5, ma se lo stampo, cioè se scrivo la riga di codice


println("{mp.volume}");


il volume è 0.1 ma vi assicuro che dalla canzone precedente si è alzato, e questo lo fa per tutte le canzoni. Anche se il volume lo setto a 0.0 (quindi di fatto la canzone non ha volume), passo alla prossima canzone e il volume si alza...

Qualcuno di voi ha usato il MediaPlayer e ha riscontrato un problema del genere? Sapete dirmi quale potrebbe essere il problema?

VioletFairy
15-04-2010, 17:03
Ragazzi ho scoperto un'altra cosa in merito al punto 1.

Se faccio una cosa semplicissima come


var n : Number = 0.1;
var m : Number = 0.0;
println("n = {n}");
for (i in [1..10]){
m = m + n;
println("m = {m}");
}



ottengo questo output:

n = 0.1
m = 0.1
m = 0.2
m = 0.3
m = 0.4
m = 0.5
m = 0.6
m = 0.70000005
m = 0.8000001
m = 0.9000001
m = 1.0000001


:mbe:

banryu79
16-04-2010, 11:41
Se faccio una cosa semplicissima come

var n : Number = 0.1;
var m : Number = 0.0;
println("n = {n}");
for (i in [1..10]){
m = m + n;
println("m = {m}");
}



ottengo questo output:

n = 0.1
m = 0.1
m = 0.2
m = 0.3
m = 0.4
m = 0.5
m = 0.6
m = 0.70000005
m = 0.8000001
m = 0.9000001
m = 1.0000001

L'approssimazione è dovuta al fatto che la rappresentazione di un numero con parte decimale in un computer deve fare i conti con la quantità di bit messa a disposizione per il dato tipo utilizzato per rappresentarlo (in Java, float o double).

Ad esempio questo sorgente Java:

public class LiteralDouble
{
public static void main(String... args) {
doLiteralPrimitive1();
doLiteralPrimitive2();
}

private static void doLiteralPrimitive1() {
System.out.println("Literal double Primitive");
double n = 0.1;
double m = 0.0;
System.out.println("n = "+n);
for (int i=0; i<10; i++) {
m += n;
System.out.println("m = "+m);
}
}

private static void doLiteralPrimitive2() {
System.out.println("Literal float Primitie");
float n = 0.1f;
float m = 0.0f;
System.out.println("n = "+n);
for (int i=0; i<10; i++) {
m += n;
System.out.println("m = "+m);
}
}

}

Produce questo output:

Literal double Primitive
n = 0.1
m = 0.1
m = 0.2
m = 0.30000000000000004
m = 0.4
m = 0.5
m = 0.6
m = 0.7
m = 0.7999999999999999
m = 0.8999999999999999
m = 0.9999999999999999
Literal float Primitive
n = 0.1
m = 0.1
m = 0.2
m = 0.3
m = 0.4
m = 0.5
m = 0.6
m = 0.70000005
m = 0.8000001
m = 0.9000001
m = 1.0000001


Per il punto (2) prova, quando cambi canzone, a riassegnare il volume al valore desiderato: comunque non saprei da cosa è causato il comportamento anomalo (ammesso che lo sia: non è che il valore del volume di riproduzione è una proprietà di una canzone, e se non lo valorizzi esplicitamente viene inizializzato dalla libreria/framework a 0.5 come valore di default?)

Ciao :)

ally
16-04-2010, 11:55
...scusa ma stai usando le jmf o qualcosa legato a jfx?...

...ciao Andrea...