当前位置: 首页 > news >正文

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);

     

 

http://www.dtcms.com/a/524773.html

相关文章:

  • 虚拟内存与RAM
  • 广州花都区网站建设长沙seo优化排名推广
  • 广告公司网站模版做一家网站要多少钱
  • 【Linux知识】Linux文本操作相关命令行
  • Port设置功能开发实践: Pyside6 MVC架构与Model/View/Delegate模式的应用
  • 白之家低成本做网站深圳比较好的建网站公司
  • 深度学习一些知识点(指标+正则化)
  • 企业官方网站建设的作用仿牌 镜像网站
  • java实现多线程分片下载超大文件,支持HTTPS。
  • 数据结构和算法(十)--B树
  • 从零起步学习MySQL || 第九章:从数据页的角度看B+树及MySQL中数据的底层存储原理(结合常见面试题深度解析)
  • HTTP 与 SOCKS5 代理协议:企业级选型指南与工程化实践
  • 新华三H3CNE网络工程师认证—STP状态机与收敛过程
  • 从零起步学习MySQL || 第十章:深入了解B+树及B+树的性能优势(结合底层数据结构与数据库设计深度解析)
  • 阿里云服务器网站备案台州北京网站建设
  • 眼镜网站建设深圳网站设计精选刻
  • CF1060 CD
  • 莱西做网站公司繁体网站模板
  • 学校网站建设培训心得如何登陆建设银行信用卡网站
  • Java 大视界 -- Java 大数据机器学习模型在电商商品推荐系统中的冷启动问题攻克与个性化推荐强化(427)
  • 【总结】Vue中的组件通信方式有哪些?React中的组件通信方式有哪些?
  • 外贸网站优化推广手工制作大全折纸
  • 华为一站式服务建站视觉设计案例
  • 前端大文件分片上传
  • webrtc代码走读(四)-QOS-NACK实现-发送端
  • 主成分分析(PCA)在计算机图形学中的深入解析与应用
  • Kubernetes:实战Pod共享存储
  • 合肥市建设工程造价管理站网站ps网站背景图片怎么做
  • 5118网站是免费的吗网站如何防止重登录
  • 网络编程实战02·从零搭建Epoll服务器