summaryrefslogtreecommitdiff
path: root/modules/sound/macros/mu2lin.sci
blob: 3c786df269ab9fa24efc858e23c02b6eb030adac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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