杰里UART1发送采集mic裸数据并解析播放出来方法

1  逻辑分析仪导出数据,选择16进制

2 采集配置

 

3 芯片手册的ADC是 24bit

4  数据发送

发送的数据是16bit, 

UART是每次发送1字节(8bit),  转换成wav  16bit 要合成。

5  数据经过python程序进行转换

这个文件有声音了。

6 关键代码实现

//zk+ 语音kws     dump数据,

void voice_dump_uart_init(void)

{

           const struct uart_config debug_uart_config = {

        .baud_rate = 115200,

        .tx_pin = IO_PORTG_08,//IO_PORTA_05,//IO_PORTG_08,//IO_PORTA_00,

        .rx_pin = -1,

        .tx_wait_mutex = 0,//1:不支持中断调用,互斥,0:支持中断,不互斥

    };

    uart_init(1, &debug_uart_config);

}

/*

 * 语音识别的KWS处理

 */

static int smart_voice_data_handler(struct smart_voice_context *sv)

{

    if (!config_jl_audio_kws_enable) {

        return 0;

    }

#if SMART_VOICE_TEST_PRINT_PCM

    putchar('*');

    return 1;

#endif

    if (!sv->mic) {

        return -EINVAL;

    }

    s16 data[SMART_VOICE_KWS_FRAME_LEN / 2]; // 语音识别采集的mic buf数据

    int rlen = voice_mic_data_read(sv->mic, data, SMART_VOICE_KWS_FRAME_LEN);

    if (rlen < SMART_VOICE_KWS_FRAME_LEN) {

        return -EINVAL;

    }

    if (sv->nn_vad) {

#if AUDIO_NN_VAD_ENABLE

        audio_nn_vad_data_handler(sv->nn_vad, data, sizeof(data));

#endif

    }

 //zk+  mic数据发UART1

 #if  1

        // uart_send_bytes(1, data, len);//zk+   把mic 音频数据发给串口,出错 [UART]uart dma buffer must used dma_malloc()

              void *dma_buf = dma_malloc( rlen);

              if (dma_buf)

              {

                  memcpy(dma_buf, data,  rlen);

                  uart_send_bytes(1, dma_buf,  rlen);

                  dma_free(dma_buf);

              }

             

#endif

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐