RV1126 音频开发(1)

这篇具有很好参考价值的文章主要介绍了RV1126 音频开发(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

AI_CHN_ATTR_S ai_attr;
ai_attr.pcAudioNode = pDeviceName;
ai_attr.enSampleFormat = RK_SAMPLE_FMT_S16;
ai_attr.u32NbSamples = u32FrameCnt;
ai_attr.u32SampleRate = u32SampleRate;
ai_attr.u32Channels = u32ChnCnt;
ai_attr.enAiLayout = AI_LAYOUT_NORMAL;

音频输入属性结构体

  • pcAudioNode//音频设备节点路径

  • enSampleFormat

    • 采样格式

    • typedef enum rkSample_Format_E {
      RK_SAMPLE_FMT_NONE = -1,
      RK_SAMPLE_FMT_U8,
      RK_SAMPLE_FMT_S16,
      RK_SAMPLE_FMT_S32,
      RK_SAMPLE_FMT_FLT,
      RK_SAMPLE_FMT_U8P,
      RK_SAMPLE_FMT_S16P,
      RK_SAMPLE_FMT_S32P,
      RK_SAMPLE_FMT_FLTP,
      RK_SAMPLE_FMT_G711A,
      RK_SAMPLE_FMT_G711U,
      RK_SAMPLE_FMT_NB
      } Sample_Format_E;
      
    • 不以P为结尾的都是interleaved结构,以P为结尾的是planar结构

    • Planar模式是FFmpeg内部存储模式,我们实际使用的音频文件都是Packed模式的。

    • AAC解码输出的数据为浮点型的 RK_SAMPLE_FMT_FLTP格式

    • MP3解码输出的数据为 RK_SAMPLE_FMT_S16P格式(使用的mp3文件为16位深)

  • u32NbSamples

    • 每帧的采样点个数
    • 通常一帧是按1024个采样点
  • u32SampleRate

    • 采样率
    • 就是每秒对声音进行采集的次数,同样也是所得的数字信号的每秒样本数;44,100 Hz - 音频 CD, 也常用于 MPEG-1 音频(VCD, SVCD, MP3)所用采样率
  • u32Channels

    • 通道数
    • 单通道、双声道、四声道、5.1声道
  • enAiLayout

    • 输入布局类型

通过RK_MPI_AI_SetChnAttr设置音频输入通道属性 ,然后RK_MPI_AI_EnableChn打开通道0

pthread_create创建线程去获取数据流并保存

接着通过RK_MPI_AI_StartStream启动音频流

流程:

  • 设置音频输入通道属性
  • 打开通道
  • 启动音频流
  • 创建线程去获取数据流并保存

获取数据流线程中通过从指定通道中获取数据 然后fwrite往输出音频文件中写数据,最后关闭文件文章来源地址https://www.toymoban.com/news/detail-436150.html

#include <assert.h>
#include <fcntl.h>
#include <pthread.h>
#include <signal.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>

#include "rkmedia_api.h"

static bool quit = false;
static void sigterm_handler(int sig) {
  fprintf(stderr, "signal %d\n", sig);
  quit = true;
}

static void *GetMediaBuffer(void *path) {
  char *save_path = (char *)path;
  printf("#Start %s thread, arg:%s\n", __func__, save_path);
  FILE *save_file = fopen(save_path, "w");
  if (!save_file)
    printf("ERROR: Open %s failed!\n", save_path);

  MEDIA_BUFFER mb = NULL;
  int cnt = 0;
  while (!quit) {
    mb = RK_MPI_SYS_GetMediaBuffer(RK_ID_AI, 0, -1);
    if (!mb) {
      printf("RK_MPI_SYS_GetMediaBuffer get null buffer!\n");
      break;
    }

    printf("#%d Get Frame:ptr:%p, size:%zu, mode:%d, channel:%d, "
           "timestamp:%lld\n",
           cnt++, RK_MPI_MB_GetPtr(mb), RK_MPI_MB_GetSize(mb),
           RK_MPI_MB_GetModeID(mb), RK_MPI_MB_GetChannelID(mb),
           RK_MPI_MB_GetTimestamp(mb));

    if (save_file)
      fwrite(RK_MPI_MB_GetPtr(mb), 1, RK_MPI_MB_GetSize(mb), save_file);

    RK_MPI_MB_ReleaseBuffer(mb);
  }

  if (save_file)
    fclose(save_file);

  return NULL;
}


int main(int argc, char *argv[]) {
  RK_U32 u32SampleRate = 44100;
  RK_U32 u32ChnCnt = 1;
  RK_U32 u32FrameCnt = 1024;
  RK_S32 s32Volume = 100;
  // default:CARD=rockchiprk809co
  RK_CHAR *pDeviceName = "default";
  RK_CHAR *pOutPath = "/mnt/nfs/ai.pcm";
  int c;
  int ret = 0;

  printf("#Device: %s\n", pDeviceName);
  printf("#SampleRate: %u\n", u32SampleRate);
  printf("#Channel Count: %u\n", u32ChnCnt);
  printf("#Frame Count: %u\n", u32FrameCnt);
  printf("#Volume: %d\n", s32Volume);
  printf("#Output Path: %s\n", pOutPath);

  RK_MPI_SYS_Init();

  AI_CHN_ATTR_S ai_attr;
  ai_attr.pcAudioNode = pDeviceName;
  ai_attr.enSampleFormat = RK_SAMPLE_FMT_S16;
  ai_attr.u32NbSamples = u32FrameCnt;
  ai_attr.u32SampleRate = u32SampleRate;
  ai_attr.u32Channels = u32ChnCnt;
  ai_attr.enAiLayout = AI_LAYOUT_NORMAL;

  ret = RK_MPI_AI_SetChnAttr(0, &ai_attr);
  ret |= RK_MPI_AI_EnableChn(0);
  if (ret) {
    printf("Enable AI[0] failed! ret=%d\n", ret);
    return -1;
  }
  pthread_t read_thread;
  pthread_create(&read_thread, NULL, GetMediaBuffer, pOutPath);
  ret = RK_MPI_AI_StartStream(0);
  if (ret) {
    printf("Start AI failed! ret=%d\n", ret);
    return -1;
  }

  printf("%s initial finish\n", __func__);
  signal(SIGINT, sigterm_handler);

  while (!quit) {
    usleep(500000);
  }

  printf("%s exit!\n", __func__);
  RK_MPI_AI_DisableChn(0);

  return 0;
}

到了这里,关于RV1126 音频开发(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • rv1109/1126 rknn 模型部署过程

    rv1109/1126是瑞芯微出的嵌入式AI芯片,带有npu, 可以用于嵌入式人工智能应用。算法工程师训练出的算法要部署到芯片上,需要经过模型转换和量化,下面记录一下整个过程。 模型量化需要安装rk的工具包: rockchip-linux/rknn-toolkit (github.com) 版本要根据开发板的固件支持程度来,

    2024年02月14日
    浏览(39)
  • rv1126调试串口改为登录方式(加密)的方法

    把/etc/inittab 里面的::respawn:-/bin/sh 改为::respawn:-/bin/login \\\"/etc/inittab\\\"是系统初始化和运行级别管理的配置文件。在该文件中,每个条目由四个字段构成: id:指定要运行的tty设备,如果为空,则表示运行在/dev/console上。 runlevels:忽略字段,对BusyBox init无效。 action:指定进程的执

    2024年02月11日
    浏览(33)
  • rv1126之isp黑电平(BLC)校准!

    大家好,今天我们继续来讲解isp第二期内容,这期内容主要分三个部分: 1、tunning的工作流程 2、利用RKISP2.x_Tuner来创建tunning工程,并连接上rv1126开发板进行抓图 3、BLC(黑电平校准)的原理和校准方法以及实战 那对于RKISP2.x_Tuner的工具使用,这个在第一期的内容里面有详细的介

    2024年02月09日
    浏览(34)
  • RV1126笔记十三:实现RTMP多路拉流

    若该文为原创文章,转载请注明原文出处。   通过RV1126实现RTMP的多路拉流,并在屏幕上显示出来,这里涉及到ffmpeg几个重要知识点,和RV1126如何在屏幕分屏显示。  流程和单路拉流类似,这里只是涉及拉取后的图像需要解码缩放,在合成分屏显示出来。 具体看代码。 屏幕显

    2023年04月17日
    浏览(29)
  • rv1126移植并部署自写手写数字识别模型

    --rknn_toolkit以及rknpu环境搭建-rv1126-CSDN博客 MNIST-https://github.com/warren-wzw/MNIST-pytorch.git 1:进入docker docker run -t -i --privileged -v /dev/bus/usb:/de/bus/usb   -v /home/wzw/rk_npu_sdk/rknn-toolkit-master-v1.7.3:/rknn_toolkit rknn-toolkit:1.7.3 /bin/bash 2:进入/rknn_toolkit/examples/onnx,复制一个resnet50v2并命名为MNI

    2024年02月14日
    浏览(39)
  • RV1126笔记十二:实现RTMP单路拉流

    若该文为原创文章,转载请注明原文出处。 相比推流,拉流就简单了一点,只需要连接RTMP服务器,获取流,把数据解码出来显示和播放就可以,使用的是易百纳板子,测试时音频输出是不正常的,所以只解析了视数据,不处理音频。如果想测试音频,建议用其他开发板,正

    2023年04月08日
    浏览(37)
  • rknn_toolkit以及rknpu环境搭建-rv1126

    rknn_toolkit安装------------------------------------------------------------------------------- 环境要求:ubutu18.04 建议使用docker镜像 安装docker 参考https://zhuanlan.zhihu.com/p/143156163 镜像地址 百度企业网盘-企业云盘-企业云存储解决方案-同步云盘 rknn_toolkit目录结构 docker load --input rknn-toolkit-1.7. 3 -d

    2024年02月10日
    浏览(43)
  • rv1126/1109平台下的lt8912显示驱动的调试

    使用的瑞芯微的rv1109的平台,显示接口为MIPI,需要外接LVDS的显示屏,同时外接HDMI显示屏显示。 硬件调试注意事项如下: 检查原理图,确保原理图正确。 检查接口的电平匹配问题,LT8912 io最大支持1.8V,注意电平转换问题(IIC,REST脚)。 检查晶振是否振。 IIC不要强上拉,否

    2024年02月08日
    浏览(39)
  • rk3588/rk356x/rv1109/rv1126 live555移植+mpp编译 rtsp拉流

    本文主要是为了记录一下rk板子的踩坑日记。 项目主要是rk3588 rtsp拉流。 1.下载MPP源码:https://github.com/rockchip-linux/mpp 2.rk3588/rk356x的板子进入Mpp源码目录 mpp/build/linux/aarch64 (rk3588/rk356x是64位板子)中,修改 arm.linux.cross.cmake 文件中的配置 修改 make-Makefiles.bash 的配置,主要改

    2023年04月19日
    浏览(44)
  • MySQL交叉编译ARM32位版本在RV1126上运行

    想要编译个ARM32位的MYSQL,找遍全网没找到满意答案,搞定后写个文章方便后面参考 系统环境与关键位置信息 下载地址: https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.bz2 提示:版本和目标系统版本一致,这里使用1.1.1f 下载地址: https://www.openssl.org/source/old/1.1

    2024年04月24日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包