自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 Linux多路复用机制原理分析--select/poll

Linux访问设备的IO模型主要有五种,分别是非阻塞IO模型、阻塞IO模型、IO多路复用模型、信号驱动模型以及异步IO模型。本文主要分析IO多路复用模型,Linux下的IO多路复用模型主要有select/poll/epoll等机制实现。IO多路复用模型可以实现以非阻塞的方式监听多个设备,具体的模型如下图所示图中可以看出,select/poll可以监听多个设备,只要任意一个设备满足条件,select/poll都会返回具体的响应,否则睡眠等待。

2023-05-13 19:45:01 608

原创 Linux监听器 -- inotify

inotify作为Linux系统的一个监听器,能够监听文件或者目录的变化。

2023-05-10 23:15:17 1116

原创 基于三次样条插值(自然边界)实现的上采样

【代码】基于三次样条插值(自然边界)实现的上采样。

2023-04-01 21:54:26 272

原创 SOX源码分析 -- gain.c

处理音频往往有时候会需要对音频文件做放大处理,本文主要基于SOX的gain.c进行分析,并将该功能进行提取。用来存储样本的最值,需要根据该值做增益系数选择;从上述分析中可以得出,主要根据输入的放大倍数进行转换,并与样本数据进行相乘即可。2.1 解析配置参数。2.3 样本数据处理。2.3 输出处理数据。

2023-03-11 18:25:13 261

原创 tinymp3解码

在实际应用中由于受传输带宽等外界因素的影响,数据在传输过程中往往会被拆分成多组数据进行发送,MP3数据可能会被拆分传输,理想情况下,用户希望是按MP3数据帧的整数倍进行传输的,但往往并不能如愿以偿。MP3数据是以帧作为一个解码单元,所以需对实际数据进行解析拆解拼接成完整的数据帧进行解码。该MP3帧长为72,分别采取不同长度的输入进行解码,解码结果均一致。作为解码库进行实现。

2023-03-11 14:50:03 352

原创 【FreeRTOS】任务通知

任务通知是 FreeRTOS 从 V8.2.0版本开始推出的新功能,每个任务都有一个32位的通知值,在大多数情况下,任务通知可以替代二值信号量、计数信号量、时间组、长度为1 的队列。任务通知比信号量等IPC通信方式解决阻塞的任务要快45%,并且更加节省RAM内存空间,任务通知无需创建队列。

2023-02-06 15:35:50 768

原创 常用的开源MP3编解码器

由于工作需要,需对MP3进行编解码处理,研究了几款开源的MP3编解码器。相对于FFMPEG来说,这几款都属于轻量级的编解码器,更容易移植。

2022-11-13 11:17:02 5803

原创 ESP-IDF工程自定义组件

由于工作需求,需在原有的项目上添加ESP-ADF音频框架的软解码功能。确保了环境参数配置正确,但是目录结构如图1所示的在mian目录下添加模块文件可以编译成功,为了便于管理,需将模块以组件的形式进行添加,目录结构如图2,在components下添加模块文件却编译失败,失败提示如图3。根据错误提示,因为没有找到对应的头文件,对esp-idf的项目工程进行分析。

2022-10-28 15:02:01 967

原创 ESP-ADF音频框架 -- stream

由于工作需要,需要ESP32对MP3流进行软解码,为了通过文件进行实时流模拟,研究了ESP-ADF中的流类型。相关流类型及支持的操作如下表所示。(读类型)(写类型)

2022-10-26 16:13:39 1738

原创 esp-adf音频框架

ESP-ADF 在 ESP-IDF(乐鑫物联网开发框架,广泛运用于 ESP32 的 SDK)的基础上开发而成的一套音频开发框架。

2022-10-19 10:48:22 1236 2

原创 strace应用

后台运行某一程序时,出现图1现象,进程被挂起,无法响应控制指令。使用ps指令查看,如图2所示。该进程并没有退出或者僵死,状态变为T。

2022-08-18 08:42:19 109

原创 ALSA音频架构 -- aplay播放流程分析

上文已经获取了aplay中对应的播放API,本文将具体分析该API在哪里调用。

2022-08-07 19:19:06 3445

原创 ALSA音频架构 -- snd_pcm_open函数分析

alsa-lib主要是给抽象出来的一套ALSA应用程序的用户空间库,供具体的应用程序调用。alsa-utils 主要是相关的操作APP,可以充当官方demo,供开发人员参考。前文已经给出。本文主要详细分析snd_pcm_open。......

2022-08-07 09:35:40 5721 1

原创 ALSA音频架构

ALSA全称是Advanced Linux Sound Architecture,即Linux高级声音体系。ALSA 是Linux内核2.6后续版本中支持音频系统的标准接口程序,由ALSA库、内核驱动和相关测 试开发工具组成,更好的管理Linux中音频系统。ALSA系统主要由驱动包alsa-driver,开发包alsa-lib,设备管理工具包alsa-utils组成。ALSA声卡驱动与用户空间体系结构的交互如下图所示:ALSA软件流程如下图所示。......

2022-08-04 09:57:47 1158

原创 进程间通信--信号

信号是进程间通信唯一的异步方式,是对中断的一种软件模拟。信号的触发方式1、终端触发。如CTRL+C产生SIGINT2、硬件异常。如对无效内存操作触发SIGSEGV3、kill函数、命令触发。4、软件事件相关信号。如写一个已经关闭的管道或socket触发SIGPIPE;闹钟超时信号SIGALRM。信号的操作方式1、忽略信号:即内核将会丢弃该信号,但不会对目标进程产生任何影响。但SIGKILL和SIGSTOP信号不可以忽略,这两种信号向超级用户提供了终止或停止进程的可靠方法。2、捕捉信号。用户可

2022-05-12 22:47:08 245

原创 进程间通信--共享内存(最快的方式)

引言共享内存允许两个或两个以上的进程共享同一存储区。因为数据不需要在客户进程与服进程之间来回复制,所以共享内存是进程间通信最快的方式。共享内存的通信模型如下图共享内存仅在建立共享内存区域的时候需要内核的参与,一旦完成内存的开辟,所有访问操作可以视为对常规内存的访问,无需内核的参与。共享内存的实现共享内存的实现主要需要以下API1、创建共享内存int shmget(key_t key, size_t size, int shmflg);2、挂载共享内存void *shmat(int shm

2022-03-19 16:38:16 1020

原创 “void”相关妙用

void“void”表示”不确定类型“,不能用来对变量进行声明,一般用来对函数返回类型的限定和对函数参数限定。如void func(int, int)或者int func(void)。void *”void *“表示不确定类型的指针。可以接受任意类型的赋值和给任意类型幅值,但需要强制转换。应用示例:void *ptr = NULL;// 函数返回值强转char *ptr = malloc(10*sizeof(char));// 结构体中参数传递typedef struct _A{

2022-03-15 20:46:57 95

原创 sox源码分析:sox_create_effect()

sox_create_effect()主要是创建一个效果器结构体并初始化,该结构体通过sox_find_effect()返回的效果器句柄。该结构体具体定义如下struct sox_effect_handler_t { char const * name; /**< Effect name */ char const * usage; /**< Short explanation of parameters accepted by effect */ unsigned int f

2022-03-14 22:24:40 315

原创 中文语音合成软件Ekho(余音)的使用教程

官网http://www.eguidedog.net/cn/index.phpEkho(余音)是一个免费、开源的中文语音合成软件。支持普通话、粤语。支持Linux、Windows和Android平台。安装sudo apt-get install libsndfile1-dev libpulse-dev libncurses5-dev libmp3lame-dev libespeak-ng-dev tar xJvf ekho-xxx.tar.xzcd ekho-xxx ./configure

2022-03-14 17:03:23 12747

原创 ffmpeg常用命令(1)

获取音频参数信息ffmpeg -i 唱支山歌给党听.wma -af “volumedetect” -vn -sn -dn -f null null归一化音频能量ffmpeg -i 唱支山歌给党听.wma -af “volume=0.3dB” new.wav转码PCMffmpeg -i 唱支山歌给党听.wma -vn -ar 44100 -ac 1 -f s16le out.pcm...

2022-03-14 09:14:09 2727

原创 守护进程的简单介绍

守护进程的定义守护进程也称为精灵进程(daemon)是一种生存周期较长的特殊进程。它常常伴随系统自举时启动,在系统关闭时终止。没有控制终端,仅在后台运行,独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程的特征可以使用ps -axj命令查看相应的信息守护进程不具有控制终端,其终端名(TTY)设置为问号(?)。守护进程的实现守护进程的实现具有严格的规则1、调用umask将文件模式创建屏蔽字设置为0,确保守护进程可以创建一个可读可写的文件。2、调用fork,然后使父进程退

2022-03-13 23:10:30 3382

原创 sox源码分析:sox_find_effect()

sox_find_effect()主要是根据传入的效果器名字从effects.h文件中定义的效果器中进行遍历查找,最终目的是为了初始化结构体sox_effect_handler_t,关联一系列具体的处理接口函数。以norm为例进行说明。sox_find_effect()函数调用关系关键结构体/**Client API:Effect handler information.*/struct sox_effect_handler_t { char const * name; /**<

2022-03-10 22:19:20 446

原创 sox效果器

sox效果器的定义sox效果器的定义可以查看effects.h文件,源码如下。 EFFECT(allpass) EFFECT(band) EFFECT(bandpass) EFFECT(bandreject) EFFECT(bass) EFFECT(bend) EFFECT(biquad) EFFECT(chorus) EFFECT(channels) EFFECT(compand) EFFECT(contrast) EFFECT(dcshift) EF

2022-03-08 14:43:19 856

原创 sox源码分析:sox_init()与sox_quit()

这里写自定义目录标题函数调用关系函数源码 sox是著名的音频处理开源库,号称音频界的瑞士军刀,被广泛应用于音频处理。在调用sox的API对音频进行处理时,需调用sox_init()初始化sox库的一些全局参数。函数调用关系函数源码init_fft_cache()源码如下,主要负责全局变量的初始化。static int * lsx_fft_br;static double * lsx_fft_sc;static int fft_len = -1;#if defined HAVE_OP

2022-03-07 16:17:03 408

原创 FFmpeg结构体分析(1)--AVFrame

结构体AVFrame定义在frame.h中,主要用于描述解码后的原始音频数据或者视频数据。/** * This structure describes decoded (raw) audio or video data. * * AVFrame must be allocated using av_frame_alloc(). Note that this only * allocates the AVFrame itself, the buffers for the data must be m

2022-03-06 23:36:27 1491

原创 Windows下Qt5.12+ffmpeg5.0开发环境搭建

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2022-03-05 17:26:46 1544

原创 Windows下ffmpeg命令行环境搭建

这里写自定义目录标题下载功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入下载下载链接:https://www.gyan.dev/ffmpeg/builds/Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Mark

2022-03-05 17:05:14 1162

原创 NFS命令下载内核错误T T T T T T T *** ERROR: Cannot umount

下载内核时出错需修改服务器上的/etc/hosts文件,修改如下192.168.0.103(开发板IP) /work/nfs_root(NFS服务目录)/etc/hosts配置介绍修改完成重新加载内核即可。...

2019-05-21 07:32:12 635

原创 i2c总线驱动模型介绍

i2c总线驱动模型大致如图i2c实例化操作2.1 通过总线号申请定义一个包含名字,设备地址的i2c_board_info结构体,然后调用然后i2c_register_board_info添加至__i2c_board_list链表使用限制:必须在 i2c_register_adapter 之前 i2c_register_board_info,所以不适合执行insmod动态加载2.2 直接调...

2019-05-17 07:27:45 919

原创 S3C2440 ADC采样光敏电阻传感器驱动

通过光敏电阻传感器获取外界光线的变化,并通过ADC采样,上报,获取阻值。电路接口图如下。驱动实现#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/of.h>#include <linux/init.h>...

2019-05-09 15:00:03 2040 1

原创 warning:discards qualifiers from pointer target type解决办法

编译驱动程序的时候,编译器总是给出下图警告信息,仔细查看并对比了内核相关代码,发现是所传递的参数类型不匹配。我的定义如下static volatile struct s3c_adc_dev s3c_adc_dev;改为static struct s3c_adc_dev s3c_adc_dev;再次执行make编译,零错误零警告,完美收官。...

2019-05-09 07:47:02 7239

原创 ajax页面局部定时刷新--setInterval

由于数据更新的需求,需不断采集温度并更新,需要设定页面某一区域局部刷新,简单有效的setInterval足以满足相应的需求。具体请查看HTML DOM setInterval() 方法刷新区域 <td width="400" id="temperature"><iframe src="cgi-bin/env.cgi" height="380" width="400" al...

2019-05-07 14:45:07 5855 2

原创 S3C2440温度传感器DS18B20驱动开发及应用测试

由于需要采集环境温度,参照了网上大神的例子,仿照写了一个DS18B20的驱动。本来应该半天完成的, 由于各种小失误(Makefile,接线等问题),耗费了三天的时间。相关时序请查看如下链接 [DS18B20 Datasheet时序完全解读](http://www.cnblogs.com/wangyuezhuiyi/archive/2012/10/12/2721839.html)驱动框架...

2019-05-05 21:48:09 448

原创 S3C2440移植SQLite教程

SQLite是一款轻量级,主要面向嵌入式的数据库,耗费资源少,满足嵌入式的需求,本文以sqlite-autoconf-3280000.tar.gz为例。官网下载地址:https://www.sqlite.org/download.html上传至服务器交叉编译。配置指令./configure CC=arm-linux-gcc --host=arm-linux --prefix=$PWD/...

2019-05-02 19:34:40 221

原创 S3C2440移植嵌入式Web服务器--Boa教程

1. 前期准备上周通过wifi模块的AP功能,可以通过连接WiFi访问到目标开发板。突然想移植个嵌入式Web服务器,为后续开发物联设备做一下准备工作。说干就干,度娘了一番,最终选择了Boa。BOA 服务器是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。本文以boa-0.94.13.tar.gz为例,通...

2019-05-02 16:30:11 602

原创 S3C2440开发板移植OpenSSH教程

1. OpenSSH简介 OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端台程序和客户 端工具,用来加密远程控制和文件传输过程中的数据,并...

2019-05-01 11:18:17 1020 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除