一、AI 模塊和外設麥克風的關系
AI 模塊是 RV1126 芯片的一個重要組成部分。它的主要功能是將外部接入的麥克風采集到的模擬信號通過內置的驅動程序轉換為數字信號。這意味著麥克風作為外設,提供音頻輸入信號,AI 模塊通過其硬件和軟件的結合,負責對這些信號的處理和轉換。
? ? ? ? 音頻編碼流程主要分三步:AI的初始化、AENC的初始化(硬件編碼)、綁定AI和AENC節點、開啟AENC線程進行視頻編碼的采集,注意一下這里的編碼是硬件編碼,不是使用ffmpeg軟件編碼。和視頻的流程差不多
? ? ? ? 在第三篇的時候,已經介紹過了這RV1126_AI_CONFIG、RV1126_AENC_CONFIG這兩個數據結構。回顧一下。
RV1126_AI_CONFIG:
typedef struct
{unsigned int id; ///< 音頻通道ID,用于標識不同的音頻輸入通道AI_CHN_ATTR_S attr; ///< 音頻通道屬性,包含通道的具體配置信息
} RV1126_AI_CONFIG;
????????里面有一個最重要的成員AI_CHN_ATTR_S,是AI模塊的數據結構體。
?編碼:rkmedia_module_function.cpp
//AI模塊RV1126_AI_CONFIG rv_ai;memset(&rv_ai, 0, sizeof( RV1126_AI_CONFIG)); //清空結構體rv_ai.id = 0; //AI模塊采集通道rv_ai.attr.pcAudioNode = AUDIO_PATH; //默認是default,音頻alsa路徑rv_ai.attr.enSampleFormat = RK_SAMPLE_FMT_S16; //音頻采樣深度。rv_ai.attr.enAiLayout = AI_LAYOUT_NORMAL; //音頻布局,默認是2rv_ai.attr.u32NbSamples = NB_SAMPLES; //AAC默認1024rv_ai.attr.u32SampleRate = 48000;//音頻采樣率rv_ai.attr.u32Channels = 2; //音頻通道數ret =rkmedia_ai_init(&rv_ai); //if(ret != 0){printf("ai模塊初始化\n");}else{printf("ai模塊創建成功\n");//把音頻的通道號id保存到容器RV1126_AI_CONTAINER ai_container;ai_container.id = 0;ai_container.ai_id = rv_ai.id; //保存進去set_ai_container(0, &ai_container);//設置AI容器}
? ? ? ? 基本編碼流程也是和視頻差不多。