X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fm%2Faudio%2Fsaveaudio.m;fp=octave_packages%2Fm%2Faudio%2Fsaveaudio.m;h=6361c876f1f9ad4ece65a6a2744ee54e21690412;hp=0000000000000000000000000000000000000000;hb=1c0469ada9531828709108a4882a751d2816994a;hpb=63de9f36673d49121015e3695f2c336ea92bc278 diff --git a/octave_packages/m/audio/saveaudio.m b/octave_packages/m/audio/saveaudio.m new file mode 100644 index 0000000..6361c87 --- /dev/null +++ b/octave_packages/m/audio/saveaudio.m @@ -0,0 +1,88 @@ +## Copyright (C) 1995-2012 John W. Eaton +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or (at +## your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## . + +## -*- texinfo -*- +## @deftypefn {Function File} {} saveaudio (@var{name}, @var{x}, @var{ext}, @var{bps}) +## Save a vector @var{x} of audio data to the file +## @file{@var{name}.@var{ext}}. The optional parameters @var{ext} and +## @var{bps} determine the encoding and the number of bits per sample used +## in the audio file (see @code{loadaudio}); defaults are @file{lin} and +## 8, respectively. +## @seealso{lin2mu, mu2lin, loadaudio, playaudio, setaudio, record} +## @end deftypefn + +## Author: AW +## Created: 5 September 1994 +## Adapted-By: jwe + +function saveaudio (name, x, ext, bps) + + if (nargin < 2 || nargin > 4) + print_usage (); + endif + + if (nargin == 2) + ext = "lin"; + endif + + if (nargin < 4) + bps = 8; + elseif (bps != 8 && bps != 16) + error ("saveaudio: BPS must be either 8 or 16"); + endif + + [nr, nc] = size (x); + if (nc != 1) + if (nr == 1) + x = x'; + nr = nc; + else + error ("saveaudio: X must be a vector"); + endif + endif + + num = fopen ([name, ".", ext], "wb"); + + if (strcmp (ext, "lin") || strcmp (ext, "raw")) + if (bps == 8) + ld = max (abs (x)); + if (ld > 127) # convert 16 to 8 bit + if (ld < 16384) + sc = 64 / ld; + else + sc = 1 / 256; + endif + x = fix (x * sc); + endif + x = x + 127; + c = fwrite (num, x, "uchar"); + else + c = fwrite (num, x, "short"); + endif + elseif (strcmp (ext, "mu") || strcmp (ext, "au") + || strcmp (ext, "snd") || strcmp (ext, "ul")) + y = lin2mu (x); + c = fwrite (num, y, "uchar"); + else + fclose (num); + error ("saveaudio: unsupported extension"); + endif + + fclose (num); + +endfunction