aboutsummaryrefslogtreecommitdiff
path: root/site/udo/sampling.udo
blob: 66a571be9e3160dcf3843e026135a847fac8fcef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#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