近一段时间在图像算法以及音频算法之间来回游走。 经常有一些需求,需要将音频进行采样转码处理。 现有的知名开源库,诸如: webrtc , sox等, 代码阅读起来实在闹心。 而音频重采样其实也就是插值算法。 与图像方面的插值算法没有太大的区别。 基于双线性插值的思路。 博主简单实现一个简洁的重采样算法, 用在对采样音质要求不高的情况下,也是够用了。 编解码库采用dr_wav https://github.com/mackron/dr_libs/blob/master/dr_wav.h 近期有点强迫症,纯c
摘要: Fundebug的JavaScript错误监控插件更新至0.4.0,支持错误采样。
在当今的主流采集卡上,采样频率一般共分为22.05KHz、44.1KHz、48KHz三个等级,
实时音视频 TXLiteAVSDK_TRTC 默认通过调用 startLocalAudio: 接口实现音频的采集。如果开发者工程项目有自己的音频采集或者处理逻辑,SDK 也支持自定义音频采集方案:通过 TRTCCloud 的 enableCustomAudioCapture 接口关闭 TRTC SDK 默认的声音采集流程。然后您可以使用 sendCustomAudioData 接口向 TRTC SDK 填充您自己的声音数据。
前几天无意间看到一个项目rnnoise。 项目地址: https://github.com/xiph/rnnoise 基于RNN的音频降噪算法。 采用的是 GRU/LSTM 模型。 阅读下训练代码,可惜的是作者没有提供数据训练集。 不过基本可以断定他采用的数据集里,肯定有urbansound8k。 urbansound8k 数据集地址: https://serv.cusp.nyu.edu/projects/urbansounddataset/urbansound8k.html 也可以考虑采用用作者训练的模型
在wav 模块中 ,主要介绍一种方法:getparams(),该方法返回的结果如下:
静音检测 在WebRTC中 是采用计算GMM (Gaussian Mixture Model,高斯混合模型)进行特征提取的。
图2 复信号 的 " 幅频特性 " , 向右平移了 6 kHz , 此时就不是 偶对称 了 ;
librosa是一个音频和音乐处理的Python包,我用它来做音频的特征提取。但是在使用时,发现librosa.load将音乐文件转化为时间序列的过程中,速度实在难以忍受,cpu跑的非常高,程序好像假死的状态。 查阅官方文档发现,默认情况下,librosa会使用scipy.signal进行音频信号的重采样,这在实际使用时是很慢的。如果要获得很高的性能,官方建议安装libsamplerate和其相应的python模块scikits.samplerate。 这就是说,在Windows下进行安装的话,要先编译libsamplerate得到相应的lib和dll文件,再安装python的接口模块。 我试着在linux下进行安装,过程是很流畅的,因为使用apt-get可以方便安装libsamplerate,pip进行scikits.samplerate安装的时候,系统可以直接找到libsamplerate编译好的lib文件。
参考文章:https://blog.csdn.net/hesong1120/article/details/79043482
上节简单的写了一下音频滤波器的定义和作用。而这篇文章将主要集中精力在巴特沃斯过滤器上,在末尾将会给出:使用 Butterworth 设计的二阶 IIR 滤波器。
人们所熟知的图像方面的3A算法有: AF自动对焦(Automatic Focus) 自动对焦即调节摄像头焦距自动得到清晰的图像的过程 AE自动曝光(Automatic Exposure) 自动曝光的是为了使感光器件获得合适的曝光量 AW自动白平衡(Automatic White Balance) 白平衡的本质是使白色物体在任何光源下都显示白色 与之相对应的音频方面的3A算法是: AGC自动增益补偿(Automatic Gain Control) 自动调麦克风的收音量,使与会者收到一定的音量水平,不会因发言者
采样率:sampleRate :,每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。一般音乐CD的采样率是44100Hz,所以视频编码中的音频采样率保持在这个级别就完全足够了,通常视频转换器也将这个采样率作为默认设置。
音频降噪目前感觉大有所为,像前面分享的《基于RNN的音频降噪算法 (附完整C代码)》
AVAudioEngine录音频时偶发崩溃 报错信息大致如下: 2021-12-15 20:12:38.429028+0800 *[1659:708511] NSURLConnection finished with error – code -1002 “AudioRecorder 创建Audio缓存文件夹成功 /var/mobile/Containers/Data/Application//Library/Caches/Audio” 2021-12-15 20:13:30.762736+0800 ***[1659:708411] [avae] AVAEInternal.h:76 required condition is false: [AVAudioIONodeImpl.mm:1158:SetOutputFormat: (format.sampleRate == hwFormat.sampleRate)] 2021-12-15 20:13:30.764037+0800 ***[1659:708411] *** Terminating app due to uncaught exception ‘com.apple.coreaudio.avfaudio’, reason: ‘required condition is false: format.sampleRate == hwFormat.sampleRate’ *** First throw call stack: (0x1989799d8 0x1accffb54 0x19888850c 0x1a88e2984 0x1a898c998 0x1a8923038 0x1a892945c 0x1a89a4f4c 0x1a899f414 0x10626bad4 0x10626b130 0x10627f8bc 0x10480ecc0 0x10480e8f4 0x10621e100 0x10621b720 0x10621dcf8 0x10480e8a0 0x10480ed20 0x19b1eaf38 0x19ab80184 0x19ab804c8 0x19ab7ee00 0x19ad65350 0x19ad634e0 0x19b2274cc 0x19b202b0c 0x19b285078 0x19b289818 0x19b280afc 0x1988f9bf0 0x1988f9af0 0x1988f8e38 0x1988f33e0 0x1988f2ba0 0x1af65b598 0x19b1e42f4 0x19b1e9874 0x1ac073b54 0x104a54194 0x104a5410c 0x104a5425c 0x1985d1568) libc++abi.dylib: terminating with uncaught exception of type NSException *** Terminating app due to uncaught exception ‘com.apple.coreaudio.avfaudio’, reason: ‘required condition is false: format.sampleRate == hwFormat.sampleRate’ terminating with uncaught exception of type NSException *** Terminating app due to uncaught exception ‘com.apple.coreaudio.avfaudio’, reason: ‘required condition is false: format.sampleRate == hwFormat.sampleRate’ terminating with uncaught exception of type NSException
绝大数人都知道mp3格式编码,以及aac,amr等压缩格式编码。 而在语音通信界有一个强悍的音频格式编码opus. 经过实测,压缩比最高可以达到1:10。 100KB 压缩后 10KB 虽然是有损压缩, 但是根据实际对比试听, 几乎听不出差别。 而且还原度还比mp3高,压缩比也比mp3高。 用来压缩传输音频,绝对是一大杀器。 项目官方地址: https://opus-codec.org/ 维基上的描述: Opus是一个有损声音编码的格式,由Xiph.Org基金会开发,之后由互联网工程任务组(IETF)进行标
与《分享用于学习C++图像处理的代码示例》为姊妹篇。 为了便于学习C++音频处理并研究音频算法, 俺写了一个适合初学者学习的小小框架。 麻雀虽小五脏俱全,仅仅考虑单通道处理。 采用Decoder an
之前有大概介绍了音频采样相关的思路,详情见《简洁明了的插值音频重采样算法例子 (附完整C代码)》。 音频方面的开源项目很多很多。 最知名的莫过于谷歌开源的WebRTC, 其中的音频模块就包含有 AGC自动增益补偿(Automatic Gain Control) 自动调麦克风的收音量,使与会者收到一定的音量水平,不会因发言者与麦克风的距离改变时,声音有忽大忽小声的缺点。 ANS背景噪音抑制(Automatic Noise Suppression) 探测出背景固定频率的杂音并消除背景噪音。 AEC是回声消除器
图像方面,已经有stb_image,spot,freeimage等编解码库系列,做得特别赞。
近期偶然间看到一个开源项目minimp3 Minimalistic MP3 decoder single header library 项目地址: https://github.com/lieff/minimp3 单文件头的最小mp3解码器。 一直很想抽时间好好看上一看。 最好的学习方式就是写个实用性的工程项目。 例如实现mp3转wav格式。 嗯,这篇博文就是这么来的。 阅读了下minimp3的源码,有一两处小bug, 这个解码算法可以进一步提速优化的地方还有不少。 后面有时间,再好好庖丁解牛。 基于这个库
RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构。RIFF文件所包含的数据类型由该文件的扩展名来标识
最近的项目又需要用到录音,年前有过调研,再次翻出来使用,这里做一个记录。 HTML5提供了录音支持,因此可以方便使用HTML5来录音,来实现录音、语音识别等功能,语音开发必备。但是ES标准提供的API并不人性化,不方便使用,并且不提供保存为wav的功能,开发起来费劲啊!! github寻找轮子,发现Recorder.js,基本上可以满足需求了,良好的封装,支持导出wav,但是存在: wav采样率不可调整 recorder创建麻烦,需要自己初始化getUserMedia 无实时数据回调,不方便绘制波形 。。。
MediaCodec是Android(api>=16)提供的一个多媒体硬解编码库,能实现音视频的编解码。
AudioRecord可以用来采集PCM,本篇介绍下AudioRecord的创建流程。
2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构。
所得结果: [[ 0.00000000e+00 0.00000000e+00] [ 0.00000000e+00 -6.10351562e-05] [ 0.00000000e+00 0.00000000e+00] … [ 0.00000000e+00 -3.05175781e-05] [ 0.00000000e+00 -3.05175781e-05] [ 0.00000000e+00 -3.05175781e-05]] 48000
前面提及到《大话音频变声原理 附简单示例代码》与《声音变调算法PitchShift(模拟汤姆猫) 附完整C++算法实现代码》
本篇开始讲解音频编辑的具体操作,从相对简单的音频裁剪开始。要进行音频裁剪,我的方案是开启一个Service服务用于音频裁剪的耗时操作,主界面发送裁剪命令,同时注册EventBus接受裁剪的消息(当然也可以使用广播接受的方式)。因此,在本篇主要会讲解以下内容:
本文是基于PineAppRtc项目https://github.com/thfhongfeng/PineAppRtc)
之前已经介绍过iOS下使用lamemp3将PCM压缩为mp3格式,今天介绍一下Android的使用。
音频录制 相关参考 MediaCodec硬编码pcm2aac 主要分为以下几步骤:
不管在什么应用场合,只要是关于数字音频的这两个参数必然跑不了,网上的问答多为如何设置这两个参数,在何种使用场景使用哪种采样率和位深度最好,但对做数据处理的必须知道这两个值怎么设定,才能在特殊场合提高处理速度牺牲精度或是提高精度牺牲处理速度。
音视频的格式是一个有歧义的说法。我们熟知的诸如Flv、Mp4、Mov啥的都是包装格式,可以理解为一种容器,就像一个盒子。里面放到是经过编码的音视频数据,而这些音视频数据都有自己的编码格式,如AAC、H264、H265等等。 今天要展示的是从直播流中获取到的音频编码数据进行解码并使用H5的音频API进行播放的过程。
本篇开始讲解在Android平台上进行的音频编辑开发,首先需要对音频相关概念有基础的认识。所以本篇要讲解以下内容:
音频帧的概念没有视频帧那么清晰,几乎所有视频编码格式都可以简单的认为一帧就是编码后的一副图像,而音频帧会因编码格式的不同而不同,如 PCM 音频流可以直接进行播放,下面以 MPEG 音频帧格式为例介绍音频帧。
在理想情况下,低通滤波器使信号中低于指定截止频率 ωc 的所有频率分量保持不变,并拒绝高于 ωc 的所有分量。由于实现理想低通滤波器所需的脉冲响应是无限长的,因此无法设计出理想的 FIR 低通滤波器。理想脉冲响应的有限长度逼近会导致滤波器的通带 (ω<ωc) 和阻带 (ω>ωc) 中都出现波纹,并导致通带和阻带之间的过渡带宽度非零。 当用有限脉冲响应逼近时,通带/阻带波纹和过渡带宽度都是不希望出现的,且不可避免地与理想低通滤波器存在偏差。下图说明了这些偏差:
Android上使用AudioTrack可以实现播放PCM,本篇介绍下AudioTrack的创建过程。
以上就是通过libmad将mp3先解码成pcm,然后将pcm直接扔到/ dev/dsp音频设备中,但dsp音频设备属于oss架构,已经逐渐被alsa驱动取代,后续会介绍基于alsa驱动架构的mp3播放器
首先我们应该先确定一下我们到底需要解析歌曲的哪些信息?歌名?作者?呵呵,都不是,我们要解析的应该是歌曲的“信号”属性(譬如歌曲的BPM)。然而歌曲的这些属性非常繁杂,有些解析起来比较简单,有些提取起来则比较困难,出于简单考虑,我们这次的目标就定于歌曲的Onset属性上,一方面是因为Onset是歌曲的重要特征之一,通过它我们可以了解不少歌曲信息;另一方面则是由于提取Onset的方法也相对容易,算法过程不会显的艰辛苦涩。(当然的,歌曲或者说音频信号的另一些特性属性就不那么“可爱”了,譬如MFCC,解析过程就相对繁琐艰涩,对此有兴趣的朋友可以仔细看看:))
最近做一个即时通信类的项目,由于要保证pc端,iOS端和Android端的通用性,最终统一为MP3格式,一直担心MP3格式会不会很大,但是实测还是可以接受的。下面来看看具体步骤:
总体上,本程序实现了将虚假音频和视频数据编码成指定格式并写入输出文件的功能。其中,步骤 2 的主要作用是为音频和视频流创建必要的对象和参数,以便后续进行编码和写入;步骤 3 和 4 则是生成虚假数据并进行编码和写入的具体实现。
AudioContext 属于 Web Audio 中的一个 API,创建音频你可以使用
本文记录用 FFmpeg 获取视频流+音频流的信息(编码格式、分辨率、帧率、播放时长…),所用的工程基于上个博客编译成功的工程:使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c
在android中,实现录音与语音播放的功能算是比较简单的,但是作为参考,还是很有必要将语音相关的知识做一个简要的记录。
本文使用Matlab中的Signal Processing Toolbox中的designfilt函数,并根据频率响应实现如下两种滤波器:
随着智能门禁等物联网产品的普及,越来越多的开发者对音视频互动体验提出了更高的要求。目前市面上大多一对一互动都是基于WebRTC,优点不再赘述,我们这里先说说可能需要面临的问题:WebRTC的服务器部署非常复杂,可以私有部署,但是非常复杂。传输基于UDP,很难保证传输质量,由于UDP是不可靠的传输协议,在复杂的公网网络环境下,各种突发流量、偶尔的传输错误、网络抖动、超时等等都会引起丢包异常,都会在一定程度上影响音视频通信的质量,难以应对复杂的互联网环境,如跨区跨运营商、低带宽、高丢包等场景,行话说的好:从demo到实用,中间还差1万个WebRTC。
最近抖音最近又带了一波合唱的节奏,老板看到后果然又是要尽快跟进,希望隔壁公司加薪的时候他也能作出如此反应。
SDL初始化 SDL_Init(): 初始化SDL。 SDL_OpenAudio(): 打开音频播放器。 SDL_PauseAudio(): 开始播放。 SDL循环渲染数据 调用callback,将正确的数据喂入
领取专属 10元无门槛券
手把手带您无忧上云