android振幅
⑴ android录音 振幅是多少
有这样的一个例子,测试测试看?希望可以帮到你。 import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; import android.util.Log; public class RecordThread extends Thread { private AudioRecord ar; private int bs; private static int SAMPLE_RATE_IN_HZ = 8000; private boolean isRun = false; public RecordThread() { super(); bs = AudioRecord.getMinBufferSize(SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); ar = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bs); } public void run() { super.run(); ar.startRecording(); // 用于读取的 buffer byte[] buffer = new byte[bs]; isRun = true; while (isRun) { int r = ar.read(buffer, 0, bs); int v = 0; // 将 buffer 内容取出,进行平方和运算 for (int i = 0; i < buffer.length; i++) { // 这里没有做运算的优化,为了更加清晰的展示代码 v += buffer[i] * buffer[i]; } // 平方和除以数据总长度,得到音量大小。可以获取白噪声值,然后对实际采样进行标准化。 // 如果想利用这个数值进行操作,建议用 sendMessage 将其抛出,在 Handler 里进行处理。 Log.d("spl", String.valueOf(v / (float) r)); } ar.stop(); } public void pause() { // 在调用本线程的 Activity 的 onPause 里调用,以便 Activity 暂停时释放麦克风 isRun = false; } public void start() { // 在调用本线程的 Activity 的 onResume 里调用,以便 Activity 恢复后继续获取麦克风输入音量 if (!isRun) { super.start(); } } }
⑵ Android音视频【八】音频基础
前些文章讲了视频,我们开始音频。
开始介绍前,先看一个声音的波形图:
声音是一种压力波,当敲击键盘或者撞击物体时,它们的震动会引起空气的震动,使空气产生疏密变化,由此就形成了一种声波。
声波的三要素是频率、振幅、和波形,频率代表音阶的高低,振幅代表响度,波形代表音色。
频率 : 频率 越高,波长越短,低频声响的波长则越长,所以更容易越过障碍物,能量衰减就小,声音传播的就远。反之则会得到相反的结论。
振幅:用不同的力度敲击物体,它的声音大小不一样,它的能量也不一样,声音越大振幅越高。
波形/音色: 音色就是在同样的频率(音调)和响度(振幅)下,敲击键盘或者撞击物体是完全不同的。波的形状代表了声音的音色。
如何进行声音进行保存呢? 对声音的采样常用麦克风等设备将声音信号转换成电信号,再用模/数转换器将电信号转换成一串用1和0表示的二进制数字(数字信号)。每秒对声音采样上万次,获得上万个按照时间顺序排列的二进制数字,然后将连续变化不断的声音转化成了计算机可储存并识别的二进制数字。
为了将模拟信号数字化,需要进行:采样,量化,编码。
首先要对模拟信号进行采样,所谓采样就是在时间轴上对信号进行数字化。根据奈奎斯特定理(也称采样定理),按比声音最高频率高 2 倍以上的频率对声音进行采样,对于高质量的音频信号,其频率范围在 20Hz ~ 20kHz ,所以采样频率一般为 44.1kHz ,这样就保证采样声音达到 20kHz 也能被数字化,从而使得经过数字化处理之后,人耳听到的声音质量不会被降低。而所谓的 44.1 kHz 就是代表 1 s 会采样 44100 次。
每个采样又该如何表示呢?进行量化。量化是指在幅度轴上对信号进行数字化。量化位数越大,声音的质量越高。常用的量化位数有8位、16位和32位。量化位数指用几位二进制数来存储采样获得的数据。量化位数为8即指用8位二进制数来存储数据,如0001011
比如用 16 bit 的二进制信号来表示声音的一个采样,而 16 bit 所表示的范围是 [-32768 , 32767] , 共有 65536 个可能取值,因此最终模拟的音频信号在幅度上也分为了 65536 层。
编码,就是按照一定的格式记录采样和量化后的数字数据,比如顺序存储或压缩存储等等蠢凯。
这里涉及了很多种格式,通常所说的音频的裸数据就是 PCM (Pulse Code Molation) 数据。描述一段 PCM 数据一般需要以下几个概念:量化格式(sampleFormat)、采样率(sampleRate)、声道数 (channel) 。以 CD 的音质为例:量化格式为 16 bit (2 byte),采样率 44100 ,带哗唤声道数为 2 ,这些信息就描述了 CD 的音质。而对于声音的格式,还有一个概念用来描述它的大小,称为数据比特率,即 1s 时间内的比特数目,它用于衡量音频数据单位时间内的容量大小。而对于 CD 音质的数据,比特率为多少呢? 计算如下:
那么在一分钟里,这类 CD 音质的数据需要占据多大的存储空间呢?计算如下:
当然,如果 sampleFormat 更加精确 (比如用 4 个字节来描述一个采样),或者 sampleRate 更加密集 (比如 48kHz 的采样率), 那么所占的存储空间就会更大,同时能够描述的声音细节就会越精确。存储的这段二进制数据即表示将模拟信号转为数字信号了,以后就可以对这段二进制数据进行存储,播放,复制,或者进行其它操作。
关于这3个过程,可以看下这篇文章,图形表示采样,量化,编码的过程更容易理解。 https://www.bilibili.com/read/cv1771961/
所以说:
1)采样:在时间轴上对信号数字化;
2)量化:在幅度轴上对信号数字化;
3)编码:按一定格式记录采样和量化后的数字数据。
声道(sound channel)是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的声音源数量或者回放时相应的扬声器数量。
常见的有:单声道,立体声道芦拆,4声道,5.1声道,7.1声道等。在移动端一般是单声道,立体声道。
上面提到了 CD 音质的数据采样格式,曾计算出每分钟需要的存储空间约为 10.09 MB ,如果仅仅是将其存储在光盘或者硬盘中,可能是可以接受的,但是若要在网络中实时在线传输的话,那么这个数据量可能就太大了,所以必须对其进行压缩编码。压缩编码的基本指标之一就是压缩比,压缩比通常小于 1 。压缩算法包括有损压缩和无损压缩。无损压缩是指解压后的数据可以完全复原。在常用的压缩格式中,用的较多的是有损压缩,有损压缩是指解压后的数据不能完全恢复,会丢失一部分信息,压缩比越小,丢失的信息就比越多,信号还原后的失真就会越大。根据不同的应用场景 (包括存储设备、传输网络环境、播放设备等),可以选用不同的压缩编码算法,如 PCM 、WAV、AAC 、MP3 、Ogg 等。
WAV 编码就是在 PCM 数据格式的前面加了 44 个字节,分别用来存储 PCM 的采样率、声道数、数据格式等信息。
特点: 音质好,大量软件支持。
场景: 多媒体开发的中间文件、保存音乐和音效素材。
MP3 具有不错的压缩比,使用 LAME 编码 (MP3 编码格式的一种实现)的中高码率的 MP3 文件,听感上非常接近源 WAV 文件,当然在不同的应用场景下,应该调整合适的参数以达到最好的效果。
特点: 音质在 128 Kbit/s 以上表现还不错,压缩比比较高,大量软件和硬件都支持,兼容性好。
场景: 高比特率下对兼容性有要求的音乐欣赏。
AAC 是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如 PS 、SBR) 等,衍生出了 LC-AAC 、HE-AAC 、HE-AAC v2 三种主要的编码格式。LC-AAC 是比较传统的 AAC ,相对而言,其主要应用于中高码率场景的编码 (>=80Kbit/s) ; HE-AAC 相当于 AAC + SBR 主要应用于中低码率的编码 (<= 80Kbit/s); 而新推出的 HE-AAC v2 相当于 AAC + SBR + PS 主要用于低码率场景的编码 (<= 48Kbit/s) 。事实上大部分编码器都设置为 <= 48Kbit/s 自动启用 PS 技术,而 > 48Kbit/s 则不加 PS ,相当于普通的 HE-AAC。
特点: 在小于 128Kbit/s 的码率下表现优异,并且多用于视频中的音频编码。
场景: 128 Kbit/s 以下的音频编码,多用于视频中音频轨的编码。
Ogg 是一种非常有潜力的编码,在各种码率下都有比较优秀的表现,尤其是在中低码率场景下。Ogg 除了音质好之外,还是完全免费的,这为 Ogg 获得更多的支持打好了基础,Ogg 有着非常出色的算法,可以用更小的码率达到更好的音质,128 Kbit/s 的 Ogg 比 192kbit/s 甚至更高码率的 MP3 还要出色。但是目前因为还没有媒体服务软件的支持,因此基于 Ogg 的数字广播还无法实现。Ogg 目前受支持的情况还不够好,无论是软件上的还是硬件上的支持,都无法和 MP3 相提并论。
特点: 可以用比 MP3 更小的码率实现比 MP3 更好的音质,高中低码率下均有良好的表现,兼容性不够好,流媒体特性不支持。
场景: 语言聊天的音频消息场景。
压缩编码的原理实际上就是压缩调冗余信号,冗余信号是指哪些不能被人感知到的信号,包含人耳听觉范围之外的音频信号以及被屏蔽掉的音频信号等,这些冗余信息进行编码处理。
一般在音视频通话,直播中,短视频,以及大部分的视频都是用aac编码。
本篇主要是介绍了音频的一些基础知识和概念,对于后续学习音频的编解码有帮助,而不会一脸懵。
备注
⑶ Android音频采集
最近项目中需要实现手机采集声音频率实现设备律动的效果,整理了下Android与声音相关的知识。
根据声音振幅、频率获取颜色值,通过蓝牙mesh发送指令给灯改变其颜色值。
Android声音采集相关Api
快速傅里叶变换公式
Mesh网发送rgb值相关指令
人主观感觉声音的大小(音量),振幅与人离声源的距离决定,振幅越大,离声源的距离越小,响度越大。
LP= 20×lgP/P0
LP:声压级(db)
P:声压(Pa)
P0:基准声压:2*10-5Pa,该值是对800HZ声音人耳刚能听到的最低声压。
声音的高低,由频率决定,频率谨辩越高,音调越高。
频率是每秒经吵洞过一给定点的声波数量,单位赫兹(Hz)
人耳能听到20~20kHz的声音。
音品,波形决定声音的音色。
MediaRecorder:基于文件录音,已集成录音、编码、压缩
把模拟信号数字化的过程
采样频率越高,红色间隔越密集,记录音频所用数据量越大,音频质量越高。
采样定理(奈奎斯特理论):当采样频率大于信号中最高频率的2倍时,采样后的数字信号完整地保留原始信号中的信息。人耳能听到20~20kHz的声音,为了保证声音不失真,采样频率应在40kHz以上。
目前44100Hz是唯一可以保证兼容所有Android手机的采样率。
指将模拟信号分成几个等级,量化精度越高,声音质量越好,单位Bit。
CD标准量化精度16Bit,DVD标准量化精度24Bit。
16Bit可以保证兼容所有Android手机。
音频采集、播放可以叠加,可以同时从多个音频源采集声音,例如:单声道/双声道。
即采样时间,例如20ms一帧代表20ms为单位的数据量为一帧音频。
一帧音频帧大小 = 采样率 x 位宽 x 采样时间 x 通道数
例:采样率8000,位宽8,通道2,采样间隔20ms
(8000 * 8/8 *2)/ (1000/20 ) = 320Byte //1字节 = 8 bits
对audioData进行快速傅里叶变化,时域->频域的变化,可以将信号的频谱提取出来。
傅立叶变换就是多个祥碰缺正余弦波叠加可以用来近似任何一个原始的周期函数,它实质是是频域函数和时域函数的转换。
Visualizer:检索当前正在播放的音频,对其进行编码
以下基于AudioRecord采集的音频数据后进行快速傅里叶变换得到频率值
⑷ adb shell am和pm的区别
AM,表示上午;PM,表示下午。 AM(拉丁ante meridiem的缩写)指的是从零晨到上午时段,PM(拉丁ante meridiem)意为“中午之前”。是指下午13到0点之间。
⑸ Android如何判断一个人是在开车还是走路
手机上很多传感器都可以作为移动的参考。
陀螺仪+ 重力仪(也有叫六轴传感器)
gps 或者 agps
磁场仪到时很少用,不过也有他的道理,只是不稳定因素比较多。(很少用)
现在市面判断是不是开车的多数是GPS + AGPS
判断是否跑步的是 六轴传感器 + AGPS + GPS
具体做法也是计算移动速度和运动振幅。