Search
Wednesday, 23rd of June 2021, 8:16:45 UTC
18:38:54
utis
how might one produce a tone of a given frequency and duration in cl?
18:45:26
wasamasa
study how sound waves work and how they're represented
18:45:49
wasamasa
for starters you can look at how the raw sound formats work with aplay/paplay/sox/...
18:46:21
wasamasa
then you generate a specific amount of numbers fulfilling that tonality/frequency/duration
18:46:23
pjb
utis: something like: (let ((samples (make-array 100000 :element-type '(signed-byte 16)))) (loop with sampling-rate = 44100 #|sample/s|# with freq = 10 #|Hz|# for i below (length sample) do (setf (aref samples i) (round (* 32000 (sin (/ (* 2 PI freq i) sampling-rate)))))))
18:46:28
wasamasa
then you shove them towards aplay/paplay/sox
18:46:39
wasamasa
maybe save them to disk
18:46:50
wasamasa
maybe study how the .wav format works and save it to such a file
18:47:25
wasamasa
I've done this with bytebeat in elisp
18:47:52
wasamasa
sound libraries simplify some of the steps for you, like playing back the sounds without the help of said programs
18:48:01
wasamasa
or giving you mixing or whatever
18:51:48
pjb
utis: common-music version 2 is written in Common Lisp.
18:52:17
pjb
and there are other music or sound programs written in lisp.
18:52:34
pjb
utis: https://cliki.net/site/search?query=music
18:52:47
pjb
utis: https://cliki.net/site/search?query=sound
18:53:25
pjb
utis: https://www.youtube.com/watch?v=xzTH_ZqaFKI
19:33:16
edgar-rft
utis: Incudine is a real-time music synthesizer written in Common Lisp if that's what you're looking for -> http://incudine.sourceforge.net/
19:35:05
edgar-rft
utis: but there's also cl-portaudio if you're looking for a simple soundcard beep-tone generator -> https://github.com/filonenko-mikhail/cl-portaudio
Wednesday, 23rd of June 2021, 20:16:45 UTC