view Source/Decoder.h @ 0:2fa9c10568d1

Initial setup.
author martinm_home <martin.morrell@eecs.qmul.ac.uk>
date Tue, 14 Aug 2012 09:34:15 +0100
parents
children e85bd6381a58
line wrap: on
line source
/*
 *  Decoder.h
 *  SoundField
 *
 *  Created by Martin Morrell on 14/06/2012.
 *  Copyright 2012 Queen Mary University of London. All rights reserved.
 *
 */


class Decoder
{	
	friend class MyEditor;
public:
	double Rotate; //+/-180 degrees
	double Tilt; //+/-180 degrees
	double Tumble; //+/-180 degrees
	double Zoom; //+/-100
	int    ZoomMethod; //4 positions
	double Width; //0-90 degrees
	double Pattern; //0-1 Omni amount
	int    Mode; //0 or 1 for xy or ms
	double RearVerb; //0-24dB
	double HiVerb; //0-24dB
	
	double temp; //temp for rotations
	double temp2[4]; //temp for zooming
	
	double outputL; //Left output
	double outputR; //Right output
	
    double outputC; //Centre output
    double outputS; //Subwoofer output
    
    double outputSL; //Surround Left output
    double outputSR; //Surround Right output
    
    int    surMode; //Rear mics mode
    double surPattern; //Rear mics pattern
    double surWidth; //Rear mics width
    double surGain; //Rear mics gain
    
    double centreOrder; //Centre mic order
    double centrePattern; //Centre mic pattern
    double centreGain; //Centre mic gain
	
    double subGain; //Subwoofer gain
    
    int    decoderMode; //Decoder mode, set to same as number of outputs
    
    //Filter Code
    int Fs;
    int Fc;
    double bLF[3];
    double bHF[3];
    double a[3];
    double prevIn[2];
    double prevOut[2];
    double prevInw[2];
    double prevOutw[2];
    double prevInx[2];
    double prevOutx[2];
    double prevIny[2];
    double prevOuty[2];
    double prevInz[2];
    double prevOutz[2];
    
    void   clearFilter(); //Clears the previous filter values
    
    
	//Overall Function
    void monoDecoder(double &w, double &x, double &y, double &z); //Decode to mono
	void stereoDecoder(double &w, double &x, double &y, double &z); //Decode to stereo
    void twoOneDecoder(double &w, double &x, double &y, double &z); //Decode to stereo
    void lrcsDecoder(double &w, double &x, double &y, double &z); //Decode to LRCS
    void fiveDecoder(double &w, double &x, double &y, double &z); //Decode to 5.0
	void fiveOneDecoder(double &w, double &x, double &y, double &z); //Decode to 5.1
    
	
//private:
	double degRad(double angle); //Convert degreesto radians
	double radDeg(double angle); //Convert radians to degrees
	
	//SoundField Rotations
	void rotateField(double &x, double &y);
	void tiltField(double &x, double &y);
	void tumbleField(double &x, double &y);
	
	//Zoom Methods
	void dominanceZoom(double &w, double &x, double &y, double &z);
	void pressZoom(double &w, double &x, double &y, double &z);
	void pushZoom(double &w, double &x, double &y, double &z);
	void focusZoom(double &w, double &x, double &y, double &z);
	
	//Stereo Decoders
	void xyDecode(double &w, double &x, double &y, double &z);
	void msDecode(double &w, double &x, double &y, double &z);
	
	//Reverbs
	void rearVerb(double &w, double &x, double &y, double &z);
	void hiVerb(double &w, double &x, double &y, double &z);
    
    //Surround
    void centreMic(double &w, double &x);
    void xySurDecode(double &w, double &x, double &y, double &z);
	void msSurDecode(double &w, double &x, double &y, double &z);
    
    //Subwoofer
    void subSignal(double &w);
    
    //Filter Code
    void filterCoefs();
    void filterLF();
    void filterHF(double &w, double &x, double &y, double &z);
};