fix float numbers sent to psto not being handled properly by tc.preset

This commit is contained in:
2025-09-10 20:10:56 +02:00
parent a3f5769a6a
commit cc3bf58117

View File

@@ -782,61 +782,60 @@ function text() {
function recall() {
var args = arrayfromargs(arguments);
if (args.length == 1) {
previous_active_slot = active_slot;
is_interpolating = 0;
set_active_slot(args[0]);
outlet(0, 'recall', args[0]);
} else if (args.length == 3) {
var src_slot = args[0];
var trg_slot = args[1];
var val, src_slot, trg_slot, interp;
if (args.length == 1) {
val = Math.abs(args[0]);
src_slot = Math.floor(val);
interp = val % 1;
trg_slot = interp == 0 ? src_slot : src_slot + 1;
} else if (args.length == 3) {
src_slot = Math.abs(args[0]);
trg_slot = Math.abs(args[1]);
interp = Math.min( 1, Math.max(0, args[2]));
}
for (var i = 0; i < filled_slots.length; i++) {
slots[filled_slots[i]].interp = -1;
}
if (slots[src_slot].name != null && slots[trg_slot].name != null) {
for (var i = 0; i < filled_slots.length; i++) {
slots[filled_slots[i]].interp = -1;
}
if (slots[src_slot].name != null && slots[trg_slot].name != null) {
if (ignore_slot_zero == 1 && src_slot == 0) {
// Set src_slot as if we were interpolating from the last recalled preset different than 0
// This way we can monitor which preset we come from even if we used preset 0 as intermediary preset
if (previous_target != active_slot) {
// If the last target preset was through interpollation or direct recall
src_slot = previous_active_slot;
} else {
src_slot = active_slot;
}
}
var interp = Math.min( 1, Math.max(0, args[2]));
if (interp == 0.0) {
slots[src_slot].interp = -1;
slots[trg_slot].interp = -1;
is_interpolating = 0;
if (previous_target != active_slot) {
previous_active_slot = active_slot;
} else if (args[0] != 0) {
previous_active_slot = args[0];
} else {
previous_active_slot = previous_target;
}
set_active_slot(src_slot);
} else if (interp == 1.0) {
slots[src_slot].interp = -1;
slots[trg_slot].interp = -1;
is_interpolating = 0;
previous_target = trg_slot;
set_active_slot(trg_slot);
if (ignore_slot_zero == 1 && src_slot == 0) {
// Set src_slot as if we were interpolating from the last recalled preset different than 0
// This way we can monitor which preset we come from even if we used preset 0 as intermediary preset
if (previous_target != active_slot) {
// If the last target preset was through interpollation or direct recall
src_slot = previous_active_slot;
} else {
slots[src_slot].interp = 1 - interp;
slots[trg_slot].interp = interp;
is_interpolating = 1;
active_slot = 0;
src_slot = active_slot;
}
outlet(0, "recall", src_slot, trg_slot, interp);
}
if (interp == 0.0) {
slots[src_slot].interp = -1;
slots[trg_slot].interp = -1;
is_interpolating = 0;
if (previous_target != active_slot) {
previous_active_slot = active_slot;
} else if (src_slot != 0) {
previous_active_slot = src_slot;
} else {
previous_active_slot = previous_target;
}
set_active_slot(src_slot);
} else if (interp == 1.0) {
slots[src_slot].interp = -1;
slots[trg_slot].interp = -1;
is_interpolating = 0;
previous_target = trg_slot;
set_active_slot(trg_slot);
} else {
slots[src_slot].interp = 1 - interp;
slots[trg_slot].interp = interp;
is_interpolating = 1;
active_slot = 0;
}
outlet(0, "recall", src_slot, trg_slot, interp);
}
mgraphics.redraw();