上篇(基于sinc的音频重采样(一):原理)讲了基于sinc方法的重采样原理,并给出了数学表达式,如下:                  (1) 本文讲如何基于这个数学表达式来做软件实现.软件实现的细节很多,这里主要讲核心部分.函数srcUD()和filterUD()就是实现的主要函数(这两个函数是在源码基础上作了一定的改动,核心思想没变).srcUD()是实现一帧中点的重采样,一个点一个点的做.filterUD()被srcUD()调用.数学表达式就体现在函数filterUD()里.粗看肯定会…
我在前面的文章<音频开源代码中重采样算法的评估与选择>中说过sinc方法是较好的音频重采样方法,缺点是运算量大.https://ccrma.stanford.edu/~jos/resample/ 给出了sinc方法的原理文档和软件实现.以前是使用这个算法,没太关注原理和实现细节.去年(2020年)由于项目的需要和组内同学把这个算法的原理和软件实现细节搞清楚了.本文先讲讲sinc方法的原理,后面文章会讲讲软件实现的细节. 1,sinc函数和信号的采样与重建 在数字信号处理中,sinc函数定义为:…
前面有提到音频采样算法: WebRTC 音频采样算法 附完整C++示例代码 简洁明了的插值音频重采样算法例子 (附完整C代码) 近段时间有不少朋友给我写过邮件,说了一些他们使用的情况和问题. 坦白讲,我精力有限,但一般都会抽空回复一下. 大多数情况,阅读一下代码就能解决的问题, 也是要尝试一下的. 没准,你就解决了呢? WebRtc的采样算法本身就考虑到它的自身应用场景, 所以它会有一些局限性,例如不支持任意采样率等等. 而简洁插值的这个算法, 我个人也一直在使用,因为简洁明了,简单粗暴. 我自…
一.包含头文件和库文件 修改CMakeLists # swresample add_library(swresample SHARED IMPORTED) set_target_properties(swresample PROPERTIES IMPORTED_LOCATION ${FF}/libswresample.so) 更新target_link_libraries target_link_libraries( # Specifies the target library. native-…
近一段时间在图像算法以及音频算法之间来回游走. 经常有一些需求,需要将音频进行采样转码处理. 现有的知名开源库,诸如: webrtc , sox等, 代码阅读起来实在闹心. 而音频重采样其实也就是插值算法. 与图像方面的插值算法没有太大的区别. 基于双线性插值的思路. 博主简单实现一个简洁的重采样算法, 用在对采样音质要求不高的情况下,也是够用了. 编解码库采用dr_wav https://github.com/mackron/dr_libs/blob/master/dr_wav.h 近期有点强…
前几天无意间看到一个项目rnnoise. 项目地址: https://github.com/xiph/rnnoise 基于RNN的音频降噪算法. 采用的是 GRU/LSTM 模型. 阅读下训练代码,可惜的是作者没有提供数据训练集. 不过基本可以断定他采用的数据集里,肯定有urbansound8k. urbansound8k 数据集地址: https://serv.cusp.nyu.edu/projects/urbansounddataset/urbansound8k.html 也可以考虑采用用作…
由于产品需要对视频做一系列的解析操作,利用FFmpeg命令来完成视频的音频提取.第一帧提取作为封面图片.音频重采样.字幕压缩等功能: 前一篇文章已经记录了FFmpeg在JAVA中的使用-音频提取&字幕压缩 ,就不再重复说明,今天简单介绍下如何实现第一帧提取.重采样,然后再分享下Process.waitFor()引发的阻塞问题. 一.首先,分享两个命令: 视频第一帧提取:ffmpeg -i [videofile]  -vframes 1 -q:v 2 -f image2  [imagefile]…
一.视频像素和尺寸转换函数 1.sws_getContext : 像素格式上下文  --------------->多副图像(多路视频)进行转换同时显示 2.struct SwsContext  *sws_getCachedContext(struct SwsContext *context , int srcW , int srcH enum  AVPixelFormat srcFormat , int dstW , int dstH , enum AVPixelFormat dstForma…
http://blog.csdn.net/leixiaohua1020/article/details/25430449 本文介绍一个最简单的基于FFMPEG的音频编码器.该编码器实现了PCM音频采样数据编码为AAC的压缩编码数据.编码器代码十分简单,但是每一行代码都很重要.通过看本编码器的源代码,可以了解FFMPEG音频编码的流程. 本程序使用最新版的类库(编译时间为2014.5.6),开发平台为VC2010.所有的配置都已经做好,只需要运行就可以了. 流程(2014.9.29更新) 下面附一…
Linux -- 基于zookeeper的java api(二) 写一个关于基于集群的zookeeper的自定义实现HA 基于客户端和监控器:使用监控的方法查看每个注册过的节点的状态来做出操作. Watch:监控端 package com.huhu.zookeeper; import java.util.concurrent.CountDownLatch; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.…