File: TPV.html

package info (click to toggle)
supercollider-sc3-plugins 3.13.0~repack-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 20,104 kB
  • sloc: cpp: 303,352; lisp: 9,589; ansic: 3,547; sh: 96; makefile: 87; haskell: 21
file content (150 lines) | stat: -rw-r--r-- 8,070 bytes parent folder | download | duplicates (5)
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="824.48">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #ad140d}
p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #606060}
p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000; min-height: 12.0px}
p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000}
p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000}
span.s1 {color: #000000}
span.s2 {color: #001bb9}
span.s3 {color: #0000bf}
span.Apple-tab-span {white-space:pre}
</style>
</head>
<body>
<p class="p1"><b>TPV<span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>Tracking Phase Vocoder</b></p>
<p class="p2"><br></p>
<p class="p3"><b>resynthesis = TPV.ar(chain, windowsize=1024, hopsize=512, maxpeaks=80, currentpeaks, freqmult=1.0, tolerance=4, noisefloor= 0.01, mul=1.0, add=0.0)</b></p>
<p class="p2"><br></p>
<p class="p3">Implementation of the McAulay and Quatieri 1986 sinusoidal model, as described in:</p>
<p class="p2"><br></p>
<p class="p3">McAulay, R. and Quatieri, T. (1986) Speech analysis/Synthesis based on a sinusoidal representation. IEEE Transactions on Acoustics, Speech, and Signal Processing 34(4): 744--754</p>
<p class="p2"><br></p>
<p class="p3"><b>chain [fft] - </b>Audio input to track, which has been pre-analysed by the FFT UGen; see examples below for the expected FFT size</p>
<p class="p3"><b>windowsize- </b>Window size used for FFT</p>
<p class="p3"><b>hopsize- </b>hop size for FFT, typically half window size</p>
<p class="p3"><b>maxpeaks- </b>Absolute maximum number of allowed peaks to be detected in the spectrum</p>
<p class="p3"><b>currentpeaks- </b>Current number of allowed peaks to be detected in the spectrum</p>
<p class="p3"><b>freqmult- </b>Resynthesis parameter to change frequency; currently causes a gross multiplication of frequency of all sinusoidal components, no envelope compensation</p>
<p class="p3"><b>tolerance- </b>Search area for matching peaks; within tolerance spectral bins</p>
<p class="p3"><b>noisefloor- </b>Minimum magnitude for a candidate peak</p>
<p class="p2"><br></p>
<p class="p4"><br></p>
<p class="p5">b.free</p>
<p class="p4"><br></p>
<p class="p6">//assumes hop of half fftsize, fine</p>
<p class="p6"><span class="s1">b = </span><span class="s2">Buffer</span><span class="s1">.alloc(s,1024,1); </span>//for sampling rates 44100 and 48000</p>
<p class="p6">//b = Buffer.alloc(s,2048,1); //for sampling rates 88200 and 96000</p>
<p class="p4"><br></p>
<p class="p6">//d=Buffer.read(s,"sounds/a11wlk01.wav");</p>
<p class="p7"><span class="s1">d=</span><span class="s2">Buffer</span><span class="s1">.read(s,</span>"sounds/break"<span class="s1">);</span></p>
<p class="p4"><br></p>
<p class="p8"><br></p>
<p class="p9">(</p>
<p class="p9">{</p>
<p class="p8"><br></p>
<p class="p9"><span class="s3">var</span> in, fft, output;</p>
<p class="p8"><br></p>
<p class="p10"><span class="s1">in= </span><span class="s3">SoundIn</span><span class="s1">.ar(0); </span>//PlayBuf.ar(1,d,BufRateScale.kr(d),1,0,1);</p>
<p class="p8"><br></p>
<p class="p9">fft = <span class="s3">FFT</span>(b, in, wintype:1);</p>
<p class="p8"><br></p>
<p class="p9">output=<span class="s3">TPV</span>.ar(fft, 1024, 512, 70,<span class="s3">MouseX</span>.kr(1,70), <span class="s3">MouseY</span>.kr(0.25,3),4,0.2);<span class="Apple-converted-space"> </span></p>
<p class="p8"><br></p>
<p class="p10">//Out.ar(0,Pan2.ar(output));<span class="Apple-converted-space"> </span></p>
<p class="p9">output</p>
<p class="p9">}.play</p>
<p class="p9">)</p>
<p class="p8"><br></p>
<p class="p9">(</p>
<p class="p9">{</p>
<p class="p8"><br></p>
<p class="p9"><span class="s3">var</span> in, fft, output;</p>
<p class="p8"><br></p>
<p class="p9">in= <span class="s3">PlayBuf</span>.ar(1,d,<span class="s3">BufRateScale</span>.kr(d),1,0,1);</p>
<p class="p8"><br></p>
<p class="p9">fft = <span class="s3">FFT</span>(b, in, wintype:1);</p>
<p class="p8"><br></p>
<p class="p9">output=<span class="s3">TPV</span>.ar(fft, 1024, 512, 50,50,1.0,<span class="s3">MouseX</span>.kr(0.1,100),<span class="s3">MouseY</span>.kr(-20,40).dbamp);<span class="Apple-converted-space"> </span></p>
<p class="p8"><br></p>
<p class="p10">//Out.ar(0,Pan2.ar(output));<span class="Apple-converted-space"> </span></p>
<p class="p9">output</p>
<p class="p9">}.play</p>
<p class="p9">)</p>
<p class="p8"><br></p>
<p class="p8"><br></p>
<p class="p9">(</p>
<p class="p9">{</p>
<p class="p8"><br></p>
<p class="p9"><span class="s3">var</span> in, fft, output;</p>
<p class="p8"><br></p>
<p class="p9">in= <span class="s3">PlayBuf</span>.ar(1,d,<span class="s3">BufRateScale</span>.kr(d),1,0,1);</p>
<p class="p8"><br></p>
<p class="p9">fft = <span class="s3">FFT</span>(b, in);</p>
<p class="p8"><br></p>
<p class="p9">output=<span class="s3">TPV</span>.ar(fft, 1024, 512, 1,1);<span class="Apple-converted-space"> </span></p>
<p class="p8"><br></p>
<p class="p9">output</p>
<p class="p10">//Out.ar(0,output);<span class="Apple-converted-space"> </span></p>
<p class="p9">}.plot(0.05, s, <span class="s3">nil</span>, -1.5, 1.5);</p>
<p class="p9">)</p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p6">//residual</p>
<p class="p4"><br></p>
<p class="p6"><span class="s1">b = </span><span class="s2">Buffer</span><span class="s1">.alloc(s,1024,1); </span>//for sampling rates 44100 and 48000</p>
<p class="p4"><br></p>
<p class="p7"><span class="s1">d=</span><span class="s2">Buffer</span><span class="s1">.read(s,</span>"sounds/break"<span class="s1">);</span></p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p5">(</p>
<p class="p9">{</p>
<p class="p8"><br></p>
<p class="p9"><span class="s3">var</span> in, fft, output;</p>
<p class="p9"><span class="s3">var</span> input,inputAmp,threshhold,gate;</p>
<p class="p8"><br></p>
<p class="p10"><span class="s1">in= </span><span class="s3">SoundIn</span><span class="s1">.ar(0); </span>//PlayBuf.ar(1,d,BufRateScale.kr(d),1,0,1);</p>
<p class="p10">//inputAmp = Amplitude.kr(input);</p>
<p class="p10">//threshhold = 0.001;<span class="Apple-tab-span">	</span>// noise gating threshold</p>
<p class="p10">//gate = Lag.kr(inputAmp &gt; threshhold, 0.01);</p>
<p class="p10">//in= (input * gate);</p>
<p class="p8"><br></p>
<p class="p9">fft = <span class="s3">FFT</span>(b, in, wintype:1);</p>
<p class="p8"><br></p>
<p class="p9">output=<span class="s3">TPV</span>.ar(fft, 1024, 512, 50,50,1.0,4,0.2);<span class="Apple-converted-space"> </span></p>
<p class="p8"><br></p>
<p class="p10">//Out.ar(0,Pan2.ar(output));<span class="Apple-converted-space"> </span></p>
<p class="p10">//delay by 512 samples for output, then phase measurement is from centre of frame, so <span class="Apple-converted-space"> </span></p>
<p class="p9">output - <span class="s3">DelayN</span>.ar(in,0.1, (512+512)/44100)</p>
<p class="p9">}.play</p>
<p class="p5">)</p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p4"><br></p>
<p class="p4"><br></p>
</body>
</html>