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)