/branches/pkienzle/octave-forge/FIXES/mu2lin.m

# · MATLAB · 84 lines · 79 code · 5 blank · 0 comment · 4 complexity · f6069969a1c8684a860416f163e68b5b MD5 · raw file

  1. ## Copyright (C) 1996, 1997 John W. Eaton
  2. ##
  3. ## This file is part of Octave.
  4. ##
  5. ## Octave is free software; you can redistribute it and/or modify it
  6. ## under the terms of the GNU General Public License as published by
  7. ## the Free Software Foundation; either version 2, or (at your option)
  8. ## any later version.
  9. ##
  10. ## Octave is distributed in the hope that it will be useful, but
  11. ## WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  13. ## General Public License for more details.
  14. ##
  15. ## You should have received a copy of the GNU General Public License
  16. ## along with Octave; see the file COPYING. If not, write to the Free
  17. ## Software Foundation, 59 Temple Place - Suite 330, Boston, MA
  18. ## 02111-1307, USA.
  19. ## -*- texinfo -*-
  20. ## @deftypefn {Function File} {} mu2lin (@var{x}, @var{bps})
  21. ## If the matrix @var{x} represents audio data in mu-law encoding,
  22. ## @code{mu2lin} converts it to linear encoding. The optional argument
  23. ## @var{bps} specifies whether the output data uses 8 bit samples (range
  24. ## -128 to 127), 16 bit samples (range -32768 to 32767) or default 0 for
  25. ## real values (range -1 to 1).
  26. ## @end deftypefn
  27. ## @seealso{lin2mu, loadaudio, saveaudio, playaudio, setaudio, and record}
  28. ## Author: AW <Andreas.Weingessel@ci.tuwien.ac.at>
  29. ## Created: 18 October 1994
  30. ## Adapted-By: jwe
  31. ## Paul Kienzle <pkienzle@kienzle.powernet.co.uk>
  32. ## handle [-1,1] input range
  33. function y = mu2lin (x, bit)
  34. if (nargin == 1)
  35. bit = 0;
  36. elseif (nargin == 2)
  37. if (bit != 0 && bit != 8 && bit != 16)
  38. error ("mu2lin: bit must be either 0, 8 or 16");
  39. endif
  40. else
  41. usage ("y = mu2lin (x, bit)");
  42. endif
  43. ulaw = [\
  44. -32124, -31100, -30076, -29052, -28028, -27004, -25980, -24956, \
  45. -23932, -22908, -21884, -20860, -19836, -18812, -17788, -16764, \
  46. -15996, -15484, -14972, -14460, -13948, -13436, -12924, -12412, \
  47. -11900, -11388, -10876, -10364, -9852, -9340, -8828, -8316, \
  48. -7932, -7676, -7420, -7164, -6908, -6652, -6396, -6140, \
  49. -5884, -5628, -5372, -5116, -4860, -4604, -4348, -4092, \
  50. -3900, -3772, -3644, -3516, -3388, -3260, -3132, -3004, \
  51. -2876, -2748, -2620, -2492, -2364, -2236, -2108, -1980, \
  52. -1884, -1820, -1756, -1692, -1628, -1564, -1500, -1436, \
  53. -1372, -1308, -1244, -1180, -1116, -1052, -988, -924, \
  54. -876, -844, -812, -780, -748, -716, -684, -652, \
  55. -620, -588, -556, -524, -492, -460, -428, -396, \
  56. -372, -356, -340, -324, -308, -292, -276, -260, \
  57. -244, -228, -212, -196, -180, -164, -148, -132, \
  58. -120, -112, -104, -96, -88, -80, -72, -64, \
  59. -56, -48, -40, -32, -24, -16, -8, 0 ];
  60. ulaw = [ ulaw, -ulaw ]';
  61. [nr, nc] = size (x);
  62. y = ulaw (x (:) + 1);
  63. y = reshape (y, nr, nc);
  64. ## convert to real or 8-bit
  65. if (bit == 0)
  66. y = y/32768;
  67. elseif (bit == 8)
  68. ld = max (max (abs (y)));
  69. if (ld < 16384) #% && ld > 0)
  70. sc = 64 / ld;
  71. else
  72. sc = 1 / 256;
  73. endif
  74. y = fix (y * sc);
  75. endif
  76. endfunction