usdb_syncer
usdb_syncer copied to clipboard
Adapt linebreak calculation to YASS (instead of USDX)?
DoubleDee74 proposed to change the linebreak calculation of the Syncer to mimic that of YASS instead of USDX.
inout[0] = TonA.startBeat + TonA.length
inout[1] = TonB.startBeat
getCommonPageBreak()
gibt dann den Abstand zwischen A und B zurück.
Wenn dann der Abstand größer als 0 ist, dann wird der Start-Punkt des PageBreaks auf inout[0] gesetzt.
public static int getCommonPageBreak(int inout[], double bpm) {
int pause = inout[1] - inout[0];
if (pause < 0) {
return -1;
}
// Hier wird die Pause zwischen den beiden Tönen in Sekunden berechnet
double psec = pause * 60 / (4 * bpm);
// Wenn die Pause länger als 2 Sek dauert, dann wird der Umbruch hinter dem Ende des ersten
// Tones eine Taktlänge, bei mehr als 4 Sek zwei Taktlängen gesetzt
if (psec >= 4) {
int gap = (int) (2 * 4 * bpm / 60);
inout[0] = inout[0] + gap;
return 4;
} else if (psec >= 2) {
int gap = (int) (4 * bpm / 60);
inout[0] = inout[0] + gap;
return 2;
}
// Falls die Pause kürzer als 2 Sek ist, ist man noch nicht rausgesprungen, sondern setzt dann
// den Umbruch vor den Start des zweiten Tones. Und zwar 2, 3 oder 4 Beats davor.
if (pause == 0 || pause == 1) {
return 0;
} else if (pause >= 2 && pause <= 8) {
inout[0] = inout[1] - 2;
return 8;
} else if (pause >= 9 && pause <= 12) {
inout[0] = inout[1] - 3;
return 12;
} else if (pause >= 13 && pause <= 16) {
inout[0] = inout[1] - 4;
return 16;
}
// Wenn die Pause kürzer als 2 Sek ist aber noch länger als 16 Schläge, dann wird der Umbruch
// einfach 10 Schläge hinter dem Ende des ersten Tones gesetzt.
inout[0] = inout[0] + 10;
return 18;
}