# v_voicebox

## PURPOSE

V_VOICEBOX set global parameters for Voicebox functions Y=(FIELD,VAL)

## SYNOPSIS

function y=v_voicebox(f,v)

## DESCRIPTION

    V_VOICEBOX  set global parameters for Voicebox functions Y=(FIELD,VAL)

      Inputs:  F   is a field name
               V   is a new value for the field

     Outputs:  Y   is set equal to the structure of parameters if the
                   f and v inputs are both present or both absent. If only
                   input f is specified, then y is set to the value of the
                   corresponding field or null if it doesn't exist.

     You can override the defaults set here by setting the environment variable "VOICEBOX"
     to the path of an m-file that contains lines like "PP.dir_temp='F:\TEMP';"

     This routine contains default values for constants that are used by
     other functions in the VOICEBOX toolbox. Values in the first section below,
     entitled "System-dependent directory paths" should be set as follows:

        PP.dir_temp     directory for storing temporary files
        PP.dir_data     default directory to preappend to speech data file names
                        when the "d" option is specified in READWAV etc.
        PP.shorten      location of SHORTEN executable. SHORTEN is a proprietary file compression
                        algorithm that is used for some SPHERE-format files. READSPH
                        will try to call an external decoder if it is asked to
                        read such a compressed file.
        PP.sfsbin       location of Speech Filing Sysytem binaries. If the "c" option
                        is given to READSFS, it will try to create a requested item
                        if it is not present in the SFS file. This parameter tells it
                        where to find the SFS executables.
        PP.sfssuffix    suffix for Speech Filing Sysytem binaries. READSFS uses this paremeter
                        to create the name of an SFS executable (see PP.sfsbin above).
     Other values defined in this routine are the defaults for specific algorithm constants.
     If you want to change these, please refer to the individual routines for a fuller description.

## CROSS-REFERENCE INFORMATION

This function calls:

- v_winenvar V_WINENVAR get windows environment variable [D]=(N)

This function is called by:

- v_correlogram V_CORRELOGRAM calculate correlogram [y,ty]=(x,inc,nw,nlag,m,fs)
- v_dypsa V_DYPSA Derive glottal closure instances from speech [gci,goi] = (s,fs)
- v_gaussmix V_GAUSSMIX fits a gaussian mixture pdf to a set of data observations [m,v,w,g,f]=(x,c,l,m0,v0,w0,wx)
- v_gaussmixp V_GAUSSMIXP calculate probability densities from or plot a Gaussian mixture model
- v_kmeanhar V_KMEANHAR Vector quantisation using K-harmonic means algorithm [X,G,XN,GG]=(D,K,L,E,X0)
- v_readaif V_READAIF Read a .AIF format sound file [Y,FS,WMODE,FIDX]=(FILENAME,MODE,NMAX,NSKIP)
- v_readau V_READAU Read a SUN .AU format sound file [Y,FS,H]=(FILENAME)
- v_readcnx V_READCNX Read a .CNX format sound file [Y,FS,H]=(FILENAME)
- v_readflac V_READFLAC Read a .FLAC format sound file [Y,FS]=(FILENAME,MODE)
- v_readsfs V_READSFS Read a .SFS format sound file [Y,FS,HD,FFX]=(FF,TY,SUB,MODE,NMAX,NSKIP,XPATH)
- v_readsph V_READSPH Read a SPHERE/TIMIT format sound file [Y,FS,WRD,PHN,FFX]=(FILENAME,MODE,NMAX,NSKIP)
- v_readwav V_READWAV Read a .WAV format sound file [Y,FS,WMODE,FIDX]=(FILENAME,MODE,NMAX,NSKIP)
- v_writewav V_WRITEWAV Creates .WAV format sound files FIDX=(D,FS,FILENAME,MODE,NSKIP,MASK,MAD)

## SOURCE CODE

    0001 function y=v_voicebox(f,v)
    0002 %V_VOICEBOX  set global parameters for Voicebox functions Y=(FIELD,VAL)
    0003 %
    0004 %  Inputs:  F   is a field name
    0005 %           V   is a new value for the field
    0006 %
    0007 % Outputs:  Y   is set equal to the structure of parameters if the
    0008 %               f and v inputs are both present or both absent. If only
    0009 %               input f is specified, then y is set to the value of the
    0010 %               corresponding field or null if it doesn't exist.
    0011 %
    0012 % You can override the defaults set here by setting the environment variable "VOICEBOX"
    0013 % to the path of an m-file that contains lines like "PP.dir_temp='F:\TEMP';"
    0014 %
    0015 % This routine contains default values for constants that are used by
    0016 % other functions in the VOICEBOX toolbox. Values in the first section below,
    0017 % entitled "System-dependent directory paths" should be set as follows:
    0018 %
    0019 %    PP.dir_temp     directory for storing temporary files
    0020 %    PP.dir_data     default directory to preappend to speech data file names
    0021 %                    when the "d" option is specified in READWAV etc.
    0022 %    PP.shorten      location of SHORTEN executable. SHORTEN is a proprietary file compression
    0023 %                    algorithm that is used for some SPHERE-format files. READSPH
    0024 %                    will try to call an external decoder if it is asked to
    0025 %                    read such a compressed file.
    0026 %    PP.sfsbin       location of Speech Filing Sysytem binaries. If the "c" option
    0027 %                    is given to READSFS, it will try to create a requested item
    0028 %                    if it is not present in the SFS file. This parameter tells it
    0029 %                    where to find the SFS executables.
    0030 %    PP.sfssuffix    suffix for Speech Filing Sysytem binaries. READSFS uses this paremeter
    0031 %                    to create the name of an SFS executable (see PP.sfsbin above).
    0032 % Other values defined in this routine are the defaults for specific algorithm constants.
    0033 % If you want to change these, please refer to the individual routines for a fuller description.
    0034
    0035 % Bugs/Suggestions
    0036 %    (1)  Could allow a * at the end of F to act as a wildcard and return/print a part structure
    0037
    0038 %      Copyright (C) Mike Brookes 2003
    0039 %      Version: $Id: v_voicebox.m 10865 2018-09-21 17:22:45Z dmb $
    0040 %
    0041 %   VOICEBOX is a MATLAB toolbox for speech processing.
    0042 %   Home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html
    0043 %
    0044 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    0045 %   This program is free software; you can redistribute it and/or modify
    0046 %   it under the terms of the GNU Lesser General Public License as published by
    0047 %   the Free Software Foundation; either version 3 of the License, or
    0048 %   (at your option) any later version.
    0049 %
    0050 %   This program is distributed in the hope that it will be useful,
    0051 %   but WITHOUT ANY WARRANTY; without even the implied warranty of
    0052 %   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    0053 %   GNU Lesser General Public License for more details.
    0054 %
    0055 %   You can obtain a copy of the GNU Lesser General Public License from
    0056 %   https://www.gnu.org/licenses/ .
    0057 %
    0058 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    0059
    0060 persistent PP
    0061 if isempty(PP)
    0062
    0063     % System-dependent directory paths and constants
    0064
    0065     PP.dir_temp='F:\TEMP';                      % directory for storing temporary files
    0066     PP.dir_data='E:\dmb\data\speech';           % default directory to preappend to speech data file names
    0067     PP.shorten='C:\bin\shorten.exe';            % location of shorten executable
    0068     PP.flac='C:\bin\flac.exe';                  % location of flac executable
    0069     PP.sfsbin='F:\Program Files\SFS\Program';   % location of Speech Filing Sysytem binaries
    0070     PP.sfssuffix='.exe';                        % suffix for Speech Filing Sysytem binaries
    0071     PP.memsize=50e6;                            % Maximum amount of temporary memory to use (Bytes)
    0072
    0073     % DYPSA glottal closure identifier
    0074
    0075     PP.dy_cpfrac=0.3;           % presumed closed phase fraction of larynx cycle
    0076     PP.dy_cproj=0.2;            % cost of projected candidate
    0077     PP.dy_cspurt=-0.45;         % cost of a talkspurt
    0078     PP.dy_dopsp=1;              % Use phase slope projection (1) or not (0)?
    0079     PP.dy_ewdly=0.0008;         % window delay for energy cost function term [~ energy peak delay from closure] (sec)
    0080     PP.dy_ewlen=0.003;          % window length for energy cost function term (sec)
    0081     PP.dy_ewtaper=0.001;        % taper length for energy cost function window (sec)
    0082     PP.dy_fwlen=0.00045;        % window length used to smooth group delay (sec)
    0083     PP.dy_fxmax=500;            % max larynx frequency (Hz)
    0084     PP.dy_fxmin=50;             % min larynx frequency (Hz)
    0085     PP.dy_fxminf=60;            % min larynx frequency (Hz) [used for Frobenius norm only]
    0086     PP.dy_gwlen=0.0030;         % group delay evaluation window length (sec)
    0087     PP.dy_lpcdur=0.020;         % lpc analysis frame length (sec)
    0088     PP.dy_lpcn=2;               % lpc additional poles
    0089     PP.dy_lpcnf=0.001;          % lpc poles per Hz (1/Hz)
    0090     PP.dy_lpcstep=0.010;        % lpc analysis step (sec)
    0091     PP.dy_nbest=5;              % Number of NBest paths to keep
    0092     PP.dy_preemph=50;           % pre-emphasis filter frequency (Hz) (to avoid preemphasis, make this very large)
    0093     PP.dy_spitch=0.2;           % scale factor for pitch deviation cost
    0094     PP.dy_wener=0.3;            % DP energy weighting
    0095     PP.dy_wpitch=0.5;           % DP pitch weighting
    0096     PP.dy_wslope=0.1;           % DP group delay slope weighting
    0097     PP.dy_wxcorr=0.8;           % DP cross correlation weighting
    0098     PP.dy_xwlen=0.01;           % cross-correlation length for waveform similarity (sec)
    0099
    0100     % now see if an environment variable has been set
    0101
    0102     if ispc()
    0103         vbenv=v_winenvar('VOICEBOX');
    0104         if exist(vbenv,'file');     % update with locally defined values if defined
    0105             run(vbenv)
    0106         end
    0107     end
    0108
    0109     % now check some of the key values for validity
    0110
    0111     if exist(PP.dir_temp,'dir')~=7        % check that temp directory exists
    0112         PP.dir_temp = v_winenvar('temp');     % else use windows temp directory
    0113     end
    0114
    0115     [fnp,fnn,fne]=fileparts(mfilename('fullpath'));
    0116     if exist(PP.shorten,'file')~=2        % check that shorten executable exists
    0117         PP.shorten=fullfile(fnp,'shorten.exe','file'); % next try local directory
    0118         if exist(PP.shorten,'file')~=2        % check if it exists in local directory
    0119             PP.shorten=fullfile(fnp(1:end-9),'external\shorten\shorten.exe'); % check if it exists in ..\external\shorten directory
    0120             if exist(PP.shorten,'file')~=2
    0121                 PP.shorten='shorten.exe'; % finally assume it is on the search path
    0122             end
    0123         end
    0124     end
    0125
    0126     if exist(PP.flac)~=2        % check that flac executable exists
    0127         PP.flac=fullfile(fnp,'flac.exe'); % next try local directory
    0128         if exist(PP.flac)~=2        % check if it exists in local directory
    0129             PP.flac='flac.exe'; % finally assume it is on the search path
    0130         end
    0131     end
    0132
    0133 end
    0134 if nargin==0
    0135     if nargout==0
    0136         % list all fields
    0137         nn=sort(fieldnames(PP));
    0138         cnn=char(nn);
    0139         fprintf('%d Voicebox parameters:\n',length(nn));
    0140
    0141         for i=1:length(nn);
    0142             if ischar(PP.(nn{i}))
    0143                 fmt='  %s = %s\n';
    0144             else
    0145                 fmt='  %s = %g\n';
    0146             end
    0147             fprintf(fmt,cnn(i,:),PP.(nn{i}));
    0148         end
    0149     else
    0150         y=PP;
    0151     end
    0152 elseif nargin==1
    0153     if isfield(PP,f)
    0154         y=PP.(f);
    0155     else
    0156         y=[];
    0157     end
    0158 else
    0159     if isfield(PP,f)
    0160         PP.(f)=v;
    0161         y=PP;
    0162     else
    0163         error(sprintf('''%s'' is not a valid voicebox field name',f));
    0164     end
    0165 end