#ifndef UDO_SAMPLING #define UDO_SAMPLING ## /* Samplers This file is part of the SONICS UDO collection by Richard Knight 2021 License: GPL-2.0-or-later http://1bpm.net */ #include "wavetables.udo" opcode smp_round, a, aapPJjjj ain, aread, ilen, kpitch, kamp, iwsize, irandw, ioverlap xin iwsize = (iwsize == -1) ? (sr*ilen)/10 : iwsize irandw = (irandw == -1) ? (sr*ilen)/100 : irandw ioverlap = (ioverlap == -1) ? 4 : ioverlap kamp = (kamp == -1) ? 1/ioverlap : kamp ifn ftgen 0, 0, sr*ilen, 2, 0 andx phasor 1/ilen tabw ain, andx, ifn, 1 aout sndwarp kamp*0.6, aread, kpitch, ifn, 0, iwsize, irandw, ioverlap, gifnHalfSine, 1 xout aout endop opcode smp_round_st, aa, aaapPJjjj aL, aR, aread, ilen, kpitch, kamp, iwsize, irandw, ioverlap xin iwsize = (iwsize == -1) ? (sr*ilen)/10 : iwsize irandw = (irandw == -1) ? (sr*ilen)/100 : irandw ioverlap = (ioverlap == -1) ? 4 : ioverlap kamp = (kamp == -1) ? 1/ioverlap : kamp ifnL ftgen 0, 0, sr*ilen, 2, 0 ifnR ftgen 0, 0, sr*ilen, 2, 0 andx phasor 1/ilen tabw aL, andx, ifnL, 1 tabw aR, andx, ifnR, 1 aoutL sndwarp kamp*0.6, aread, kpitch, ifnL, 0, iwsize, irandw, ioverlap, gifnHalfSine, 1 aoutR sndwarp kamp*0.6, aread, kpitch, ifnR, 0, iwsize, irandw, ioverlap, gifnHalfSine, 1 xout aoutL, aoutR endop opcode smp_hold, a, aapPJjjj ain, aread, ilen, kpitch, kamp, iwsize, irandw, ioverlap xin iwsize = (iwsize == -1) ? (sr*ilen)/10 : iwsize irandw = (irandw == -1) ? (sr*ilen)/100 : irandw ioverlap = (ioverlap == -1) ? 4 : ioverlap kamp = (kamp == -1) ? 1/ioverlap : kamp istart times ifn ftgen 0, 0, sr*ilen, 2, 0 if (times:k() < istart+ilen) then andx phasor 1/ilen tabw ain, andx, ifn, 1 endif aout sndwarp kamp, aread, kpitch, ifn, 0, iwsize, irandw, ioverlap, gifnHalfSine, 1 xout aout endop opcode smp_hold_st, aa, aaapPJjjj aL, aR, aread, ilen, kpitch, kamp, iwsize, irandw, ioverlap xin iwsize = (iwsize == -1) ? (sr*ilen)/10 : iwsize irandw = (irandw == -1) ? (sr*ilen)/100 : irandw ioverlap = (ioverlap == -1) ? 4 : ioverlap kamp = (kamp == -1) ? 1/ioverlap : kamp istart times ifnL ftgen 0, 0, sr*ilen, 2, 0 ifnR ftgen 0, 0, sr*ilen, 2, 0 if (times:k() < istart+ilen) then andx phasor 1/ilen tabw aR, andx, ifnL, 1 tabw aL, andx, ifnR, 1 endif aoutL sndwarp kamp, aread, kpitch, ifnL, 0, iwsize, irandw, ioverlap, gifnHalfSine, 1 aoutR sndwarp kamp, aread, kpitch, ifnR, 0, iwsize, irandw, ioverlap, gifnHalfSine, 1 xout aoutL, aoutR endop #end