Exemplo n.º 1
0
void AmbisonicsMeter::setNumberOfLoudspeakers(long aNumberOfChannels)
{
    Planewaves::setNumberOfLoudspeakers(aNumberOfChannels);
    m_vectors->setNumberOfLoudspeakers(aNumberOfChannels);
    m_number_of_outputs		= 0;
    
    if(m_loudspeakers_amplitudes)
        cicm_free(m_loudspeakers_amplitudes);
    if(m_loudspeakers_peaks)
        cicm_free(m_loudspeakers_peaks);
    if(m_loudspeakers_energies)
        cicm_free(m_loudspeakers_energies);
    if(m_loudspeakers_angles_mapped)
        cicm_free(m_loudspeakers_angles_mapped);
    if(m_loudspeakers_angles_width)
        cicm_free(m_loudspeakers_angles_width);
    
    cicm_malloc_vec_d(m_loudspeakers_amplitudes, m_number_of_loudspeakers);
    cicm_malloc_vec_d(m_loudspeakers_peaks, m_number_of_loudspeakers);
    cicm_malloc_vec_d(m_loudspeakers_energies, m_number_of_loudspeakers);
    cicm_malloc_vec_d(m_loudspeakers_angles_mapped, m_number_of_loudspeakers);
    cicm_malloc_vec_d(m_loudspeakers_angles_width, m_number_of_loudspeakers);
    
    for(int i = 0; i < m_number_of_loudspeakers; i++)
    {
        m_loudspeakers_amplitudes[i] = 0.;
        m_loudspeakers_peaks[i] = 0.;
        m_loudspeakers_energies[i] = -90;
    }
    
    double curAngle, prevAngle, nextAngle, prevPortion, nextPortion;
	for(int i = 0; i < m_number_of_loudspeakers; i++)
	{
		curAngle = m_angles_of_loudspeakers_double[i];
		if (i != 0)
            prevAngle = m_angles_of_loudspeakers_double[i-1];
		else
            prevAngle = m_angles_of_loudspeakers_double[m_number_of_loudspeakers-1];
		if (i != m_number_of_loudspeakers-1)
            nextAngle = m_angles_of_loudspeakers_double[i+1];
		else
            nextAngle = m_angles_of_loudspeakers_double[0];
		
		prevPortion = (curAngle - prevAngle);
		nextPortion = (nextAngle - curAngle);
		
		if (nextPortion < 0.)
            nextPortion += CICM_2PI;
		if (prevPortion < 0.)
            prevPortion += CICM_2PI;
		
		m_loudspeakers_angles_width[i] = (prevPortion + nextPortion)*0.5;
		m_loudspeakers_angles_mapped[i] = (curAngle - prevPortion*0.5) + m_loudspeakers_angles_width[i]*0.5;
	}
}
Exemplo n.º 2
0
void AmbisonicWider::setVectorSize(long aVectorSize)
{
	Ambisonic::setVectorSize(aVectorSize);
	if(m_index_vector)
		free(m_index_vector);
	if(m_vector_double)
		cicm_free(m_vector_double);
	if(m_vector_float)
		cicm_free(m_vector_float);
	m_index_vector = new int[m_vector_size];
	cicm_malloc_vec_f(m_vector_float, m_vector_size);
	cicm_malloc_vec_d(m_vector_double, m_vector_size);
}
Exemplo n.º 3
0
AmbisonicsMeter::~AmbisonicsMeter()
{
    delete m_vectors;
	if(m_loudspeakers_amplitudes)
        cicm_free(m_loudspeakers_amplitudes);
    if(m_loudspeakers_peaks)
        cicm_free(m_loudspeakers_peaks);
    if(m_loudspeakers_energies)
        cicm_free(m_loudspeakers_energies);
    if(m_loudspeakers_angles_mapped)
        cicm_free(m_loudspeakers_angles_mapped);
    if(m_loudspeakers_angles_width)
        cicm_free(m_loudspeakers_angles_width);
}
Exemplo n.º 4
0
FilterConvolution::~FilterConvolution()
{
	cicm_free(m_buffer);
	cicm_free(m_input_complexes);
	cicm_free(m_output_complexes);
	for(int i = 0; i < m_number_of_instances; i++)
	{
		cicm_free(m_real_vector[i]);
		cicm_free(m_impul_complexes[i]);
	}
	free(m_real_vector);
	free(m_impul_complexes);
	delete m_fft_instance;
    delete m_fft_response;
}
Exemplo n.º 5
0
void AmbisonicsDecoder::setNumberOfLoudspeakers(long aNumberOfLoudspeakers)
{
    m_number_of_outputs		= Tools::clip_min(aNumberOfLoudspeakers, m_number_of_harmonics);
    if(m_number_of_loudspeakers != m_number_of_outputs)
    {
        if(m_decoder_matrix_float)
            cicm_free(m_decoder_matrix_float);
        if(m_decoder_matrix_double)
            cicm_free(m_decoder_matrix_double);
        if(m_vector_float_output)
            cicm_free(m_vector_float_output);
        if(m_vector_double_output)
            cicm_free(m_vector_double_output);
        
        m_number_of_loudspeakers = m_number_of_outputs;
        
        cicm_malloc_mat_f(m_decoder_matrix_float, m_number_of_outputs, m_number_of_harmonics);
        cicm_malloc_mat_d(m_decoder_matrix_double, m_number_of_outputs, m_number_of_harmonics);
        cicm_malloc_vec_f(m_vector_float_output, m_number_of_outputs);
        cicm_malloc_vec_d(m_vector_double_output, m_number_of_outputs);
        computeMatrix();
    }
}
Exemplo n.º 6
0
AmbisonicsDecoder::~AmbisonicsDecoder()
{
    cicm_free(m_vector_float_input);
    cicm_free(m_vector_double_input);
    
    cicm_free(m_decoder_matrix_float);
    cicm_free(m_decoder_matrix_double);
    cicm_free(m_vector_float_output);
    cicm_free(m_vector_double_output);
}
Exemplo n.º 7
0
void FilterConvolution::loadImpulseResponse(cicm_vector_float anImpulseResponse)
{
	cicm_vector_float real;
	cicm_malloc_vec_f(real, m_window_size);
  
	for(int i = 0; i < m_number_of_instances; i++)
	{
		for(int j = 0; j < m_window_size; j++)
        {
            if(j < m_array_size)
                real[j] = anImpulseResponse[j + m_array_size * i] * m_fft_instance->getScale();
            else
                real[j] = 0.;
        }
		m_fft_response->forward(real, m_impul_complexes[i]);
        
	}
	cicm_free(real);
}
Exemplo n.º 8
0
AmbisonicWider::~AmbisonicWider()
{
	for(int i = 0; i < m_number_of_harmonics; i++)
	{
		cicm_free(m_wider_matrix[i]);
	}
	cicm_free(m_wider_matrix);
	cicm_free(m_harmonics_vector_double);
	cicm_free(m_harmonics_vector_float);
	if(m_index_vector)
		free(m_index_vector);
	if(m_vector_double)
		cicm_free(m_vector_double);
	if(m_vector_float)
		cicm_free(m_vector_float);
}