;; 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 "}~%")))