G
guitar_1
Registrierter Benutzer
- Zuletzt hier
- 17.07.13
- Registriert
- 22.05.10
- Beiträge
- 14
- Kekse
- 0
Hallo,
ich hab in letzter Zeit einen Ersatzcontroller für mein Masterkeyboard zusammen gelötet, dass klappt auch alles ganz gut, einzig die Velocity der Tasten bekomm ich nicht "rund". Entweder sind die Anschläge zu hart oder zu weich oder der bereich von 0 bis 127 wird nicht gut abgedeckt (zB ist es dann selbst mit enormen "draufhacken" nicht möglich 127 zu erreichen).
Ich wollte mal fragen, ob es hier jemanden gibt, der Erfahrungen mit der Berechnung der Velocity hat und vielleicht kennt ja sogar jemand eine "gängige" Funktion ... ?
Hier mal mein bisheriger Versuch:
Beim "schellstmöglichen Drücken" einer Taste vergehen etwa 1400µs bis 1500µs zwischen dem erkennen des 1. und 2. Buttons.
Die "beste" Funktion war bisher die folgende, allerdings etwas zu "hart" für meinen Geschmack, man kann kaum leise Anschläge spielen:
847e-10 * t^2 - 678e-5 * t + 136 // t ist da bei die Zeitdifferenz zwischen dem 1. und 2. Button einer Taste in µs
der code (c++/arduino):
Mit der Idee eine Parabel zu nehmen um eine lineare Ausgabe zu bekommen lieg ich doch richtig oder? - die "Kraft" mit der die Taste gedrückt wird wird ja hier als die Beschleunigung gemessen und der zusammenhang zwischen kraft und zeit ist bei der beschleunigung doch quadratisch - wenn ich mich recht entsinne. Und durch eine quadratische funktion ("in die andere richtung") bekomme ich dann etwas (halbwegs) lineares bei raus. oder?
Also mein Ziel ist erst mal eine lineare Velocitykurve - das war laut Bedienungsanleitung die Standardeinstellung des Keyboards vor dem Controllertausch und ich war damit eigentlich sehr zufrieden. Als "Sahnehäubchen" würde ich natürlich auch gern noch eine veränderbare Velocitykurve implementieren .. aber ich bekomm ja nicht mal die einfachste Variante sicher hin bis jetzt
schon mal Danke und schöne Grüße
ich hab in letzter Zeit einen Ersatzcontroller für mein Masterkeyboard zusammen gelötet, dass klappt auch alles ganz gut, einzig die Velocity der Tasten bekomm ich nicht "rund". Entweder sind die Anschläge zu hart oder zu weich oder der bereich von 0 bis 127 wird nicht gut abgedeckt (zB ist es dann selbst mit enormen "draufhacken" nicht möglich 127 zu erreichen).
Ich wollte mal fragen, ob es hier jemanden gibt, der Erfahrungen mit der Berechnung der Velocity hat und vielleicht kennt ja sogar jemand eine "gängige" Funktion ... ?
Hier mal mein bisheriger Versuch:
Beim "schellstmöglichen Drücken" einer Taste vergehen etwa 1400µs bis 1500µs zwischen dem erkennen des 1. und 2. Buttons.
Die "beste" Funktion war bisher die folgende, allerdings etwas zu "hart" für meinen Geschmack, man kann kaum leise Anschläge spielen:
847e-10 * t^2 - 678e-5 * t + 136 // t ist da bei die Zeitdifferenz zwischen dem 1. und 2. Button einer Taste in µs
der code (c++/arduino):
Code:
inline void processSecondButton(byte col, byte row){
// calculate velocity
unsigned long timeDiff = micros() - keyFirstButtonTime[col][row];
char velo = 847e-10 * timeDiff * timeDiff - 678e-5 * timeDiff + 136;
if (velo < 1) {
velo = 1;
}
if (velo > 127) {
velo = 127;
}
if (debug) {
Serial.print("Velocity Time: ");
Serial.print(timeDiff);
Serial.print("us Velo: ");
Serial.println((int) velo);
}
// send MIDI Note On
MIDINoteOn(0, keyToMidi[row][col] + keyToMidiOffset, velo);
// mark key as pressed
keyPressed[col][row] = true;
// remove button from watch list
keyInWatchList[col][row] = false;
}
Mit der Idee eine Parabel zu nehmen um eine lineare Ausgabe zu bekommen lieg ich doch richtig oder? - die "Kraft" mit der die Taste gedrückt wird wird ja hier als die Beschleunigung gemessen und der zusammenhang zwischen kraft und zeit ist bei der beschleunigung doch quadratisch - wenn ich mich recht entsinne. Und durch eine quadratische funktion ("in die andere richtung") bekomme ich dann etwas (halbwegs) lineares bei raus. oder?
Also mein Ziel ist erst mal eine lineare Velocitykurve - das war laut Bedienungsanleitung die Standardeinstellung des Keyboards vor dem Controllertausch und ich war damit eigentlich sehr zufrieden. Als "Sahnehäubchen" würde ich natürlich auch gern noch eine veränderbare Velocitykurve implementieren .. aber ich bekomm ja nicht mal die einfachste Variante sicher hin bis jetzt
schon mal Danke und schöne Grüße
- Eigenschaft