# v_readau

## PURPOSE

V_READAU Read a SUN .AU format sound file [Y,FS,H]=(FILENAME)

## SYNOPSIS

function [y,fs,h]=v_readau(filename,mode)

## DESCRIPTION

    V_READAU  Read a SUN .AU format sound file [Y,FS,H]=(FILENAME)

     Inputs:
               filename : character string containing filename (default extension .au)
               mode:    't' = trim leading and trailing silences
                        'h' = read header only
                 'd'    Look in data directory: v_voicebox('dir_data')

     Outputs:
               y  : matrix containing one channel per column
               fs : sample frequency
               h  : parameter array:
                    h(1) = header length (bytes)
                    h(2) = data length (bytes)
                    h(3) = data format (see below)
                    h(4) = sample rate (Hz)
                    h(5) = number of channels

## CROSS-REFERENCE INFORMATION

This function calls:

- v_pcmu2lin V_PCMU2LIN Convert Mu-law PCM to linear X=(P,S)
- v_voicebox V_VOICEBOX set global parameters for Voicebox functions Y=(FIELD,VAL)

This function is called by:

## SOURCE CODE

    0001 function [y,fs,h]=v_readau(filename,mode)
    0002 %V_READAU  Read a SUN .AU format sound file [Y,FS,H]=(FILENAME)
    0003 %
    0004 % Inputs:
    0005 %           filename : character string containing filename (default extension .au)
    0006 %           mode:    't' = trim leading and trailing silences
    0007 %                    'h' = read header only
    0008 %             'd'    Look in data directory: v_voicebox('dir_data')
    0009 %
    0010 % Outputs:
    0011 %           y  : matrix containing one channel per column
    0012 %           fs : sample frequency
    0013 %           h  : parameter array:
    0014 %                h(1) = header length (bytes)
    0015 %                h(2) = data length (bytes)
    0016 %                h(3) = data format (see below)
    0017 %                h(4) = sample rate (Hz)
    0018 %                h(5) = number of channels
    0019
    0020 %       Copyright (C) Mike Brookes 2008
    0021 %      Version: $Id: v_readau.m 10865 2018-09-21 17:22:45Z dmb $
    0022 %
    0023 %   VOICEBOX is a MATLAB toolbox for speech processing.
    0024 %   Home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html
    0025 %
    0026 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    0027 %   This program is free software; you can redistribute it and/or modify
    0028 %   it under the terms of the GNU Lesser General Public License as published by
    0029 %   the Free Software Foundation; either version 3 of the License, or
    0030 %   (at your option) any later version.
    0031 %
    0032 %   This program is distributed in the hope that it will be useful,
    0033 %   but WITHOUT ANY WARRANTY; without even the implied warranty of
    0034 %   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    0035 %   GNU Lesser General Public License for more details.
    0036 %
    0037 %   You can obtain a copy of the GNU Lesser General Public License from
    0038 %   https://www.gnu.org/licenses/ .
    0039 %
    0040 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    0041
    0042
    0043 if nargin<2,  mode='0'; end
    0044 if any(mode=='d')
    0045     filename=fullfile(v_voicebox('dir_data'),filename);
    0046 end
    0047 fid=fopen(filename,'rb','b');       % big endian
    0048 if fid == -1
    0049     fn=[filename,'.au'];
    0050     fid=fopen(fn,'rb','l');
    0051     if fid ~= -1, filename=fn; end
    0052 end
    0053 if fid == -1, error('Can''t open %s for input',filename); end
    0054 [hdr,n]=fread(fid,6,'int');
    0055 if n ~= 6 || hdr(1)~=779316836, error('Can''t read header from AU file %s',filename); end
    0056
    0057 if any(mode =='h')
    0058     y=hdr(2:6);
    0059 else
    0060     if nargout>1
    0061         fs=hdr(5);
    0062         if nargout>2
    0063             h=hdr(2:6);
    0064         end
    0065     end
    0066     fseek(fid,hdr(2),-1);
    0067     switch hdr(4)
    0068         case 1
    0069                         y=fread(fid,inf,'uchar');
    0070                         y=v_pcmu2lin(y);
    0071                 case 2
    0072             y=fread(fid,inf,'schar');
    0073         case 3
    0074             y=fread(fid,inf,'short');
    0075         otherwise
    0076             error('Unsupported format type %d in AU file %s',hdr(4),filename);
    0077     end
    0078     nsamp=length(y);
    0079     msamp=floor(nsamp/hdr(6));
    0080     y=reshape(y,hdr(6),msamp)';
    0081 end
    0082 fclose(fid);