1. AudioFormat
定义了一些变量,这些变量在AudioTrack和AudioRecord中用到:一般以下参数 ENCODING_PCM_16BIT, ENCODING_PCM_8BIT。代表采样大小android支持的采样大小16bit 或者8bit。当然采样大小越大,那么信息量越多,音质也越高,现在主流的采样大小都是16bit,在低质量的语音传输的时候8bit足够了。
2.AudioManager
对音量和震铃模式控制,模式管理
3. AudioRecord
记录输入硬件的音频,构造时传入5个参数
1. audioSource:
音频源:指的是从哪里采集音频。
2. sampleRateInHz:
采样率:音频的采样频率,每秒钟能够采样的次数,采样率越高,音质越高。给出的实例是44100、22050、11025但不限于这几个参数。例如要采集低质量的音频就可以使用4000、8000等低采样率。 在Android手机设备中,44100kHZ是可以兼容全部手机的采样率。
3. channelConfig:
声道设置:android支持双声道立体声和单声道。MONO单声道,STEREO立体声
4. audioFormat:
编码制式和采样大小:采集来的数据当然使用PCM编码(脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。)
5. bufferSizeInBytes:
采集数据需要的缓冲区( 麦克风采集到的音频数据先放置在一个缓冲区里面,之后我们再从这个缓冲区里面读取数据,从而获取到麦克风录制的音频数据。)的大小,一般来说缓存区越小,产生的音频延迟也越小;值得注意的是,我们可以利用AudioRecord.getMinBufferSize()这个方法帮我们算出最小的缓存区大小,这个数值最好不要自己计算,毕竟不同厂商可能有不同的缓存区采集实现。
在创建AudioRecord对象时,AudioRecord会初始化,并和音频缓冲区连接,用来缓冲新的音频数据。 根据构造时指定的缓冲区大小,来决定AudioRecord能够记录多长的数据
4. AudioTrack
播放音频以及获取音频相关信息,构造时传入6个参数
1. streamtype:
使用哪种音频管理策略
- 音频流的音量管理,调节一个类型的音频流音量,不会影响到其他类型的音频流
- 根据流类型选择合适的输出设备;比如插着有线耳机期间,音乐声(STREAM_MUSIC)只会输出到有线耳机,而铃声(STREAM_RING)会同时输出到有线耳机和外放
2. sampleRateInHz
与录音时一致
3. channelConfig
与录音时一致
4. audioFormat
与录音时一致
5. bufferSizeInBytes
与录音时一致
6. mode:
1.static静态模式:言下之意就是数据一次性交付给接收方。好处是简单高效,只需要进行一次操作就完成了数据的传递;缺点当然也很明显,对于数据量较大的音频回放,显然它是无法胜任的,因而通常只用于播放铃声、系统提醒等对内存小的操作
2.streaming流模式:和网络上播放视频是类似的,即数据是按照一定规律不断地传递给接收方的。理论上它可用于任何音频播放的场景,不过我们一般在以下情况下采用:
Ø 音频文件过大
Ø 音频属性要求高,比如采样率高、深度大的数据
Ø 音频数据是实时产生的,这种情况就只能用流模式了
attachAuxEffect(int effectId)
声音附加混响特效(混响即通过声音在不同路径传播下造成的反射叠加产生的声音特效)
getplaybackHeadPosition
返回当前播放位置
getplaybackRate
对应setplaybackRate设置播放速率
4. Visualzer
需要传入特定的会话id,id来自MediaPlayer或AudioTrack.
Two types of representation of audio content can be captured:
- Waveform data: consecutive 8-bit (unsigned) mono samples by using the getWaveForm(byte[]) method
- Frequency data: 8-bit magnitude FFT by using the getFft(byte[]) method
The Visualizer class can also be used to perform measurements on the audio being played back. The measurements to perform are defined by setting a mask of the requested measurement modes with setMeasurementMode(int). Supported values are MEASUREMENT_MODE_NONE to cancel any measurement, and MEASUREMENT_MODE_PEAK_RMS for peak and RMS monitoring. Measurements can be retrieved through getMeasurementPeakRms(MeasurementPeakRms).
可以捕获两种类型:波形,FFT,可检索最新的峰值和RMS测量值
getcaptureSizeRange()
返回一个采样值的范围数组,0为最小值128,1为最大值1024
getMaxCaptureRate
频率最大值用于setDataCaptureListener中的rate参数(最大50毫秒)
getScalingMode
SCALING_MODE_AS_PLAYED
定义捕获模式,在此模式下,回放音量将影响(缩放)捕获数据的范围。低播放量将导致低样本值和fft值,反之亦然。
SCALING_MODE_NORMALIZED
默认模式