/usr/include/mffm/AudioMasker.H is in libaudiomask-dev 1.0-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | /*
libaudiomask - hybrid simultaneous audio masking threshold evaluation library
Copyright (C) 2000-2010 Dr Matthew Raphael Flax
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef AUDIOMASKER_H_
#define AUDIOMASKER_H_
#include "AudioMask.H"
#include "depukfb.H"
#include <mffm/realFFT.H>
#include <stdlib.h>
#define DEFAULT_FBCOUNT 100
#define DEFAULT_SAMPLECOUNT 512
#define DEFAULT_SAMPLEFREQ 44100
//#define DEFAULT_LOWFERQ 25
// Recurse defines the number of times we recurse the output to input >=2
//#define RECURSE 7
/**
* Audio masking class - top level
* Class to transform input audio in the time domain to a simultaneous audio mask in the frequency domain.
*
* ========================= HOWTO ===============================
*
* // First find the masking threshold
*
* AudioMasker masker(sampleFreq, count); // Create the audio masker class using fs=sampleFreq and count filters
*
* masker.excite(input, sampleCount); // find the mask for the array of input data which has sampleCount time samples.
*
* // Now do something with the masking threshold ...
*
* // The frequency domain mask is now located here
*
* for (int j=0; j<count;j++)
*
* masker.mask[j]; // This is the mask at each of the count frequencies of interest
*
* // A more sophisticated example - find the threshold for each Fourier bin
*
* double fact=(double)sampleFreq/((double)sampleCount-1.0); // convert from an index to the equivalent Fourier bin frequency
*
* for (int j=0; j<halfSampleCount;j++){
*
* cout<<"finding for freq "<<j*fact<<'\t'; // The frequency we are inspecting
*
* double threshold=masker.findThreshold(j*fact); // The masking threshold
*
* 20*log10(threshold); // The threshold in decibels (dB)
*
* }
*
*/
class AudioMasker : public AudioMask {
double **output; //!< Filter bank output
double **powOutput; //!< Filter bank output power
double *input; //!<Filter bank input
int sampleCount; //!<The sample count
int bankCount; //!<The filter bank count
realFFTData *fftData; //!< The FFT data
realFFT *fft; //!< The FFT
void FBDeMalloc(void);//!< Filter bank output matrix memory de-allocation
void FBMalloc(void); //!< Filter bank output matrix memory allocation
void process(void); //!< Process the transformation
public:
DepUKFB *pfb; //!< roex filters
// GTFB *gtfb; //!< gammatone filters
/**
* The Audio masking constructor
* @ sampFreq The sample frequency of the time domain data
* @ fBankCount The number of filter banks
*/
AudioMasker(int sampFreq, int fBankCount);
AudioMasker(void); //!< Audio masker constructor - allowing specification of fs and sub-band count later
~AudioMasker(void); //!< Audio masker deconstructor
/**
* Finds the excitation for input data
* @ Input Using short int input data
* @ sCount samples
*/
void excite(short int *Input, int sCount);
/**
* Finds the excitation for input data
* @ Input Using double input data
* @ sCount samples
*/
void excite(double *Input, int sCount);
/**
* Returns the simultaneous masking threshold at a particular frequency
* @ freq The frequency of interest
*/
double findThreshold(double freq);
};
#endif //AUDIOMASKER_H_
/** \example AudioMaskerExample.cc
* This is an example of how to use the AudioMasker class
* See the example file to work out how to use these Audio masking classes
*/
|