Android AudioRecord介绍与Android 6.0后的改变

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhanggang740/article/details/51613983

AudioRecord介绍

在android中采集音频的api是android.media.AudioRecord类

其中构造器的几个参数就是标准的声音采集参数

以下是参数的含义解释

public AudioRecord (int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes)

先给大家分析一下这几个参数具体的含义:

AUDIOSOURCE

官方:
the recording source. See MediaRecorder.AudioSource for recording source definitions.

我的理解:
音频源:指的是从哪里采集音频。这里我们当然是从麦克风采集音频,所以此参数的值为MIC

SAMPLERATEINHZ

官方:
the sample rate expressed in Hertz. Examples of rates are (but not limited to) 44100, 22050 and 11025.

我的理解:
采样率:音频的采样频率,每秒钟能够采样的次数,采样率越高,音质越高。给出的实例是44100、22050、11025但不限于这几个参数。例如要采集低质量的音频就可以使用4000、8000等低采样率。
采样人声音一般用44100,也就是我们平时录音时采用的采样率

CHANNELCONFIG

官方:
describes the configuration of the audio channels. See CHANNEL_IN_MONO and CHANNEL_IN_STEREO

我的理解:
声道设置:android支持双声道立体声和单声道。MONO单声道,STEREO立体声

AUDIOFORMAT

官方:
the format in which the audio data is represented. See ENCODING_PCM_16BIT and ENCODING_PCM_8BIT

我的理解:
编码制式和采样大小:采集来的数据当然使用PCM编码(脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。) android支持的采样大小16bit 或者8bit。当然采样大小越大,那么信息量越多,音质也越高,现在主流的采样大小都是16bit,在低质量的语音传输的时候8bit足够了。

BUFFERSIZEINBYTES

官方:
the total size (in bytes) of the buffer where audio data is written to during the recording. New audio data can be read from this buffer in smaller chunks than this size. SeegetMinBufferSize(int, int, int) to determine the minimum required buffer size for the successful creation of an AudioRecord instance. Using values smaller than getMinBufferSize() will result in an initialization failure.

我的理解:
采集数据需要的缓冲区的大小,如果不知道最小需要的大小可以在getMinBufferSize()查看。

Android6.0发现的改变点:

1、权限改变

Android 6.0以前安装应用时就会弹出权限对话框给用户,而Android6.0以后再安装或打开应用时并不会弹出权限对话框,而是在你使用到当前功能(这里指的是录音功能时才会弹出)

2、系统不再支持8bit的编码率

上面已经说了,再低质量语音传输时8bit已经够了,再我们6.0以前使用8bit编码率对大部分的手机录音已经足矣,这里需要解释一下编码率到底是啥:

要算一个PCM音频流的码率是一件很轻松的事情,采样率值×采样大小值×声道数bps。一个采样率为44.1KHz,采样大小为16bit,双声道的PCM编码的WAV文件,它的数据速率则为 44.1K×16×2 =1411.2 Kbps。我们常说128K的MP3,对应的WAV的参数,就是这个1411.2 Kbps,这个参数也被称为数据带宽,它和ADSL中的带宽是一个概念。将码率除以8,就可以得到这个WAV的数据速率,即176.4KB/s。这表示存储一秒钟采样率为44.1KHz,采样大小为16bit,双声道的PCM编码的音频信号,需要176.4KB的空间,1分钟则约为10.34M,这对大部分用户是不可接受的。

所以有很多人为了再带宽上优化,增加采样率肯定是不可取的,所以就把16bit改成8bit,而对Andorid 6.0以前的影响并不会很大,但是在6.0以后,你再使用8bit就会出现异常了,这点一定要注意。

阅读更多

扫码向博主提问

JackWaiting

博客专家

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • Java
  • Android
  • Kotlin
  • iOS
去开通我的Chat快问
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页