view Source/Decoder.h @ 12:87dc3d84c120

Addressed the load program defaults over user settings 'feature'. Removed isChild on objects that are added before the frame creation since a)they're always there and b) doesn't write to all displays present.
author martinm_home <martin.morrell@eecs.qmul.ac.uk>
date Thu, 27 Sep 2012 23:29:16 +0100
parents 76e2e62635b4
children
line wrap: on
line source
/*
 *  Decoder.h
 *  ClassicAmbiDec
 *
 *  Created by Martin Morrell on 14/06/2012.
 *  Copyright 2012 Queen Mary University of London. All rights reserved.
 *
 */


class Decoder
{	
	friend class MyEditor;
public:
    Decoder();
    
    //Transforms & Zoom
	double Rotate; //+/-180 degrees
	double Tilt; //+/-180 degrees
	double Tumble; //+/-180 degrees
	double Zoom; //+/-100
	int    ZoomMethod; //4 positions
    
    //Decoder Speaker Layout
    int    decoderMode; //Decoder mode
    int    channelOrder; //Natural or 5.1 ordering
    int    mode5x; //Hidden mode for 5.x decoders accessed by programs
    
    //Front Stereo Speaker Decoding & Reverb
	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
	
    //Centre Speaker Decoding
    double centrePattern; //Centre mic pattern
    double centreGain; //Centre mic gain
    
    //Subwoofer Signal
    double subGain; //Subwoofer gain
    
    //Surround Speaker Decoding
    int    surMode; //Rear mics mode
    double surPattern; //Rear mics pattern
    double surWidth; //Rear mics width
    double surGain; //Rear mics gain
    
    //Filter Code
    int Fs; //Sample Rate
    int Fc; //Crossover Frequency
    void   clearFilter(); //Clears the previous filter values
    void filterCoefs(); //Calculates the filter coefficients
    
	//Overall Decoding Functions
    double output[6]; //Final Output
    int processDecoder(double &w, double &x, double &y, double &z); //Called fucntion to do the decoding
   
    
	
private:
    //Conversion Functions
	double degRad(double angle); //Convert degreesto radians
	double radDeg(double angle); //Convert radians to degrees
	
	//Sound Field 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);
    
    //Filter Code
    void filterLF(double &w);
    void filterHF(double &w, double &x, double &y, double &z);
    double bLF[3]; //b Coefficients for Lower Frequency Band
    double bHF[3]; //b Coefficients for Higher Frequency Band
    double a[3]; //a Coefficients
    double prevInS[2]; //Previous Input LF Samples
    double prevOutS[2]; //Previous Output LF Samples
    double prevInw[2]; //Previous Input w Samples
    double prevOutw[2]; //Previous Output w Samples
    double prevInx[2]; //Previous Input x Samples
    double prevOutx[2]; //Previous Output x Samples
    double prevIny[2]; //Previous Input y Samples
    double prevOuty[2]; //Previous Output y Samples
    double prevInz[2]; //Previous Input z Samples
    double prevOutz[2]; //Previous Output z Samples
    
    //Decoder Types
    void monoDecoder(double &w, double &x, double &y, double &z); //Decode to mono, implemented but not used
	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 quadDecoder(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
    void heller1(double &w, double &x, double &y, double &z);
    void heller2(double &w, double &x, double &y, double &z);
    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
};