SOLVED: Playing a generated sound
Hello, A while back I asked about playing generated sounds, and with some help from Martin, I’ve managed to get it working on a basic level. It involves loading a 44 KHz 2 channel .WAV sound file and then generating the samples directly into the raw data returned by read-sound-file. Here’s a function for generating a sine wave for 1 second: (defun generate-sine (&key (frequency 220) (volume 10000) (samples 44100)) (let ((amplitude 0) (data (capi:read-sound-file "~/BusFactor1/Data/Audio/1-second-of-silence.wav"))) (dotimes (i (1- samples)) (setf amplitude (floor (* volume (sin (/ (* i pi 2 frequency) 44100))))) (when (>= amplitude (ash 1 15)) (decf amplitude (ash 1 16))) (setf (aref data (+ 44 (* i 2))) (ldb (byte 8 0) amplitude)) (setf (aref data (+ 45 (* i 2))) (ldb (byte 8 8) amplitude)) (setf (aref data (+ 46 (* i 2))) (ldb (byte 8 0) amplitude)) (setf (aref data (+ 47 (* i 2))) (ldb (byte 8 8) amplitude))) (capi:load-sound data))) This returns something that can be played directly with capi:play-sound. — Burton Samograd _______________________________________________ Lisp Hug - the mailing list for LispWorks users lisp-hug@lispworks.com http://www.lispworks.com/support/lisp-hug.html