Audacity Support Forum /
Audacity and Nyquist /
Nyquist Reference Manual /
Nyquist Examples and Tutorials
LPC Analysis and Synthesis Tutorial /
View example: lpcdemo.lsp /
View example: lpc-exmpl.dat
;;; LPC demo 1
;;; Pedro J. Morales.
;;; February, 04
;;; Roger B. Dannenberg
;;; July, 04
; where is the file lpc-exmpl.dat
(setf *lpc-path* (current-path))
(setf *lpc-data* (strcat *lpc-path* "lpc-exmpl.dat"))
; this file generated by Nyquist will be loaded by Octave (or Matlab)
(setf *default-octave-file* (strcat *lpc-path* "nyquist.dat"))
; make sure lpc.lsp is loaded
(if (not (fboundp 'lpreson)) (load "lpc.lsp"))
; file-io tools ========================================================
(defun octave-1 (outf data varname datatype &optional (n 1000))
(prog ((points (case datatype
(SND (snd-samples data (1+ n)))
(ARR data)))
len)
(setf len (length points))
(cond ((> len n)
(setf len n)
(format t "WARNING: DATA TRUNCATED TO ~A POINTS~%" len)))
(format outf "# name: ~A\n" varname)
(format outf "# type: matrix\n# rows: 1\n# columns: ~A\n " len)
(dotimes (i len)
(format outf "~A " (aref points i)))
(format outf "\n")))
(defun octave (data-lists) ; (data varname datatype &optional (n 1000))
(prog ((filename *default-octave-file*)
outf)
(setf outf (open filename :direction :output))
(cond ((null outf)
(format t "octave: could not open ~A!~%" filename)
(return nil)))
(format t "octave: writing ~A ... ~%" filename)
(cond ((null outf)
(format t "octave: could not open ~A!~%" filename)
(return nil)))
;(format t "octave: writing ~A ... ~%" filename)
(dolist (l data-lists)
(apply #'octave-1 (cons outf l)))
(close outf)))
; LPANAL ======================================================
; get lpc data ---------------------------------------------------
(defun do-lpc-analysis ()
(let ((myfile (strcat *lpc-path* "a-snd-file.snd")))
(save-lpc-file (make-lpanal-iterator (s-read *myfile*) 0.08 0.04 50)
"temp.dat")))
; SHOW-LPC-DATA ------------------------------------------------
; show values of LPC analysis frames ----------------------------
(defun ex-1 ()
; do not show filter coefs
(show-lpc-data (make-lpc-file-iterator *lpc-data*) 100 120 NIL))
; ------- SAVE-FILE-DATA ---------------------------------------
(defun ex-2 ()
(save-lpc-file (make-lpc-file-iterator *lpc-data*) "temp2.dat"))
;----------- LPC-FREQ ------------------------------------------
; LPC-FREQ. Show frequency response of ALLPOLES filter.
; NEEDS MATLAB or OCTAVE
;
(defun ex-3 ()
(lpc-freq "frm70" (make-lpc-file-iterator *lpc-data*) 70))
; in MATLAB/OCTAVE:
; >> load -force nyquist.dat
; >> [H,W] = freqz(1, frm70, 512);
; >> plot(W,20*log10(abs(H)));
;-------------------------------------------------------------------------
; LPC-STABILITY Check for Stability of LPC filters
; NEEDS MATLAB/OCTAVE
; EXAMPLE
; (ex-3)
; in MATLAB/OCTAVE:
; >> load -force nyquist.dat
; >> find(abs(roots(frm70)) > 1)
; if any abs root is > 1.0 then UNSTABLE
;--------------------------------------------------------------------------
; ALLPOLES LPC allpoles filter
; WARNING: this is a static filter
; for LPC resynthesis a dynamic LPC filter is needed
; EXAMPLE
(defun ex-4 ()
(play (seq
(allpoles-from-lpc (buzz 12 f2 (lfo 5.0 4.0))
(nth-frame (make-lpc-file-iterator *lpc-data*)
30))
(allpoles-from-lpc (buzz 12 f2 (lfo 5.1 4.0))
(nth-frame (make-lpc-file-iterator *lpc-data*)
60))
(allpoles-from-lpc (buzz 12 g2 (lfo 5.3 4.0))
(nth-frame (make-lpc-file-iterator *lpc-data*)
100)) )))
(setf a-lpcdata
'(63.2144 0.674387 0.103287
#(-0.0381026 0.00804115 0.0109905 0.0145117 0.00199174 -0.00129314 0.0171826
0.0181176 0.00179391 -0.0114089 -0.0120949 -0.000410595 -0.0122539
-0.0209354 -0.00804976 -0.00345041 -0.00409532 -0.00227011 0.014224 0.0135451
0.0056023 -0.00651142 -0.00564953 -0.0168921 -0.0377939 -0.0449506 -0.0355592
-0.0339316 -0.0454434 1.19336)))
(setf e-lpcdata
'(40.7157 0.149753 0.0606467
#(0.0244574 -0.0225545 -0.0172724 -0.0122709 -0.0042946 0.00886974 0.0121516 0.0120936
0.00197545 -0.00582163 -0.018367 -0.0201546 -0.00440599 0.00638936 0.0166275 0.0185066
0.00890464 -0.00158013 -0.00494974 -0.00479037 0.0130814 0.0138648 -0.0022018 -0.021368
-0.0343532 -0.0312712 -0.0574975 -0.0918824 -0.112016 1.31398)))
(setf i-lpcdata
'(5.5391 0.0321825 0.0762238 #(-0.0341124 -0.0149688 -0.00585657 -0.0111572
0.00769712 0.0190367 0.00885366 0.0112762 0.0118286 -0.00059044 -0.0140864 -0.0123688
-0.0151128 0.00214354 -0.00810219 -0.00538188 0.00631382 0.020771 0.0356498 0.0295531
0.0242797 0.0124296 0.00445127 -0.013062 -0.0387178 -0.0527783 -0.0685511 -0.076575
-0.0846335 1.24521)))
(defun noise-vocal (lpcdata dur)
(allpoles-from-lpc (noise dur) lpcdata))
(defun ex-5 ()
(play
(seq (noise-vocal a-lpcdata 1)
(noise-vocal e-lpcdata 1)
(noise-vocal i-lpcdata 1))))
(defun buzz-vocal (lpcdata dur)
(allpoles-from-lpc (buzz 16 e2 (const 0.0 dur))
lpcdata))
(defun ex-6 ()
(play
(seq (buzz-vocal a-lpcdata 1)
(buzz-vocal e-lpcdata 1)
(buzz-vocal i-lpcdata 1))))
; ---- LPRESON ------------------------------------------------------------
;
(defun ex-7a ()
;; parameters are sound, lpc-iterator, skiptime
(lpreson (noise 6.5) (make-lpc-file-iterator *lpc-data*) 0.04))
(defun ex-7 ()
(play (ex-7a)))
(defun ex-8a (p dur)
(lpreson (buzz 16 p (scale 1.5 (lfo 3.0 dur)))
(make-lpc-file-iterator *lpc-data*)
0.04))
(defun ex-8 ()
(play
(sim (seq (ex-8a c4 1) (ex-8a g3 1) (ex-8a a3 1) (ex-8a b3 1) (ex-8a c4 1))
(seq (ex-8a c2 2) (ex-8a f2 1) (ex-8a g2 1) (ex-8a e2 1)))))
(defun noalias-buzz (p nmax)
(min
(round (/ *sound-srate* (* 2.0 (step-to-hz p))))
nmax))
(defun ex-9a (p dur skiptime)
(mult (env 0.01 0.01 0.1 1.0 1.0 1.0 dur)
(lpreson (buzz (noalias-buzz p 16) p (scale 1.5 (lfo 3.0 dur)))
(make-lpc-file-iterator *lpc-data*)
skiptime)))
(defun ex-9b (stretch skiptime)
(play
(sim (seq (ex-9a c4 (* 1 stretch) skiptime)
(ex-9a g3 (* 1 stretch) skiptime)
(ex-9a a3 (* 1 stretch) skiptime)
(ex-9a b3 (* 1 stretch) skiptime)
(ex-9a c4 (* 1 stretch) skiptime))
(seq (ex-9a c2 (* 2 stretch) skiptime)
(ex-9a f2 (* 1 stretch) skiptime)
(ex-9a g2 (* 1 stretch) skiptime)
(ex-9a e2 (* 1 stretch) skiptime)))))
(defun ex-9 ()
(ex-9b 1.0 0.04))
(defun ex-10 ()
(ex-9b 1.0 0.02))
(defun ex-11 ()
(ex-9b 2.0 0.04))
(defun ex-12 ()
(ex-9b 0.5 0.02))
(defun ex-13 ()
(ex-9b 4 0.02))
(defun ex-14a (p dur skiptime)
(mult (env 0.01 0.01 0.1 1.0 1.0 1.0 dur)
(lpreson (osc-saw (sim (step-to-hz (+ p 0)) (scale 1.5 (lfo 3.0 dur))))
(make-lpc-file-iterator *lpc-data*)
skiptime)))
(defun ex-14b (stretch skiptime)
(play
(sim (seq (ex-14a c4 (* 1 stretch) skiptime)
(ex-14a g3 (* 1 stretch) skiptime)
(ex-14a a3 (* 1 stretch) skiptime)
(ex-14a b3 (* 1 stretch) skiptime)
(ex-14a c4 (* 1 stretch) skiptime))
(seq (ex-14a c2 (* 2 stretch) skiptime)
(ex-14a f2 (* 1 stretch) skiptime)
(ex-14a g2 (* 1 stretch) skiptime)
(ex-14a e2 (* 1 stretch) skiptime)))))
(defun ex-14 ()
(ex-14b 1 0.04))
(defun ex-15 ()
(ex-14b 4 0.02))
(defun ex-16 ()
(ex-14b 8 0.08))
LPC Analysis and Synthesis Tutorial /
View example: lpcdemo.lsp /
View example: lpc-exmpl.dat
Audacity Support Forum /
Audacity and Nyquist /
Nyquist Reference Manual /
Nyquist Examples and Tutorials