Hi guys... We need some clues about to downmix 5.1 and 7.1 channels to 2 channels for the moment we are using the following code -> It works but fails miserably if all channels have data at same time #define AR_K_P_ATTENUATION_LEVEL 1.0 int p = 0; int i; int save_channel_0_k_p; int save_channel_1_k_p; double save_channel_0_data_double_k_p; double save_channel_1_data_double_k_p; double sample_double_temp_k_p; int number_of_samples_k_p = decoded_frame->nb_samples; int ricardo_deslocador__ = 0; frame_processed_k_p = 1; int outputBufferLen = number_of_samples_k_p * 2 * 2; *size_out=outputBufferLen; short *outputBuffer = (int16_t *)buf; int16_t * ar_buffer_ = (int16_t *) decoded_frame->data[0]; for(i=0; i < number_of_samples_k_p; i++) { //channel 0 int16_t sample_k_p = ar_buffer_[ricardo_deslocador__++]; save_channel_0_k_p = p; save_channel_0_data_double_k_p = (double) sample_k_p; p++; /////////////////////////////////////////////// //channel 1 sample_k_p = ar_buffer_[ricardo_deslocador__++]; save_channel_1_k_p = p;//so usa no final... save_channel_1_data_double_k_p = (double) sample_k_p; p++; //////////////////////////////////////////////// //center sample_k_p = ar_buffer_[ricardo_deslocador__++]; sample_double_temp_k_p = (double) sample_k_p; sample_double_temp_k_p *= AR_K_P_ATTENUATION_LEVEL; save_channel_0_data_double_k_p += sample_double_temp_k_p; if(32767.0 < save_channel_0_data_double_k_p) { save_channel_0_data_double_k_p = 32767.0; } if(-32768.0 > save_channel_0_data_double_k_p) { save_channel_0_data_double_k_p = -32768.0; } sample_double_temp_k_p = (double) sample_k_p; sample_double_temp_k_p *= AR_K_P_ATTENUATION_LEVEL; save_channel_1_data_double_k_p += sample_double_temp_k_p; if(32767.0 < save_channel_1_data_double_k_p) { save_channel_1_data_double_k_p = 32767.0; } if(-32768.0 > save_channel_1_data_double_k_p) { save_channel_1_data_double_k_p = -32768.0; } ////////////////////////////////////////////////////// ///////subwoffer sample_k_p = ar_buffer_[ricardo_deslocador__++]; sample_double_temp_k_p = (double) sample_k_p; sample_double_temp_k_p *= AR_K_P_ATTENUATION_LEVEL; save_channel_0_data_double_k_p += sample_double_temp_k_p; if(32767.0 < save_channel_0_data_double_k_p) { save_channel_0_data_double_k_p = 32767.0; } if(-32768.0 > save_channel_0_data_double_k_p) { save_channel_0_data_double_k_p = -32768.0; } sample_double_temp_k_p = (double) sample_k_p; sample_double_temp_k_p *= AR_K_P_ATTENUATION_LEVEL; save_channel_1_data_double_k_p += sample_double_temp_k_p; if(32767.0 < save_channel_1_data_double_k_p) { save_channel_1_data_double_k_p = 32767.0; } if(-32768.0 > save_channel_1_data_double_k_p) { save_channel_1_data_double_k_p = -32768.0; } //////////////////////////////////////////////////// /////surround left 4 sample_k_p = ar_buffer_[ricardo_deslocador__++]; sample_double_temp_k_p = (double) sample_k_p; sample_double_temp_k_p *= AR_K_P_ATTENUATION_LEVEL; save_channel_0_data_double_k_p += sample_double_temp_k_p; if(32767.0 < save_channel_0_data_double_k_p) { save_channel_0_data_double_k_p = 32767.0; } if(-32768.0 > save_channel_0_data_double_k_p) { save_channel_0_data_double_k_p = -32768.0; } /////////////////////////////////////////////// //////////surround right 5 sample_k_p = ar_buffer_[ricardo_deslocador__++]; sample_double_temp_k_p = (double) sample_k_p; sample_double_temp_k_p *= AR_K_P_ATTENUATION_LEVEL; save_channel_1_data_double_k_p += sample_double_temp_k_p; if(32767.0 < save_channel_1_data_double_k_p) { save_channel_1_data_double_k_p = 32767.0; } if(-32768.0 > save_channel_1_data_double_k_p) { save_channel_1_data_double_k_p = -32768.0; } ///////////////////////////////////////////// //finalizing outputBuffer[save_channel_0_k_p] = (signed short) save_channel_0_data_double_k_p; outputBuffer[save_channel_1_k_p] = (signed short) save_channel_1_data_double_k_p; } /* if possible point us to the files in ALSA that make the downmix and it will be enough Thanks a lot */ Ricardo