view Source/Decoder.h @ 1:e85bd6381a58

Broken XCode project.
author martinm_home <martin.morrell@eecs.qmul.ac.uk>
date Thu, 06 Sep 2012 10:01:08 +0100
parents 2fa9c10568d1
children d967dd1eafe8
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:
    //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, set to same as number of outputs
    
    //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
	double outputL; //Left output
	double outputR; //Right output
	
    //Centre Speaker Decoding
    double outputC; //Centre output
    double centrePattern; //Centre mic pattern
    double centreGain; //Centre mic gain
    
    //Subwoofer Signal
    double outputS; //Subwoofer output
    double subGain; //Subwoofer gain
    
    //Surround Speaker Decoding
    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
    

    
    
    //Filter Code for subwoofer
    int Fs; //Sample Rate
    int Fc; //Crossover Frequency
    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
    
    void   clearFilter(); //Clears the previous filter values
    
    
	//Overall Decoding Functions
    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);
};