可以实现I2S和模拟同时输出。
apps\libs\audio_mixer\audio_mixer.c:
- static void mixerHardwareConnect(connection_type_t connection_type)
- {
- ….
-
- -hw_connect_data.aux_left = NULL;
- -hw_connect_data.aux_right = NULL;
- +hw_connect_data.aux_left = ChainGetOutput(mixerSpeakerGetChain(), path_role_aux_left);;
- +hw_connect_data.aux_right = ChainGetOutput(mixerSpeakerGetChain(), path_role_aux_right);;
- AudioHardwareConnectOutput(&hw_connect_data);
- }
复制代码 apps\libs\audio_mixer\audio_mixer_channel_roles.h:
- typedef enum
- {
- mixer_left_channel,
- mixer_right_channel,
- +path_role_aux_left,
- +path_role_aux_right,
- mixer_secondary_left_channel,
- …
- } audio_mixer_channel_role_t;
复制代码 apps\libs\audio_mixer\audio_mixer_speaker.c:
- static void mixerSpeakerConfigureChain(unsigned output_sample_rate)
- {
- Operator speaker_peq_op;
- +Operator output_splitter_op;
- …
- crossover_op = ChainGetOperatorByRole(speaker_data.chain, crossover_role);
- if (crossover_op)
- {
- OperatorsStandardSetUCID(crossover_op,
- mixerSpeakerGetCrossoverUcid(speaker_data.mode));
- }
- +output_splitter_op = ChainGetOperatorByRole(speaker_data.chain, output_splitter_role);
- +if (output_splitter_op)
- +{
-
- +}
复制代码 apps\libs\audio_mixer\audio_mixer_speaker_chain_configs.c:
- #define MAKE_SPEAKER_OPS_COMMON() \
- MAKE_OPERATOR_CONFIG(capability_id_volume, media_volume_role), \
- MAKE_OPERATOR_CONFIG(capability_id_peq, speaker_peq_role), \
- +MAKE_OPERATOR_CONFIG(capability_id_splitter, output_splitter_role), \
- MAKE_OPERATOR_CONFIG(capability_id_passthrough, post_processing_role)
- static const operator_path_node_t left_primary_left[] =
- {
- {media_volume_role, VOLUME_INPUT_MAIN1, VOLUME_OUTPUT1},
- {speaker_peq_role, LEFT_INPUT, LEFT_OUTPUT},
- +{output_splitter_role, PRIMARY_LEFT_INPUT, PRIMARY_LEFT_OUTPUT},
- {post_processing_role, PRIMARY_LEFT_INPUT, PRIMARY_LEFT_OUTPUT}
- };
- static const operator_path_node_t right_primary_right[] =
- {
- {media_volume_role, VOLUME_INPUT_MAIN2, VOLUME_OUTPUT2},
- {speaker_peq_role, RIGHT_INPUT, RIGHT_OUTPUT},
- +{output_splitter_role, PRIMARY_RIGHT_INPUT, PRIMARY_RIGHT_OUTPUT},
- {post_processing_role, PRIMARY_RIGHT_INPUT, PRIMARY_RIGHT_OUTPUT}
- };
- +static const operator_path_node_t path_aux_left[] =
- +{
- +{output_splitter_role, UNUSED_TERMINAL, SECONDARY_LEFT_OUTPUT},
- +{post_processing_role, SECONDARY_LEFT_OUTPUT, SECONDARY_LEFT_OUTPUT}
- +};
- +static const operator_path_node_t path_aux_right[] =
- +{
- +{output_splitter_role, UNUSED_TERMINAL, SECONDARY_RIGHT_OUTPUT},
- +{post_processing_role, SECONDARY_RIGHT_OUTPUT, SECONDARY_RIGHT_OUTPUT}
- +};
- static const operator_path_t paths_mono[] =
- {
- {mixer_left_channel, path_with_in_and_out,
- ARRAY_DIM((left_primary_left)), left_primary_left},
- {mixer_prompt_left_channel, path_with_input, ARRAY_DIM((prompt_mix)), prompt_mix},
- +{path_role_aux_left, path_with_output, ARRAY_DIM((path_aux_left)), path_aux_left}
- };
- static const operator_path_t paths_stereo[] =
- {
- {mixer_left_channel, path_with_in_and_out,
- ARRAY_DIM((left_primary_left)), left_primary_left},
- {mixer_right_channel, path_with_in_and_out, ARRAY_DIM((right_primary_right)),
- right_primary_right},
- {mixer_prompt_left_channel, path_with_input, ARRAY_DIM((prompt_mix)), prompt_mix},
- +{path_role_aux_left, path_with_output, ARRAY_DIM((path_aux_left)), path_aux_left},
- +{path_role_aux_right, path_with_output, ARRAY_DIM((path_aux_right)), path_aux_right}
- };
复制代码 apps\libs\audio_mixer\audio_mixer_speaker_chain_configs.h:
- typedef enum _audio_mixer_speaker_roles
- {
- +output_splitter_role,
- media_volume_role,
- speaker_peq_role,
- stereo_to_mono_role,
- crossover_role,
- master_volume_role,
- compander_role,
- post_processing_role
- } audio_mixer_speaker_roles_t;
复制代码
|