3、音色 音色是一种抽象的东西,波形决定了声音的音色。声音因不同发声物体材料而具有不同特性,波形是把这个抽象特性直观的表现出来。典型的音色波形有方波,锯齿波,正弦波,脉冲波等。
4、采样 所谓采样,即按一定的采样频率将模拟信号变成时间轴上离散的抽样信号的过程。原则上采样频率越高,声音的质量也就越好,声音的还原也就越真实。 采样率即每秒从模拟信号中提取并组成离散信号的采样个数,用赫兹(Hz)来表示。说到采样率有一个不得不提的著名定律,即香农(Shannon)/奈奎斯特(Nyquist)采样定律,该定律表明采样频率必须大于或等于所传输的模拟信号的最高频率的2倍,才能不失真地恢复模拟信号。
5、 量化 前面采样得到的抽样信号虽然是时间轴上离散的信号,但仍然是模拟信号,其采样值在一定的取值范围内,可有无限多个值,必须采用“四舍五入”的方法把样值分级“取整”,使一定取值范围内的样值由无限多个值变为有限个值,这一过程称为量化。 6、编码 量化后的抽样信号就转化为按抽样时序排列的一串十进制数字码流,即十进制数字信号。简单高效的数据系统是二进制码系统,因此,应将十进制数字码变换成二进制编码,这种把量化的抽样信号变换成给定字长(量化位数)的二进制码流的过程称为编码。 编码方式种类非常多,其对比可见 Comparison of audio coding formats,PCM音频格式编码常见有四种:PCM(Linear PCM)、ADPCM(Adaptive differential PCM)、 A-law(A律13折线码)、μ-law(μ律15折线码),最简单的当然是下图所示的LPCM(示例为4bit),这是一种均匀量化编码,广泛用于 Audio CD, AES3, WAV, AIFF, AU, M2TS, VOB中。
模拟信号到数字信号的过程
同过上面的图可以看出,模拟信号通过pam后生成采样信号,然后通过量化生成了-127到+127之间的数据,最后通过二进制存放。
Visualizer
有了上面的基础知识,可以知道音乐可视化其实可以通过量化后的数据去生成音乐的可视化内容,google官方提供了Visualizer类来帮助实现音乐可视化,这个类主要是可以返回音乐的Waveform data和Frequency data 1、Waveform data waveform data 波形数据,就是上面图中模拟信号经过处理后的数据,google提供的是一个8bit的无符号数据。
2、Frequency data Frequency data 就是频率数据,频率数据是通过快速傅里叶转换,把时域上连续的信号(波形)强度转换成离散的频域信号(频谱)
Visualizer使用
1、获取实例
visualizer = new Visualizer(mediaPlayer.getAudioSessionId());
2、设置采样值
visualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);
通过Visualizer.getCaptureSizeRange()这一底层实现的方法来返回一个采样值的范围数组,0为最小值128,1为最大值1024!采样值都为2的n次幂!
3、设置监听器
setDataCaptureListener(OnDataCaptureListener listener, rate,iswave,isfft )
先说后面三个参数:rate采样的频率,下边通过方法Visualizer.getMaxCaptureRate()返回最大的采样频率,单位为milliHertz毫赫兹,iswave是波形信号,isfft是频域信号。 第一个参数OnDataCaptureListener接口,这里可以一个它的匿名内部类,然后它有两个回调方法:
onWaveFormDataCapture(Visualizer visualizer, byte[] waveform, int samplingRate)
和
onFftDataCapture(Visualizer visualizer, byte[] fft, int samplingRate)
这两个回调对应着上边的两个参数iswave和isfft!如果iswave为true,isfft为false则会回调onWaveFormDataCapture方法,如果iswave为false,isfft为true则会回调onFftDataCapture方法。
音乐可视化实现
代码实现
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
18165277)
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!