1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-05 06:09:47 +02:00
2010-01-24 09:19:39 +00:00

86 lines
3.3 KiB
Common Lisp

;; writetoss -- writes the "toss prepended samples" routine
;; modified May 3, 1999 by RBD to not adjust t0 when samples will be tossed
;; also, final_time is just susp->susp.t0, since t0 is unadjusted.
(defun write-toss (alg stream)
(let ((alg-name (get alg 'name))
(sound-names (get alg 'sound-names)))
;;----------------
;; void ALG_toss_fetch(susp, snd_list)
;; register ALG_susp_type susp;
;; snd_list_type snd_list;
;; {
;; long final_count = susp->susp.toss_cnt);
;; time_type final_time = susp->susp.t0;
;; FORMERLY, THIS WAS:
;; time_type final_time = susp->susp.t0 + final_count / susp->susp.sr;
;; long n;
;;----------------
(format stream "~%~%void ~A_toss_fetch(susp, snd_list)~%" alg-name)
(format stream " register ~A_susp_type susp;~%" alg-name)
(format stream " snd_list_type snd_list;~%{~%")
(format stream
" long final_count = susp->susp.toss_cnt;~%")
(format stream
" time_type final_time = susp->susp.t0;~%")
(format stream " long n;~%~%")
(cond (*watch*
(format stream
" printf(\"~A_toss_fetch: final count %d final time %d\\n\", "
alg-name)
(format stream "final_count, final_time);~%")))
;;------------------------------
;; for each sound argument:
;;
;; /* fetch samples from NAME up to final_time for this block of zeros */
;; while ((round((final_time - susp->NAME->t0) * susp->NAME->sr)) >=
;; susp->NAME->current)
;; susp_get_samples(NAME, NAME_ptr, NAME_cnt);
;;------------------------------
(dolist (name sound-names)
(format stream
" /* fetch samples from ~A up to final_time for this block of zeros */~%"
name)
(format stream
" while ((round((final_time - susp->~A->t0) * susp->~A->sr)) >=~%"
name name)
(format stream "\t susp->~A->current)~%" name)
(format stream "\tsusp_get_samples(~A, ~A_ptr, ~A_cnt);~%"
name name name))
;;----------------
;; /* convert to normal processing when we hit final_count */
;; /* we want each signal positioned at final_time */
;;----------------
(format stream
" /* convert to normal processing when we hit final_count */~%")
(format stream " /* we want each signal positioned at final_time */~%")
;;----------------
;; for each sound argument:
;;
;; n = round((final_time - susp->NAME->t0) * susp->NAME->sr -
;; (susp->NAME->current - susp->NAME_cnt));
;; susp->NAME_ptr += n;
;; susp_took(NAME_cnt, n);
;;----------------
(dolist (name sound-names)
(format stream " n = round((final_time - susp->~A->t0) * susp->~A->sr -~%"
name name)
(format stream " (susp->~A->current - susp->~A_cnt));~%"
name name)
(format stream " susp->~A_ptr += n;~%" name)
(format stream " susp_took(~A_cnt, n);~%" name))
;;----------------
;; susp->susp.fetch = susp->susp.keep_fetch;
;; (*(susp->susp.fetch))(susp, snd_list);
;; }
;;----------------
(format stream " susp->susp.fetch = susp->susp.keep_fetch;~%")
(format stream " (*(susp->susp.fetch))(susp, snd_list);~%")
(format stream "}~%")))