Hi,
folgender Code funktioniert leider nicht wie er soll. Nach einem Aufruf von UserNoteTester.main bekommen wir die Ausgabe:
note 19 cents 35
Note: 0 - 0cents.
Im Konstruktor hat er noch die richtigen Werte, zurück in der Main - Methode haben die Instanzvariablen aber auf einmal 0 Werte. Warum?
Danke für eure Mühen!
Beste Grüße,
Andy
folgender Code funktioniert leider nicht wie er soll. Nach einem Aufruf von UserNoteTester.main bekommen wir die Ausgabe:
note 19 cents 35
Note: 0 - 0cents.
Im Konstruktor hat er noch die richtigen Werte, zurück in der Main - Methode haben die Instanzvariablen aber auf einmal 0 Werte. Warum?
Danke für eure Mühen!
Beste Grüße,
Andy
Code:
public class UserNote {
private int note; // die Note die der User singt
private int cents; // Differenz der übergebenen Userfrequenz zu dieser Usernote
private static float referenz_A; // tuning
/*
* KONSTRUKTOR (int midinote, int cent)
*/
public UserNote(int n, int c) {
this.note = n;
this.cents =c;
if (c>49||c<-50){
int posneg = (int)Math.signum(c);
int semitones = (int)(Math.abs(c)/100f+0.5)*posneg;
this.note += semitones;
this.cents = c-semitones*100;
}
System.out.println("note " + note + " cents " + cents);
}
public UserNote(float hz, int refNote, float ref_A){
referenz_A = ref_A;
int userGesungeneNote = (int)-(12*logDualis(referenz_A/hz)-57);
int cents = (int)(1200*logDualis(hz/PitchDetection.hzOfNote(userGesungeneNote)));
int userMidinote = userGesungeneNote;
int diff = userGesungeneNote%12 - refNote%12;
int dazu; //zur refNote dazuaddieren um auf die 'angepasste' Usernote zu kommen
if(diff>6){
dazu = -12+diff;
}else if(diff<-6){
dazu = 12+diff;
}else{
dazu = diff;
}
userMidinote=refNote+dazu;
new UserNote(userMidinote, cents);
}
private float logDualis(float wert){
return (float)(Math.log(wert)/Math.log(2));
}
public String toString(){
return "Note: " + this.note + " - " + this.cents + "cents.";
}
public int getCents() {
return this.cents;
}
public int getNote() {
return this.note;
}
}
Code:
public class UserNoteTester {
/**
* @param args
*/
public static void main(String[] args) {
UserNote user = new UserNote(100, 50, 56);
System.out.println(user.toString());
}
}