3.多线程获取音频AI的PCM数据

目录

一RV1126多线程获取音频PCM数据的流程

1.1.初始化AI模块:

1.2.启动AI模块:

1.3.开启多线程获取PCM音频数据:

二代码实战

三ffplay播放pcm数据需要的命令:


RV1126多线程获取音频PCM数据的流程

RV1126多线程采集AI模块的数据,一般分为三个步骤:分别是初始化AI模块、启动AI模块开启采集、开启多线程采集AI数据并保存到本地。

1.1.初始化AI模块:

AI模块的初始化实际上就是对AI_CHN_ATTR_S 的参数进行设置、然后调用RK_MPI_AI_SetChnAttr 设置AI模块并使能****RK_MPI_AI_EnableChn,****代码如下:

AI_CHN_ATTR_S ai_chn_s;

ai_chn_s.pcAudioNode = AUDIO_PATH;

ai_chn_s.u32Channels = 2;

ai_chn_s.u32NbSamples = 1024;

ai_chn_s.u32SampleRate = 48000;

ai_chn_s.enAiLayout = AI_LAYOUT_NORMAL;

ai_chn_s.enSampleFormat = RK_SAMPLE_FMT_S16;

ret = RK_MPI_AI_SetChnAttr(AI_CHN, &ai_chn_s);

if(ret)

{

printf("RK_MPI_AI_SetChnAttr Failed...\n");

}

ret = RK_MPI_AI_EnableChn( AI_CHN );

if(ret)

{

printf("RK_MPI_AI_EnableChn Failed...\n");

}

1.2.启动AI模块:

设置完上面的AI模块后,就要开启AI模块的工作,使用的API是RK_MPI_ AI _StartStream 代码如下:

....................................................................

ret = RK_MPI_AI_StartStream(AI_CHN);

if(ret)

{

printf("RK_MPI_AI_StartStream Failed...\n");

}

.......................................................................

1.3.开启多线程获取PCM音频数据:

开启一个线程去采集每一帧VI模块的数据,使用的API是RK_MPI_SYS_GetMediaBuffer, 模块ID是RK_ID_AI,通道号ID是AI创建的通道ID号****。****这个API的具体作用已经在之前的获取AI数据:

........................................

while(1)

{

.........................

mb = RK_MPI_SYS_GetMediaBuffer(RK_ID_AI, s32_chn_id, -1);

fwrite( RK_MPI_MB_GetPtr (mb), RK_MPI_MB_Get Size(mb), 1, pcm_file );

.......................

}

二代码实战

cpp 复制代码
#include <assert.h>
#include <fcntl.h>
#include <getopt.h>
#include <pthread.h>
#include <signal.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>

#include "rkmedia_api.h"
#define AUDIO_PATH "default"
#define AI_CHN 0

//获取PCM数据的线程
void * get_ai_pcm_thread(void * args)
{
    pthread_detach(pthread_self());
    FILE * pcm_file = fopen("test_ai.pcm", "w+");
    MEDIA_BUFFER mb ;

    while (1)
    {
        //获取PCM数据的线程
        mb = RK_MPI_SYS_GetMediaBuffer(RK_ID_AI, AI_CHN, -1);
        if(!mb)
        {
            printf("RK_MPI_SYS_GetMediaBuffer Failed....\n");
            break;
        }
        
        printf("get_pcm_data success...\n");
        fwrite(RK_MPI_MB_GetPtr(mb), RK_MPI_MB_GetSize(mb), 1, pcm_file);
        RK_MPI_MB_ReleaseBuffer(mb);
    }
}


int main(int argc, char *argv[])
{
    int ret;
    AI_CHN_ATTR_S ai_chn_s;
    ai_chn_s.pcAudioNode = AUDIO_PATH; //音频路径,默认default
    ai_chn_s.u32SampleRate = 48000; //音频采样率
    ai_chn_s.u32Channels = 2;   //音频通道数
    ai_chn_s.u32NbSamples = 1024; //音频采样个数,这里固定1024
    ai_chn_s.enSampleFormat = RK_SAMPLE_FMT_S16;
    ai_chn_s.enAiLayout = AI_LAYOUT_NORMAL;  //NORMAL
    ret = RK_MPI_AI_SetChnAttr(AI_CHN, &ai_chn_s);  //设置AI模块
    if(ret)
    {
        printf("Set Ai_Chn_Attr Failed....\n");
    }
    else
    {
        printf("Set Ai_Chn_Attr Success....\n");
    }

    ret = RK_MPI_AI_EnableChn(AI_CHN);  //使能AI模块
    if(ret)
    {
        printf("Enable Ai_Chn_Attr Failed....\n");
    }

    ret = RK_MPI_AI_StartStream(AI_CHN); //启动音频AI模块
    if(ret)
    {
        printf("RK_MPI_AI_StartStream Failed....\n");
    }

    pthread_t pid;
    pthread_create(&pid, NULL, get_ai_pcm_thread, NULL); 

    while (1)
    {
        sleep(2);
    }

    RK_MPI_AI_DisableChn(AI_CHN);


    return 0;
}

三ffplay播放pcm数据需要的命令:

ffplay -ar 采样率 -channels 通道数 -f 采样格式(s16le) -i pcm文件

相关推荐
陈橘又青18 分钟前
100% AI 写的开源项目三周多已获得 800 star 了
人工智能·后端·ai·restful·数据
中杯可乐多加冰36 分钟前
逻辑控制案例详解|基于smardaten实现OA一体化办公系统逻辑交互
人工智能·深度学习·低代码·oa办公·无代码·一体化平台·逻辑控制
IT_陈寒1 小时前
Redis实战:5个高频应用场景下的性能优化技巧,让你的QPS提升50%
前端·人工智能·后端
龙智DevSecOps解决方案1 小时前
Perforce《2025游戏技术现状报告》Part 1:游戏引擎技术的广泛影响以及生成式AI的成熟之路
人工智能·unity·游戏引擎·游戏开发·perforce
大佬,救命!!!1 小时前
更换适配python版本直接进行机器学习深度学习等相关环境配置(非仿真环境)
人工智能·python·深度学习·机器学习·学习笔记·详细配置
4***R2401 小时前
C++在音视频处理中的库
开发语言·c++·音视频
星空的资源小屋1 小时前
VNote:程序员必备Markdown笔记神器
javascript·人工智能·笔记·django
梵得儿SHI1 小时前
(第七篇)Spring AI 基础入门总结:四层技术栈全景图 + 三大坑根治方案 + RAG 进阶预告
java·人工智能·spring·springai的四大核心能力·向量维度·prompt模板化·向量存储检索
亚马逊云开发者1 小时前
Amazon Bedrock助力飞书深诺电商广告分类
人工智能
2301_823438021 小时前
解析论文《复杂海上救援环境中无人机群的双阶段协作路径规划与任务分配》
人工智能·算法·无人机