예제 #1
0
AmbisonicEncode::AmbisonicEncode(int anOrder, std::string aMode, int aVectorSize)
{	
	m_order					= anOrder;
	m_number_of_harmonics	= m_order * 2 + 1;
	m_mode					= aMode;
	m_number_of_outputs		= m_number_of_harmonics;
	m_ambiCoeffs			= new double[m_number_of_harmonics];
	if(aMode == "split")
		m_number_of_inputs	= m_order + 2;
	else
		m_number_of_inputs	= 2;	
	
	computeIndex();
	
	m_cosLookUp = new double[NUMBEROFCIRCLEPOINTS];
	m_sinLookUp = new double[NUMBEROFCIRCLEPOINTS];
	
	for (int i = 0; i < NUMBEROFCIRCLEPOINTS; i++) 
	{
		m_cosLookUp[i] = cos((double)i * M_2PI / (double)NUMBEROFCIRCLEPOINTS);
		m_sinLookUp[i] = sin((double)i * M_2PI / (double)NUMBEROFCIRCLEPOINTS);
	}
	computeCoefs(0.);
	setVectorSize(aVectorSize);
}
예제 #2
0
AmbisonicLine::AmbisonicLine(long aVectorSize)
{
    m_value_old = 0.;
    m_value_new = 0.;
    m_value_step = 0.;
    m_counter = 0;
    
    setVectorSize(aVectorSize);
}
예제 #3
0
void Line::init(const long vector_size, const long sampling_rate)
{
	m_value_old = 0.;
	m_value_new = 0.;
	m_value_step = 0.;
	m_counter = 0;
	
	setVectorSize(vector_size);
	setSamplingRate(sampling_rate);
}
예제 #4
0
AmbisonicsMeter::AmbisonicsMeter(long aVectorSize, double aSamplingRate, long aNumberofChannels) : Planewaves(<#args#>)
{

	m_number_of_inputs		= Tools::clip_min(aNumberofChannels, (long)1);
	m_number_of_outputs		= 0;
	
	setVectorSize(aVectorSize);
    setSamplingRate(aSamplingRate);
}

void AmbisonicsMeter::setNumberOfChannels(long aNumberofChannels)
{
    m_number_of_inputs = Tools::clip_min(aNumberofChannels, (long)1);
}
예제 #5
0
AmbisonicsMeter::AmbisonicsMeter(long aNumberOfChannels, long aVectorSize, double aSamplingRate) : Planewaves(aNumberOfChannels, aVectorSize, aSamplingRate)
{
    m_vectors = new AmbisonicVector(m_number_of_loudspeakers, aVectorSize);
    for(int i = 0; i < 4; i++)
        m_vector_coordinates_double[i] = m_vector_coordinates_float[i] = 0.;
    
    m_loudspeakers_amplitudes   = NULL;
    m_loudspeakers_peaks        = NULL;
    m_loudspeakers_energies     = NULL;    
    m_loudspeakers_angles_mapped    = NULL;
    m_loudspeakers_angles_width     = NULL;
	setNumberOfLoudspeakers(aNumberOfChannels);
	setVectorSize(aVectorSize);
    m_number_of_outputs		= 0;
}
예제 #6
0
AmbisonicEase::AmbisonicEase(long anOrder, long aVectorSize)
{
	m_order					= Tools::clip_min(anOrder, (long)0);
	m_number_of_harmonics	= m_order * 2 + 1;
	m_number_of_inputs		= 1;
	m_number_of_outputs		= m_number_of_harmonics;
    
    m_lineAbscissa = new AmbisonicLine(aVectorSize);
    m_lineOrdinate = new AmbisonicLine(aVectorSize);
    
	computeVectors();
	setPolarCoordinates(1., 0.);
    setVectorSize(aVectorSize);
    m_lineAbscissa->setCoefficientDirect(0.);
    m_lineOrdinate->setCoefficientDirect(1.);
}
예제 #7
0
AmbisonicSpace::AmbisonicSpace(long aNumberOfMicrophones, long aVectorSize)
{
	m_number_of_microphones = Tools::clip_min(aNumberOfMicrophones, (long)3);
	m_number_of_inputs		= m_number_of_microphones;
	m_number_of_outputs		= m_number_of_microphones;
	
    m_microphones_coefficients_old = new double[m_number_of_microphones];
    m_microphones_coefficients_new = new double[m_number_of_microphones];
    m_microphones_coefficients_step = new double[m_number_of_microphones];
    for(int i = 0; i < m_number_of_microphones; i++)
    {
        m_microphones_coefficients_old[i] = 1.;
        m_microphones_coefficients_new[i] = 1.;
        m_microphones_coefficients_step[i] = 0.;
    }
    m_counter = 0;
    setVectorSize(aVectorSize);
}
예제 #8
0
AmbisonicRotate::AmbisonicRotate(long anOrder, long aVectorSize)
{
	m_order					= Tools::clip_min(anOrder, (long)1);
	m_number_of_harmonics	= 2 * m_order + 1;
	m_number_of_inputs		= m_number_of_harmonics + 1;
	m_number_of_outputs		= m_number_of_harmonics;
	
	m_harmonicCos = new double[m_order];
	m_harmonicSin = new double[m_order];
	computeIndex();
	m_cosLookUp = new double[NUMBEROFCIRCLEPOINTS];
	m_sinLookUp = new double[NUMBEROFCIRCLEPOINTS];
	
	for (int i = 0; i < NUMBEROFCIRCLEPOINTS; i++) 
	{
		m_cosLookUp[i] = cos((double)i * CICM_2PI / (double)NUMBEROFCIRCLEPOINTS);
		m_sinLookUp[i] = sin((double)i * CICM_2PI / (double)NUMBEROFCIRCLEPOINTS);
	}
	setAzimuth(0.);
	setVectorSize(aVectorSize);
}
예제 #9
0
AmbisonicOnePole::AmbisonicOnePole(double aSamplingRate, long aVectorSize)
{
    setSamplingRate(aSamplingRate);
    setVectorSize(aVectorSize);
}