DECLARE FUNCTION ScaleVelocities(BYREF h AS harmtype, BYVAL minvel AS BYTE, BYVAL maxvel AS BYTE, OPT BYVAL logscale AS SINGLE, OPT BYVAL norm AS LONG) AS STRING 'DECLARE FUNCTION InstrumTransposeToRange(BYREF m AS musician, OPT BYVAL mintes AS BYTE, OPT BYVAL maxtes AS BYTE) AS LONG FUNCTION ScaleVelocities(BYREF h AS harmtype, BYVAL minvel AS BYTE, BYVAL maxvel AS BYTE, OPT BYVAL logscale AS SINGLE, OPT BYVAL norm AS LONG) AS STRING 'scale all velocities in har [1 -> 127] so that they become ranged [minvel -> maxvel] 'if logscale is filled in the scaling follows a logarithmic scale 'if norm is set we normalize the original har first so that the highest vel = 127 'maybe this is something for g_mus.bas? LOCAL i AS LONG LOCAL v AS BYTE LOCAL x AS SINGLE IF ISFALSE logscale THEN logscale = 1 IF norm THEN FOR i = 1 TO 128 v = ASC(MID$(h.vel, i, 1)) x = MAX(x, v) NEXT IF ISFALSE x THEN EXIT FUNCTION x = 127 / x FOR i = 1 TO 128 v = ASC(MID$(h.vel, i, 1)) IF v THEN MID$(h.vel, i, 1) = CHR$(INT(v * x)) NEXT END IF FOR i = 1 TO 128 v = ASC(MID$(h.vel, i, 1)) IF v THEN v = (v/127) ^ logscale v = minvel + v * (maxvel - minvel) MID$(h.vel, i, 1) = CHR$(v) END IF NEXT FUNCTION = h.vel END FUNCTION 'FUNCTION InstrumTransposeToRange(BYREF m AS musician, OPT BYVAL mintes AS BYTE, OPT BYVAL maxtes AS BYTE) AS LONG ' 'transposes note that are too high/low according to given limits, or to instrument properties if no limits given ' 'returns 0 if nothing changed, otherwise nr of changes ' LOCAL i AS LONG ' LOCAL changed AS LONG ' IF ISFALSE mintes THEN mintes = m.lowtes ' IF ISFALSE maxtes THEN maxtes = m.hightes ' FOR i = 0 TO mintes - 1 ' IF MID$(m.har(1).vel, i + 1, 1) <> CHR$(0) THEN ' INCR changed ' AddNote2har m.har(1), i + 12, ASC(MID$(m.har(1).vel, i + 1, 1)) ' DelNote2Har m.har(1), i ' END IF ' NEXT ' FOR i= 127 TO maxtes - 1 STEP -1 ' IF MID$(m.har(1).vel, i + 1, 1) <> CHR$(0) THEN ' INCR changed ' AddNote2har m.har(1), i - 12, ASC(MID$(m.har(1).vel, i + 1, 1)) ' DelNote2Har m.har(1), i ' END IF ' NEXT ' FUNCTION = changed 'END FUNCTION