summaryrefslogtreecommitdiff
path: root/modules/sound/macros/mu2lin.sci
diff options
context:
space:
mode:
Diffstat (limited to 'modules/sound/macros/mu2lin.sci')
-rwxr-xr-xmodules/sound/macros/mu2lin.sci21
1 files changed, 21 insertions, 0 deletions
diff --git a/modules/sound/macros/mu2lin.sci b/modules/sound/macros/mu2lin.sci
new file mode 100755
index 000000000..3c786df26
--- /dev/null
+++ b/modules/sound/macros/mu2lin.sci
@@ -0,0 +1,21 @@
+function [y]=mu2lin(mu)
+ //Utility fct: converts mu-law encoding to linear signal.
+ // y=mu2lin(mu) converts mu-law encoded 8-bit audio signals,
+ // stored in the range 0 <= mu <= 255, to
+ // linear signal amplitude in the range -s < y < s where
+ // s = 32124/32768 ~= .9803. The input mu is often obtained
+ // using mget(...,'uc') to read byte-encoded audio files.
+ // Translation of C program by:
+ // Craig Reese: IDA/Supercomputing Research Center
+ // Joe Campbell: Department of Defense
+ // 29 September 1989
+ SCALE = 1/32768;
+ ETAB = [0,132,396,924,1980,4092,8316,16764];
+ mu = 255-mu;
+ sig = mu>127;
+ e = fix(mu/16)-8*bool2s(sig)+1;
+ f = mu-fix(mu./16).*16;
+ y = f.*2.^(e+2);
+ e(:) = ETAB(e);
+ y = SCALE*(1-2*bool2s(sig)) .* (e+y);
+endfunction