[erlang-questions] ANN: wave.erl
Kostis Sagonas
kostis@REDACTED
Tue Jun 1 11:19:26 CEST 2010
Ivan Uemlianin wrote:
> Dear All
>
> Please find below wave.erl, an erlang script for reading and writing
> .wav audio files. I am releasing it under the ISC license.
>
> The script exports functions read/1, write/3 and write/2, and the wave
> record:
>
> -record(wave, {audio_format, sample_rate, data}).
>
> where:
> - audio_format is an unsigned integer (currently only 1, i.e. pcm
> encoding, is supported);
> - sample_rate is an unsigned integer (i.e., samples per second, in kHz);
> - data is a list of lists of signed integers, one list for each channel
> (e.g., stereo will have two lists of integers).
>
> read(FileName) reads a wav file and returns a wave record.
>
> write(WavRecord, FileName, BitsPerSample) writes the wave record
> WavRecord to the file FileName with the sample size BitsPerSample.
>
> write(WavRecord, FileName) just calls write/3 with BitsPerSample = 16.
Rather than writing all the above, which is just words in a mail, why
don't you add the following to the file which is machine-checkable
documentation which is now part of the code?
-------------------------------------------------------------------------
-type audio_format() :: 1. % non_neg_integer() see wav docs for formats
-type sample_rate() :: non_neg_integer().
-record(wave, {audio_format :: audio_format(),
sample_rate :: sample_rate(),
data :: [[integer()]]}).
-type wave() :: #wave{}.
-spec read(file:filename()) -> wave().
... AND FURTHER DOWN
-spec write(wave(), F) -> {'ok', F} when is_subtype(F, file:filename()).
-spec write(wave(), F, sample_rate()) -> {'ok', F} when is_subtype(F,
file:filename()).
--------------------------------------------------------------------------
[although I do not see any compelling reason for the write functions to
return {'ok', F} rather than just 'ok' at the moment.]
Kostis
More information about the erlang-questions
mailing list