sample_ai_aec.c 程序流程

发布于:2025-03-18 ⋅ 阅读:(19) ⋅ 点赞:(0)
/*ret = IMP_AI_Set_WebrtcProfileIni_Path("/system/"); //设置AEC配置文件"webrtc_profiel.ini"的路径 
	if(ret != 0) {
		IMP_LOG_ERR(TAG, "Set AEC Path failed\n");
		return NULL;
	} else {
		IMP_LOG_INFO(TAG, "Set AEC Path Ok\n");
	}*/
	ret = pthread_create(&tid_ref, NULL, IMP_Audio_Record_AEC_Thread, AUDIO_RECORD_FILE);
	if(ret != 0) {
		IMP_LOG_ERR(TAG, "[ERROR] %s: pthread_create Audio Record failed\n", __func__);
		return -1;
	}
		FILE *record_file = fopen(argv, "wb");
		int devID = 1;
		IMPAudioIOAttr attr;
		attr.samplerate = AUDIO_SAMPLE_RATE_16000;
		attr.bitwidth = AUDIO_BIT_WIDTH_16;
		attr.soundmode = AUDIO_SOUND_MODE_MONO;
		attr.frmNum = 40;
		attr.numPerFrm = 640;
		attr.chnCnt = 1;
		ret = IMP_AI_SetPubAttr(devID, &attr);
		ret = IMP_AI_Enable(devID);
		int chnID = 0;
		IMPAudioIChnParam chnParam;
		chnParam.usrFrmDepth = 40;
		chnParam.aecChn = AUDIO_AEC_CHANNEL_FIRST_LEFT; // 选择左声道或者通道1做回音消除*
		ret = IMP_AI_SetChnParam(devID, chnID, &chnParam);
		ret = IMP_AI_EnableChn(devID, chnID);
		//int IMP_AI_EnableAec(int aiDevId, int aiChn, int aoDevId, int aoChn);
		// * @param[in] aiDevId 需要进行回声抵消的音频输入设备号.
		//* @param[in] aiChn 需要进行回声抵消的音频输入通道号.
		//* @param[in] aoDevId 需要进行回声抵消的音频输出设备号.
		//* @param[in] aoChn 需要进行回声抵消的音频输出通道号.
		ret = IMP_AI_EnableAec(devID, chnID, 0, 0);//启动AI通道和AO通道的回声消除功能 
		ret = IMP_AI_SetVol(devID, chnID, chnVol);
		ret = IMP_AI_SetGain(devID, chnID, aigain);
		ret = IMP_AI_PollingFrame(devID, chnID, 1000);
		IMPAudioFrame frm;
		ret = IMP_AI_GetFrame(devID, chnID, &frm, BLOCK);
		fwrite(frm.virAddr, 1, frm.len, record_file);
		ret = IMP_AI_ReleaseFrame(devID, chnID, &frm);
		ret = IMP_AI_DisableAec(devID, chnID);//禁止AI通道0回声消除功能 
		ret = IMP_AI_DisableChn(devID, chnID);
		ret = IMP_AI_Disable(devID);
		fclose(record_file);
		pthread_exit(0);
		

	ret = pthread_create(&tid_play, NULL, IMP_Audio_Play_Thread, AUDIO_RECORD_FILE_FOR_PLAY);
	if(ret != 0) {
		IMP_LOG_ERR(TAG, "[ERROR] %s: pthread_create Audio Play failed\n", __func__);
		return -1;
	}
			fopen文件 rb 
			IMP_AO_SetPubAttr  devID为0  设置AO设备属性和采样率和帧num chn_cnt  
			int devID = 0;
			IMP_AO_Enable  使能devID0 
			int chnID = 0;
			IMP_AO_EnableChn 使能DevID0下ChnID0,
			IMP_AO_SetVol(devID, chnID, chnVol);  // 设置
			IMP_AO_EnableAlgo(devID, chnID);    // 使能chnID算法 
			size = fread(buf, 1, AO_TEST_BUF_SIZE, play_file); //读取文件中音频数据
			IMPAudioFrame frm;
			frm.virAddr = (uint32_t *)buf;
			frm.len = size;
			ret = IMP_AO_SendFrame(devID, chnID, &frm, BLOCK);   // 向AO通道发送音频帧frm
			ret = IMP_AO_ClearChnBuf(devID,chnID); // 消除AO通道中的音频数据缓存 
			ret = IMP_AO_ResumeChn(devID,chnID); //  恢复AO通道 
			ret = IMP_AO_FlushChnBuf(devID,chnID);  //等待AO通道音频数据播放完
			ret = IMP_AO_DisableAlgo(devID,chnID); //AO通道禁止算法功能
			ret = IMP_AO_DisableChn(devID, chnID); // 禁用AO通道 
			ret = IMP_AO_Disable(devID);   //禁用AO设备
			fclose(play_file);

	pthread_join(tid_play, NULL);
	pthread_join(tid_ref, NULL);





在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到