[CM] memory fault within run macro
Steven Jones
plewto at gmail.com
Fri, 23 Nov 2007 03:06:22 -0600
Hi All,
I'm attempting to write a compound unit generator which ring modulates
a sine wave with narrow-band noise. I'm using a three element array to
hold the various primitive unit generators. The first array element is
a symbol to identify the structure, the second is a rand-interp object
and the third an oscil object. When I execute the test instrument
however I get a memory-fault error. The offending code appears to be
the rand-interp in the nseband macro. I have also tried rand with the
same result.
Im using SBCL on Fedora 5.
(defmacro make-nseband (&key (frequency 440)(bw 10))
`(make-array 3 :initial-contents (list
'nseband
(make-rand-interp :frequency ,bw)
(make-oscil :frequency ,frequency)
)))
(defmacro nseband? (obj)
`(and (arrayp ,obj)(eq (aref ,obj 0) 'nseband)))
(defmacro nseband (obj &optional (fm 0))
`(*
(rand-interp (aref ,obj 1)) ;; *** APPARENT TROUBLE SPOT
(oscil (aref ,obj 2) ,fm)
))
(definstrument test (&key (dur 1)(frq 440)(bw 10)(amp 1))
(let* ((s1 (* dur *srate*))
(obj (make-nseband :frequency frq :bw bw)))
(dotimes (i 3)
(format t "~%obj[~A] ==> ~A" i (aref obj i)))
(with-sound ()
(run
(loop for s from 0 below s1 do
(outa s (nseband obj)))))))
This is the error message
* (test)
obj[0] ==> NSEBAND
obj[1] ==> #<rand-interp: freq: 0.003 (10 Hz), phase: 0.0 (0 degrees),
amplitude: 1.000, increment: 0.0>
obj[2] ==> #<oscil: freq: 0.125 (440 Hz), phase: 0.0 (0 degrees)>
debugger invoked on a SB-SYS:MEMORY-FAULT-ERROR in thread #<THREAD
"initial thread" {AA72831}>:
Unhandled memory fault at #x4. <...snip...>
Thanks for any suggestions
--Steven Jones