自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jackzhouyu的专栏

Linux学习

  • 博客(235)
  • 资源 (12)
  • 问答 (1)
  • 收藏
  • 关注

原创 English Study

幽默、滑稽、讽刺等特点的动画。

2024-12-13 14:04:46 248

原创 ALSA总结

如上图,每个模块都有自己的driver,DMA是platform_driver,cpu和codec则是dai_driver;每个模块将自己注册给ACore,Acore就有了调用各个模块的能力;比如.set_clk设置时钟,.set_fmt设置数字接口的格式,是I2S、Left_J还是DSP A等等。I2S、TDM、slot_num和slot_width,要理解这些参数如何设置,还有时钟信号MCLK、BCLK、LRCLK;2)当上层启动/暂停播放音频业务,往下传递数据或截止时,会调用.trigger等等。

2024-12-09 22:13:25 507

原创 ALSA(7)---Machine组合

pcm就是平台侧的dma,dai是平台侧的cpu_dai,codec则是Codec侧模块;上述dts在内核运行中会转换为snd_soc_dai_link结构体,此结构体包含了dma、cpu_dai和codec_dai的节点,同时此link也有自己的函数集合ops,ops定义如下;

2024-12-02 16:47:57 1053 2

原创 ALSA(5)---Codec理论知识(含专业名词)

模数转换中,输出的有效功率与噪声功率的比值,值越大表示转换后声音信号越清晰,其值的计算公式如下:SNR=10∗lgPsignalPnoiseSNR = 10*lg\frac{P_{signal}}{P_{noise}}SNR=10∗lgPnoise​Psignal​​在ADC转换中接收两个信号,一个正相输入(IN+)和一个反向输入(IN-),通过正反两路信号,可以抵消共模噪声,提高信号的清晰度,其原理如下:正相输入信号:V+V_+V+​来源于信号源,如麦、传感器和传输线传来的信号,包含了有效信号和噪声信号

2024-12-02 16:06:25 860

原创 ALSA(4) --- CPU DAI实践

上图可知,从dma过来数据,会保存在DAI的一个FIFO队列中,数据是并行过来的各个通道数据,经过shift移位寄存器,再经过P2S并行转串行,再经过DAVC音量控制输出到GPIO端口音频数据接口实践。

2024-11-27 21:18:51 392

原创 ALSA(3) --- CPU DAI理论

它是一种较为通用的术语,具体实现可能遵循不同的标准(例如 I2S, TDM 等),主要应用于集成电路之间的短距离通信。DAIF:没有一个统一的物理层标准,可以使用各种不同的物理媒介,比如平衡或非平衡模拟信号线、LVDS (低压差分信号) 线等,具体取决于实际的应用场景。S/PDIF:定义了一种特定的数据格式,包括通道状态信息、用户位、辅助数据等,能够携带更多的元数据信息,如采样率、量化精度等。DAIF:数据格式可以根据不同的应用场景和协议有所变化,如I2S、TDM等,这些格式主要用于集成电路间的通信。

2024-11-27 20:19:05 319

原创 ALSA(2) ---- DMA实践

本篇文章主要是学习alsa高级音频框架总结而来,ALSA的Platform侧ADMA,学习总结而来,adma驱动来源于telechips产商805x芯片;

2024-11-25 22:53:22 461

转载 ALSA(1) ---- DMA理论篇

传统的数据传输都是需要CPU来实现,从一个地方拷贝到另一个地方;而DMA(Direct Memory Access)则不完全依赖CPU,DMA更新芯片SOC的一个控制器,他可以控制数据从内存中传输到另一个地方(外设、soc其它模块),CPU可以专注做自己的事情,而DMA专门传输数据也更高效;

2024-11-23 20:16:37 458

原创 卡尔曼滤波

建议没有阅读前一篇文章的同学先看一下。

2024-10-31 13:49:05 425 1

原创 AEC回声系统

远端A侧mic录音作为取为。

2024-10-31 10:44:59 478

原创 利用Matlab工具生成滤波器

利用Matlab生成IIR型滤波器,IIR型会引入输出项,重新计算出新的输出项;使用matlab的滤波器设计工具,得到系数ab,再利用推导出来的公式,带入即可;

2024-10-31 10:39:16 970

原创 峰值滤波器peaker filter

在特定的中心频率处对信号进行增益或衰减。它允许中心频率附近的频率成分得到增强或削弱,而其他频率成分保持相对不变。如上图audacity软件的图示均衡器就是采样参数均衡器来设计,参数均衡器可以由用户自行定义中心频率、增益和品质因子来实现对中心频率的增益或衰减;

2024-10-31 10:01:52 1471

原创 Provider(7) - TimestretchBufferProvider时间拉伸

可以理解为设置播放相关的参数,如设置播放速度为2,快速播放,后续就会按照这个速度去对音频数据做处理,看看AudioPlaybackRate里有什么?/*播放频率结构他*///播放速度//基音周期//拉伸模式算法//上一个参数表示的算法失效时,如何处理?mSpeed:速度好理解,大于1.0,快速播放,小于1.0减速播放,等于1.0正常播放mPitch:基音或者交音高周期,没有音频专业方面的知识可能不太懂是啥?

2024-10-31 09:37:45 566

原创 查看python源码方法

这里找到路径,在__init__.py文件里面,发现没有额;

2024-10-31 09:03:38 323

转载 I2S和PCM协议记录

slot槽的概念是针对DIN/DOUT数据引脚上的,一个slot表示一个通道的一帧数据,比如5.1通道数据,其采样Bit时24,那么一个槽slot就代表5.1通道其中一个通道的24bit的数据;看了上面的I2S介绍后,WCLK可能只能发送2通道的数据,设计之初也是这样的,但随着音频立体声的扩展,如5.1、7.1等多个通道数据扩展后,I2S也引入TDM时分复用技术,扩展到多通道数据的收发;在WCLK信号有效后,BCLK的第二个周期的上升沿数据位有效,数据位先MSB高位Bit,后低位LSB的Bit。

2024-08-14 17:59:06 1275 1

原创 Provider(6) - Reformat和ClampBufferProvider

ReformatBufferProvider就是用于转换输入和输出的数据format不一致,比如输入是float、输出是int32_t;ClampFloatBufferProvider则是将float类型的音频数据其能量限制在[-3dB,3dB]中。

2024-07-20 12:53:48 480

原创 Provider(5) - AdjustChannelsBufferProvider

adjust Channels更新是为了满足dst的channels配置,强行进行映射和填充,没有去确认dst和src的通道是不是对应,举个其实现的例子就明白了:|1|2|1|2| ===>>> |1|2|3|4|1|2|3|4| 3、4通道填充0|1|2|3|4| ==>>> |1|2|1|2|…|3|4|3|4|,多余的3、4通道拼接到数据末尾。

2024-07-20 12:53:00 532

原创 Provider(4) - RemixBufferProvider

Remix顾名思义,在音乐作品中代指重新编排歌曲,这里将对音频数据进行重新编排,也就是其数据的组合位置等,与上一边文章DownmixerBufferProvider区别的是,支持mix后的channel是多通道,而不仅限于channel_left和channel_right。

2024-07-20 12:52:01 752

原创 Provider(3)-Mix之DownmixerBufferProvider

看完后是不是觉得很简单,复杂的是如何和effect的downmix库建立连接,真正做downmix的也就是按照几个策略来做,DOWNMIX_TYPE_STRIP和DOWNMIX_TYPE_FOLD;找出音频数据源中,每个channel位置的数据,按照mix的策略进行加法即可。

2024-07-20 12:49:33 1308

原创 Provider(2)- SourceAudioBufferProvider

从Source源端出来的数据,通常是来自于应用层,但没有与应用层直接连接,通过MonoPipe相关类连接,其SourceAudioBufferProvider和MonoPipe相关类的包含关系图如下:如上图,SourceAudioBufferProvider持有MonoPipeReader,依次持有audio_utils_reader,而audio_utils_fifo是一个队列fifo的管理类,应用侧逻辑通过audio_utils_writer往fifo队列写数据,而audio_utils_reader

2024-07-13 17:55:13 905

原创 Provider(1)- 什么是AudioBufferProvider

顾名思义,Audio音频数据缓冲提供,就是提供音频数据的缓冲类,而且这个AudioBufferProvider派生出许多子类,每个子类有不同的用途,至关重要;那它在Android哪个地方使用呢?在PlaybackTread中,接收应用层传递而来的数据,那为什么要专门用这么多Provider类来处理呢?而不只是简单的转发,将应用层的数据转发到PlaybackThread就行了;No、No、No!

2024-07-13 17:52:46 1010

原创 音频Balance源码总结

顾名思义,Balance及平衡,平衡也就是涉及多方,音频左右甚至四通道,调节所有通道的音量比,使用户在空间内听到各个通道的音频大小不一,好似置身于真实环境中;博主分析的Balance源码在。

2024-06-27 19:02:30 1441

原创 音频可视化算法demo

音频可视化

2024-02-01 10:42:14 638

原创 谨慎使用android.view.SurfaceView.setVisibility方法

原因就是此方法会导致native的内存暴增,前提条件你使用surfaceview去绘制一些复杂的3D图形,绘制复杂、业务复杂的场景;setVisibility方法会调用surfaceView的updateSurface,而此方法内部就可能会分配大量的native内存。

2023-12-01 11:54:20 976

原创 如何从日志中快速定位Android系统重启?

同样的userId为u0,且为它启动了2次,明显就重启了;可以查看两个时间点的日志确定重启原因。一般来说系统重启都是zygot被干掉了,发送了9就是kill信号,杀掉孵化进程自然就重启了。

2023-10-26 10:24:53 851

原创 音频编码类型及对应的封装文件

如下表格。

2023-08-22 16:13:08 1748

原创 矩阵定理复习记录

也就是对A*y的矩阵,求偏导y,结果为A的转置矩阵;若A是一个对称矩阵,也就是。这部分的推导过程可参考。

2023-08-10 17:34:13 466

原创 AOSP构建、编译基础理解

参考这篇文章,写的比较好,我就不狗尾续貂了!

2023-05-19 14:21:51 1878 4

原创 音频焦点使用及原理

因为实际上就是通过这种流程触发的,假如我们第一个音乐App申请焦点成功后,在播放音乐music,此时它的FocusRequestor位于FocusStack栈顶,此时若有电话接入,电话App应用会申请音频焦点,电话App会位于FocusStack的栈顶,而music的app在电话App的下面,就会触发对于音乐App失去焦点的回调,当然还有其他焦点触发变化的情况,此处解释就是上述流程图的。这里主要分析上节的2和3步骤,申请焦点与焦点回调两个过程,在framework中是如何运作的?

2023-05-06 14:56:23 3481

原创 Android Audio音量设置原理流程分析

在改变音量时或插入耳机设备时,防止音量突变过大,对人耳造成伤害;如手机上music的音量设置到最大值,当我们插上耳机戴上时,如果音量仍不变保持最大输出,听力可能会受损,这时这个安全音量设备就其作用了,插入耳机时音量值变为安全音量值,保护我们的听力。以上代码关键理解点在于return这句,srcRange代表srcStream可调整的音量等级范围,假如[1, 10],同理dstRange,有可能是[10, 20],如传入的srcStream的index音量等级是5,对应到dstStream是都少呢?

2023-04-11 20:43:44 6785 1

原创 MediaPlayer框架总结

在GenericSource中,FileSource是与本地音视频文件直接连接的一个类,而MediaExtractor则是不同类型音频的解析类,如wav、mp3、midi等多达十多个的解析解析类,不同的音频文件会创建不同Extractor类,但是他们都集成MediaExtractor,拥有统一的操作API接口,而这些Extractor类使用类似链式的模式,最后都指向FileSourece,逐级解析音频,拿到文件里面的metaData元数据以及音频数据。暂用一幅图总结,待后续有时间了在细细补充;

2023-03-24 10:17:07 493

原创 记录Android Audio学习中的疑问

本文记录博主学习Audio时的问题

2023-03-08 18:40:47 1302

原创 Android Studio自带模拟器卡死问题解决

Studio自带的模拟器很方便,不用安装其他的插件即可运行,但是经常会莫名其妙的点不动、卡死,把它杀掉后、重启Android Studio还是一样的结果;

2023-02-20 09:36:46 3955 5

原创 记录一次内存调优实战

adb monkey压力测试App的拍照功能,发现内存持续升高,GC后仍缓慢持续升高,基于此,分析其背后的原理!

2023-02-07 11:13:00 353

原创 Android trace文件分析小技巧

网上有很多trace文件分析博客,但是都是解释anr发生得原因,没有指导anr文件如何着手分析?本篇文章就是讲trace文件怎么切入?

2022-10-24 11:02:10 3807 4

原创 widget使用setImageViewBitmap方法设置bug分析

在widget里面,Imageview设置bitmap时,通常可以使用更新ImageView,使用此方法容易引起以下问题:从以上错误日志分析大致意思就是,AppCompatImageView不能在RemoteViews里面使用setImageBitmap这个方法可是why?remoteViews明明提供了setImageViewBitmap,现在又说不能用method实质就是ImageView的setImageBitmap方法,klass.getName()理论上应该返回的是ImageView,因为

2022-06-22 22:11:01 1143

原创 Android Audio混音实践篇

Android Audio混音实践篇简介本篇文章主要介绍Android Audio模块的MixerThread混音业务如何实现的?建议在阅读这篇文章之间先阅读混音理论基础篇,并且在分析源码之前:头脑里构想一个大致的混音过程,多路音频AudioTrack叠加在一起进行混音,多路音频混音的是数据对象是pcm数据,它如何叠加,混音后的音量又是如何处理?首先回忆一下单路AudioTrack的音频播放流程,如下:应用层创建AudioTrack,并配置播放音频的模式mode、采样率、format以及usag

2022-04-27 21:07:07 10563 23

原创 混音理论篇

混音基础理论篇什么是声音声音是由物体震动,从而对周围空气产生的一种挤压压力,形成的声音效果。可以在脑海中想象一下水波纹的效果图。并且声音在传输时需要介质,无介质如真空是无法传递声音的,由于声音从音源出来会经过各种反射如墙面,各种反射声音经过叠加混音后传入人耳,才是我们听到的声音,所以大部分情况下我们听到的都是混音,除混音外也有可能同一音源经过墙面反射后先后到达我们的耳朵,但当两次声音间隔小于0.1s时人耳是无法感知的。声音的基本属性从上图声波示图中,知道波有频率、振幅和波形等特性,频率代表音阶

2022-03-05 22:06:22 4671 4

原创 Android Audio播放音频之数据传递

AudioTrack之数据传递简介接上一篇AudioTrack播放音频之建立通道找到了通道的唯一句柄值output,这个output实质就是在AudioFlinger创建PlaybackThread后,以key-value形式上保存(output, PlaybackThread)的key值,通过output就可以找到播放音频将从哪个PlaybackThread线程传递数据,这个线程相当于一个中间角色,应用层进程将音频数据以匿名共享内存方式传递给PlaybackThread,而PlaybackThrea

2022-02-10 20:05:26 9416 5

原创 Audio播放音频 --- 建立播放通道

Audio播放音频 — 建立播放通道简介虽然文章标题是《建立播放通道》,其实播放通道早在AudioPolicyManager解析configuration配置文件时,openoutput业务逻辑就已经把输出通道打开并建立好了,而播放音频流程就是根据音频属性Attribute来决定使用哪个输出通道output而已,但是这个流程业务相对openoutput更加复杂,也涉及更多的音频专业知识;并且播放音频不只是选择输出通道,还涉及往这个输出通道灌音频数据,传送到设备去播放;本篇文章只涉及输出通道的选择,音频

2022-01-12 20:06:36 9229 6

卡尔曼滤波效果; mix.wav是混音的音频 k.wav是滤波后的音频

音频资源

2024-10-31

audio_policy_configuration.xml

android 音频设备配置文件

2021-12-22

AMS注释源码(ActivityManagerService)

ams注释源码,startActivity相关逻辑已添加注释!快速帮助你理解AMS的处理逻辑,该资源配合我的博客Android进阶 — ActivityManagerService模块分析(https://blog.youkuaiyun.com/jackzhouyu/article/details/109021412)

2020-10-15

mv-file移动文件脚本

shell脚本,移动命令,只移动目录下的文件,不移动文件夹;例如 mv_file ./dir1 ./dir2 将dir1下面的文件拷贝后dir2下

2020-08-27

清楚android项目工程drawable/mipmap/layout/menu路径下无用的资源文件

shell脚本编写的功能,在Linux和mac终端上运行;主要用于Android studio下的Android项目,自动清除项目drawable、mimap、layout和menu下无用的资源文件

2018-10-26

动态加载demo

不好意思,没分了需要一点分

2017-01-13

EventBus秒表demo

一个简单的EventBus使用demo

2016-12-21

推流器ffmpeg资源

ffmpeg资源推流器,使用方式: 客户端:输入:视频名称,视频必须放在目录下面, 输出:里面有 在电脑端,可以用ffplay 进行播放

2016-03-07

ffmpeg 解码视频文件工程demo

请看工程内部的ReadMe文件,主要是对视频文件进行解码,解码成多个流文件,解码其中视频流位yuv流

2016-01-28

ffmpeg移植到android的基础工程

工程5个按钮: ffmpeg几个包里面的基础方法,libavcodec avformat avfilter configuration 等

2016-01-27

android屏幕录像

在android手机上实现简单的屏幕录制

2015-11-16

slf4j最新jar包下载 1.7.12

slf4j最新jar包下载 1.7.12版本,hibernate必须的工程包

2015-09-01

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

TA关注的人

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