ES7243E 模拟音频转I2S输入给BES I2S_Master数据运行流程分析

ES7243E 模拟音频转I2S输入给BES I2S_Master数据运行流程分析

LINE-IN接入

void aux_in_dothing_func(void)

{

FUNC_NAME_LINE_PRINT();

int activeCons;

osapi_lock_stack();

activeCons = btif_me_get_activeCons();

osapi_unlock_stack();

customer_app_pwl_stop();

osDelay(380);

app_status_indication_set(APP_STATUS_INDICATION_ALL_LED_OFF);

osDelay(380);

// aux_in_or_out_last = AUX_PLUG_IN;

//aux_in_detect_reset_func();

//if(AUX_PLUG_OUT == hal_gpio_pin_get_val((enum HAL_GPIO_PIN_T)AUX_PLUG_IN_OUT_TRIGGER_PIN))

//goto do_nothing;

//app_poweroff_timer_stop();

// app_ankey_timer_stop();

//audio_process_init();

app_bt_connectable_mode_stop_reconnecting();

osDelay(300);

app_audio_manager_sendrequest(APP_BT_STREAM_MANAGER_STOP,BT_STREAM_SBC, 0,0); //关闭蓝牙SBC音频

app_audio_manager_sendrequest(APP_BT_STREAM_MANAGER_START,BT_STREAM_LINEIN, 0,0);// 开启AUX 音频流

#ifdef AUDIO_LINEIN

case BT_STREAM_LINEIN:

TRACE(0,"xing:BT_STREAM_LINEIN OPEN");

// if(!bt_media_is_media_active_by_type(BT_STREAM_SBC | BT_STREAM_MEDIA | BT_STREAM_VOICE)) {

app_audio_sendrequest(APP_PLAY_LINEIN_AUDIO,(uint8_t)APP_BT_SETTING_OPEN, 0);

bt_media_set_current_media(BT_STREAM_LINEIN);

}

break;

#endif

#ifdef AUDIO_LINEIN

case APP_PLAY_LINEIN_AUDIO:

nRet = app_play_linein_onoff(true); //播放linein

break;

#endif

#ifdef AUDIO_LINEIN

case BT_STREAM_LINEIN:

if(bt_media_is_media_active_by_type(BT_STREAM_LINEIN))

{

app_audio_sendrequest(APP_PLAY_LINEIN_AUDIO,(uint8_t)APP_BT_SETTING_CLOSE, 0);

if(bt_media_get_current_media() & BT_STREAM_LINEIN)

bt_media_set_current_media(0);

bt_media_clear_media_type(stream_type,device_id);

}

break;

#endif

播放Linin 重点代码

int app_play_linein_onoff(bool onoff)

{

static bool isRun = false;

uint8_t *linein_audio_cap_buff = 0;

uint8_t *linein_audio_play_buff = 0;

uint8_t *linein_audio_loop_buf = NULL;

struct AF_STREAM_CONFIG_T stream_cfg;

uint8_t POSSIBLY_UNUSED *bt_eq_buff = NULL;

uint32_t POSSIBLY_UNUSED eq_buff_size;

uint8_t POSSIBLY_UNUSED play_samp_size;

TRACE(2,"app_play_linein_onoff work:%d op:%d", isRun, onoff);

if (isRun == onoff)

return 0;

if (onoff){

app_sysfreq_req(APP_SYSFREQ_USER_APP_0, APP_SYSFREQ_104M);

app_overlay_select(APP_OVERLAY_A2DP);

app_audio_mempool_init();

app_audio_mempool_get_buff(&linein_audio_cap_buff, LINEIN_CAPTURE_BUFFER_SIZE);

app_audio_mempool_get_buff(&linein_audio_play_buff, LINEIN_PLAYER_BUFFER_SIZE);

app_audio_mempool_get_buff(&linein_audio_loop_buf, LINEIN_PLAYER_BUFFER_SIZE<<2);

app_audio_pcmbuff_init(linein_audio_loop_buf, LINEIN_PLAYER_BUFFER_SIZE<<2);

#if (LINEIN_CAPTURE_CHANNEL == 1)

app_audio_mempool_get_buff((uint8_t **)&app_linein_play_cache, LINEIN_PLAYER_BUFFER_SIZE/2/2);

app_play_audio_lineinmode_init(LINEIN_CAPTURE_CHANNEL, LINEIN_PLAYER_BUFFER_SIZE/2/2);

#elif (LINEIN_CAPTURE_CHANNEL == 2)

app_play_audio_lineinmode_init(LINEIN_CAPTURE_CHANNEL, LINEIN_PLAYER_BUFFER_SIZE/2);

#endif

memset(&stream_cfg, 0, sizeof(stream_cfg));

#if (LINEIN_MODE == 1 || LINEIN_MODE == 6)

TRACE(0,"app_play_linein_onoff mode 01");

stream_cfg.bits = AUD_BITS_24; //

stream_cfg.channel_num = (enum AUD_CHANNEL_NUM_T)LINEIN_PLAYER_CHANNEL;

#if defined(AUDIO_RESAMPLE)

stream_cfg.sample_rate = AUD_SAMPRATE_44100;//add by zhoukang

#else

stream_cfg.sample_rate = AUD_SAMPRATE_44100;

#endif

af_stream_open(AUD_STREAM_ID_0, AUD_STREAM_PLAYBACK, &stream_cfg);// 调用音频框架 播放音频

audio_process_open(stream_cfg.sample_rate, stream_cfg.bits, stream_cfg.channel_num, stream_cfg.data_size/(stream_cfg.bits <= AUD_BITS_16 ? 2 : 4)/2, bt_eq_buff, eq_buff_size);

af_stream_start(AUD_STREAM_ID_0, AUD_STREAM_PLAYBACK);//开启音频

//捕获i2s数据

#if (LINEIN_CAPTURE_CHANNEL == 1) //?????

app_audio_mempool_get_buff((uint8_t **)&app_linein_play_cache, LINEIN_PLAYER_BUFFER_SIZE/2/2); //?????

app_play_audio_lineinmode_init(LINEIN_CAPTURE_CHANNEL, LINEIN_PLAYER_BUFFER_SIZE/2/2); //?????

#elif (LINEIN_CAPTURE_CHANNEL == 2)

app_play_audio_lineinmode_init(LINEIN_CAPTURE_CHANNEL, LINEIN_PLAYER_BUFFER_SIZE/2); //?????

#endif

memset(&stream_cfg, 0, sizeof(stream_cfg)); //???????

#if (LINEIN_MODE == 1 || LINEIN_MODE == 6) //?????

TRACE(0,"app_play_linein_onoff mode 01");

stream_cfg.bits = AUD_BITS_24; //

stream_cfg.channel_num = (enum AUD_CHANNEL_NUM_T)LINEIN_PLAYER_CHANNEL;

#if defined(AUDIO_RESAMPLE)

stream_cfg.sample_rate = AUD_SAMPRATE_44100;//add by zhoukang

#else

stream_cfg.sample_rate = AUD_SAMPRATE_44100;

#endif

#endif

Device设备选择的是配置i2s1 作为主 参数将传入af_open

#if (TJ_BOARD_ZP_H6506 == 1 || CSP_BOARD_WH301A == 1) //from I2S

#if FPGA==0

stream_cfg.device = AUD_STREAM_USE_I2S1_MASTER;//add by zhoukang 2021-08-17

#else

stream_cfg.device = AUD_STREAM_USE_I2S1_MASTER;//add by zhoukang 2021-08-17

#endif

音频输入路径

stream_cfg.io_path = AUD_INPUT_PATH_LINEIN;//add by zhoukang 2021-08-17

打开与启动

af_stream_open(AUD_STREAM_ID_0, AUD_STREAM_CAPTURE, &stream_cfg);

af_stream_start(AUD_STREAM_ID_0, AUD_STREAM_CAPTURE);

关闭

af_stream_close(AUD_STREAM_ID_0, AUD_STREAM_CAPTURE);

相关推荐
学传打活10 天前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续3)
微信公众平台·1024程序员节·汉字·昆仑正义文化
学传打活15 天前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
fangzhanpeng16823 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心25 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u0103055271 个月前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u0103055271 个月前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝1 个月前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u0103055271 个月前
Java图像处理实战指南
人工智能·1024程序员节
u0103055271 个月前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u0103055271 个月前
Java实用类应用精讲
人工智能·1024程序员节