[erlang-questions] Generating sine waves and/or audio stream output

Ivan Uemlianin <>
Fri Apr 2 18:08:11 CEST 2010

Dear Willem

This hacky little script (my first in erlang!) will write a sound and 
pipe it to audio.

play(Sound) ->
     Fn = sinus,
     file:write_file(io_lib:format("~p.raw", [Fn]), Sound),
     os:cmd(io_lib:format("sox -r ~B -c 1 -w -s ~p.raw ~p.wav", 
[?SamplingRate, Fn, Fn])),
     os:cmd(io_lib:format("afplay ~p.wav", [Fn])).

sox is a unix tool, here it converts the raw audio file to wav format 
file.  On a proper unix platform sox can output to audio.  On MacOSX you 
have to write to a file and use afplay to play the file.

This is not a very nice function.  I shall write a function to convert a 
raw sound into a wav format binary.  It would be v nice to habe 
something like an erlang binding for PortAudio.  In the meantime, the 
function above makes it possible to listen to generated sounds fmor the 
erlang shell.

With thanks and apologies


On 25/03/2010 19:04, Willem de Jong wrote:
> Hmm, I had forgotten about some of the complexities involved.
> I do not have a function that writes wav files. I put the pcm data 
> that is generated by this into a flash file. For wav files you have to 
> do add a header and framing, I believe.
> I added a function that puts together the parts of the sound. You can 
> write it to a file like this:
> > file:write_file("sinus.raw", sound:sound(440, 3, 0.5, sinus)).
> (440 hertz, 3 seconds, volume 0.5 (50%), sinus wave form).
> This file will be in "raw" format (pcm without headers). With the 
> current settings the sample rate is 22050, mono, sample size 16 bits 
> big endian.
> Regards,
> Willem

Ivan A. Uemlianin
Speech Technology Research and Development


     "Froh, froh! Wie seine Sonnen, seine Sonnen fliegen"
                      (Schiller, Beethoven)

More information about the erlang-questions mailing list