[erlang-questions] Generating sine waves and/or audio stream output
Ivan Uemlianin
ivan@REDACTED
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
Ivan
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
ivan@REDACTED
www.llaisdy.com
llaisdy.wordpress.com
www.linkedin.com/in/ivanuemlianin
"Froh, froh! Wie seine Sonnen, seine Sonnen fliegen"
(Schiller, Beethoven)
============================================================
More information about the erlang-questions
mailing list