Mercurial > hg > octave-lyh
changeset 15529:9a7f73fc304f
Fix wavwrite to accept a row vector input (bug #37540)
* wavwrite.m: Accept a row vector as a single audio channel. Update
docstring and add a test case.
author | Mike Miller <mtmiller@ieee.org> |
---|---|
date | Mon, 15 Oct 2012 21:02:42 -0400 |
parents | 8d2b3db8b5b0 |
children | 203c78063bff |
files | scripts/audio/wavwrite.m |
diffstat | 1 files changed, 24 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/audio/wavwrite.m +++ b/scripts/audio/wavwrite.m @@ -23,7 +23,8 @@ ## Write @var{y} to the canonical RIFF/WAVE sound file @var{filename} ## with sample rate @var{Fs} and bits per sample @var{bps}. The ## default sample rate is 8000 Hz with 16-bits per sample. Each column -## of the data represents a separate channel. +## of the data represents a separate channel. If @var{y} is either a +## row vector or a column vector, it is written as a single channel. ## @seealso{wavread} ## @end deftypefn @@ -50,11 +51,20 @@ endif endif + ## calculate filesize + [n, channels] = size (y); + + ## allow y to be a row vector + if (n == 1) + n = channels; + channels = 1; + endif + ## test arguments - if (columns (y) < 1) + if (channels < 1) error ("wavwrite: Y must have at least one column"); endif - if (columns (y) > 0x7FFF) + if (channels > 0x7FFF) error ("wavwrite: Y has more than 32767 columns (too many for a WAV-file)"); endif @@ -70,9 +80,6 @@ error ("wavwrite: sample resolution not supported"); endswitch - ## calculate filesize - [n, channels] = size (y); - ## size of data chunk ck_size = n*channels*(bits_per_sample/8); @@ -174,10 +181,19 @@ %! unlink (fname); % %!test -%! A = [-2:2]; +%! A = [-2:2]'; %! wavwrite (A, fname); %! B = wavread (fname); %! B *= 32768; -%! assert (B, [-32768 -32768 0 32767 32767]); +%! assert (B, [-32768 -32768 0 32767 32767]'); +%! unlink (fname); +% +%!test +%! A = [-1:0.1:1]; +%! wavwrite (A, fname); +%! [B, samples_per_sec, bits_per_sample] = wavread (fname); +%! assert (A', B, 1/2^15); +%! assert (samples_per_sec, 8000); +%! assert (bits_per_sample, 16); %! unlink (fname);