p0 = output start time (seconds)
p1 = duration (seconds)
p2 = amplitude multiplier (relative multiplier of original signal)
p3 = transposition (oct.pc, relative to base pitch of original signal
or absolute pitch -- it will try to 'cluster' near the specified pitch)
p4 = starting LPC frame
p5 = ending LPC frame
p6 = warp factor (-1.0 - 1.0) [optional; default is 0]
p7 = reson center frequency [optional; 0 bypasses]
p8 = reson bandwidth [optional; used only if p7 is specified]
p2 (amplitude), p3 (transposition), p6 (warp), p7 (reson cf) and p8 (reson bw)
can receive dynamic updates from a table or real-time contol source.
p0 = output start time (seconds) p1 = input start time (seconds) p2 = duration (seconds) p3 = amplitude multiplier (relative multiplier of original signal) p4 = starting LPC frame p5 = ending LPC frame p6 = warp factor (-1.0 - 1.0) [optional; default is 0] p7 = reson center frequency [optional; 0 bypasses] p8 = reson bandwidth [optional; used only if p7 is specified] p2 (amplitude), p3 (transposition), p6 (warp), p7 (reson cf) and p8 (reson bw) can receive dynamic updates from a table or real-time contol source.
p0 = dataset name (the file with LPC analysis data)
p1 = number of filter poles in the original analysis [optional; the default value
0 will cause the number of filter poles to be read from the analysis file]
NOTE: this subcommand is required for LPCPLAY to function
p0 = voice/unvoiced threshold (usually <= 0.1 for normal resynthesis)
p1 = noise amplitude (usually <= 0.1 for normal resynthesis)
p2 = unvoiced frame rate [optional; the default value 0 will cause voiced and
unvoiced frames to be synthesized at the same rate]
p3 = rise [optional; default 0]
p4 = decay [optional; default 0]
p5 = threshold cutoff [optional; default 0]
it is unclear what p3, p4 and p5 do (values > 1 may yield hi-pass filtering).
it is also unclear if p0 functions in this command.
Use the set_thresh subcommand instead.
NOTE: this subcommand is required for LPCPLAY to function
p0 = voiced (buzz) threshold (usually close to 0.1) p1 = unvoiced (noise) threshold (usually close to 0.1 also) NOTE: this subcommand is optional for LPCPLAY to function
p0 = harmonic count in buzz (voiced) signal (should be > 0) NOTE: this subcommand is optional for LPCPLAY to functionsetdevfactor
p0 = this sort-of works like set_dev,but not sure exactly how NOTE: this subcommand is optional for LPCPLAY to function
p0 = resets how often the frames are reinitialized. Not sure what effect this has... NOTE: this subcommand is optional for LPCPLAY to function
p0 = 0 or 1, turns this on or off. It looks unimplemented, though. NOTE: this subcommand is optional for LPCPLAY to function
There are many parameters that can be set, and many of them interact with each other. Here are a few of the effects possible:
Care should be taken in the original analysis to fix unstable filter frames and "massage" the pitch tracking data for best results.
NOTE: LPCPLAY is a mono-output instrument.
Sample Scores
very basic:
rtsetparams(44100, 1)
load("LPCPLAY")
dataset("myanalysisfile.lpc")
lpcstuff(0.09, 0.1)
set_thresh(0.09, 0.1)
// basic resynthesis, frames 1-890 for a duration of 4.5 seconds
LPCPLAY(0, 4.5, 1.0, 0.0, 1, 890)
rtsetparams(44100, 1)
load("LPCPLAY")
dataset("myanalysisfile.lpc")
lpcstuff(0.09, 0.1)
set_thresh(-1.0, 0.0) // unvoiced ("whispering") resynthesis
// stretch the time by a factor of 2, still using frames 1-890
LPCPLAY(0, 2*4.5, 1.0, 0.0, 1, 890)
rtsetparams(44100, 1)
load("LPCPLAY")
rtinput("mysoundfile.aif")
dataset("myanalysisfile.lpc")
lpcstuff(0.09, 0.1)
set_thresh(0.09, 0.1)
LPCIN(0, 0.0, 4.5, 1.0, 0.0, 1, 890)
rtsetparams(44100, 1)
load("LPCPLAY")
dataset("myanalysisfile.lpc")
lpcstuff(0.09, 0.1)
set_thresh(0.09, 0.1)
// time-stretch and build a floating chord
LPCPLAY(0, 14.5, 1.0, 0.0, 1, 890)
LPCPLAY(0, 14.5, 1.0, -0.02, 1, 890)
LPCPLAY(0, 14.5, 1.0, 0.05, 1, 890)
LPCPLAY(0, 14.5, 1.0, 0.07, 1, 890)
rtsetparams(44100, 1)
load("LPCPLAY")
dataset("myanalysisfile.lpc")
lpcstuff(0.09, 0.1)
set_thresh(0.09, 0.1)
setdev(1) // monotone pitch, virtually no deviation
// warp formants down, synthesis at middle "C"
LPCPLAY(0, 4.5, 1.0, 8.00, 1, 890, -0.3)
// warp formants up, synthesis at "G" below middle "C"
LPCPLAY(2.1, 4.5, 1.0, 7.07, 1, 890, 0.213)
rtsetparams(44100, 1)
load("LPCPLAY")
dataset("myanalysisfile.lpc")
lpcstuff(thresh = .09, randamp = .1, 0, 0,0,0)
set_thresh(buzthresh = 0.09, noisethresh = 0.1);
fps = 44100/250
frame1=0
frame2=600
warp=0
bw=0
cf=0
amp=10
/* this calculation is just a trick to make 'dur' exactly equal to the */
/* time elapsed between frame1 and frame2 of the lpc data */
dur=(frame2-frame1)/fps
/* straightforward synthesis */
LPCPLAY(start=0,dur,amp,transp = .00001,frame1,frame2,warp,cf,bw)
setdev(1) /* very slight deviation about base pitch, flat result */
LPCPLAY(start=start+dur+1,dur,amp,transp = 8,frame1,frame2,warp,cf,bw)
setdev(0) /* back to normal deviation, slower, higher, raise formants */
LPCPLAY(start=start+dur+1,dur*1.5,amp,transp = .08,frame1,frame2,warp=.2,cf,bw)
/* lower, slower, lower formants --sex change operation */
LPCPLAY(start=start+dur*1.5+1,dur*1.5,amp,transp= -.12,frame1,frame2,warp=-.25,cf,bw)
/* even more */
LPCPLAY(start=start+dur*1.5+1,dur*1.5,amp,transp= 6.00,frame1,frame2,warp=-.25,cf,bw)
/* distorted curve, some formant shift, speeding up slightly */
setdev(30)
LPCPLAY(start=start+dur*1.5+1,dur*.9,amp,transp=.02,frame1,frame2,warp=-.1,cf,bw)
/* modify pitch curves */
setdev(0)
LPCPLAY(start=start+dur+1,dur*.9,amp,transp=8,frame1,frame2,warp=0,cf,bw,frame1+50,8,frame1+100,7,frame1+150,7.05,frame2,9)
/* some whispered speech */
lpcstuff(thresh = -.01, randamp = .1, 0,0,0,0)
set_thresh(0.9, 1);
LPCPLAY(start=start+dur+1,dur,amp,transp=8,frame1,frame2,warp=0,cf,bw)
/* highpass whispered speech */
LPCPLAY(start=start+dur+1,dur,amp,transp=8,frame1,frame2,warp=0,cf=5,bw=.1)
/* highpass whispered speech, shift formants */
LPCPLAY(start=start+dur+1,dur,amp,transp=8,frame1,frame2,warp=-.3,cf=7,bw=.05)
/* andrews sisters */
lpcstuff(thresh = .09, randamp = .1, 0, 0,0,0)
set_thresh(buzthresh, noisethresh);
setdev(15)
amp = 3
LPCPLAY(start=start+dur+1,dur,amp,transp=.01,frame1,frame2,warp=0,cf=0,bw=0)
LPCPLAY(start,dur,amp,transp=.05,frame1,frame2,warp=0,cf=0,bw=0)
LPCPLAY(start,dur,amp,transp=.08,frame1,frame2,warp=0,cf=0,bw=0)