杰里UART1发送采集mic裸数据并解析播放出来方法
本文介绍了通过UART1发送采集的麦克风原始数据并解析播放的方法。主要步骤包括:1)使用逻辑分析仪导出16进制数据;2)配置ADC采集24bit数据;3)通过UART每次发送1字节(8bit)数据,最终合成16bit的WAV音频;4)使用Python程序转换数据并播放声音。关键代码实现了UART初始化配置,通过DMA缓冲区发送麦克风采集的音频数据到串口。该方法适用于语音识别系统中的关键词唤醒(KW
杰里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
更多推荐
所有评论(0)