public class Visualizer
extends Object
java.lang.Object | |
↳ | android.media.audiofx.Visualizer |
Visualizer类使应用程序能够检索当前正在播放的部分音频以用于可视化目的。 它不是音频录音接口,只能返回部分和低质量的音频内容。 但是,为了保护某些音频数据(例如语音邮件)的隐私,使用可视化器需要android.permission.RECORD_AUDIO权限。
传递给构造函数的音频会话ID指示应该可视化哪些音频内容:
MediaPlayer
or AudioTrack
using this audio session is visualized 音频内容的两种表示形式可以被捕获:
getWaveForm(byte[])
methodgetFft(byte[])
method通过分别调用getCaptureSize()
和setCaptureSize(int)
方法可以检索或指定捕获的长度。 在由getCaptureSizeRange()
返回的范围内,捕获大小必须是2的getCaptureSizeRange()
。
除了上面使用getWaveForm(byte[])
和getFft(byte[])
方法描述的轮询捕获模式之外,通过使用setDataCaptureListener(OnDataCaptureListener, int, boolean, boolean)
方法安装侦听器,还可以使用回调模式。 指定侦听器捕获方法的速率以及返回的数据类型。
在捕获数据之前,必须通过调用setEnabled(boolean)
方法来启用Visualizer。 当不再需要数据采集时,应禁用展示台。
当Visualizer不再用于释放与Visualizer实例关联的本地资源时,最好调用 release()
方法。
在输出混合(音频会话0)上创建可视化器需要权限 MODIFY_AUDIO_SETTINGS
Visualizer类也可用于对正在播放的音频执行测量。 要执行的测量通过使用setMeasurementMode(int)
设置要求的测量模式的掩码来定义。 支持的值为MEASUREMENT_MODE_NONE
以取消任何测量, MEASUREMENT_MODE_PEAK_RMS
用于峰值和RMS监视。 测量可以通过getMeasurementPeakRms(MeasurementPeakRms)
检索。
Nested classes |
|
---|---|
class |
Visualizer.MeasurementPeakRms 一个类来存储峰值和RMS值。 |
interface |
Visualizer.OnDataCaptureListener OnDataCaptureListener接口定义由Visualizer调用的方法,以定期更新音频可视化捕获。 |
Constants |
|
---|---|
int |
ALREADY_EXISTS 内部操作状态。 |
int |
ERROR 未指定的错误。 |
int |
ERROR_BAD_VALUE 由于参数值不正确,操作失败。 |
int |
ERROR_DEAD_OBJECT 由于死亡的远程对象导致操作失败。 |
int |
ERROR_INVALID_OPERATION 操作失败,因为它被请求的状态不正确。 |
int |
ERROR_NO_INIT 由于对象初始化不当,操作失败。 |
int |
ERROR_NO_MEMORY 由于内存不足,操作失败。 |
int |
MEASUREMENT_MODE_NONE 定义不进行测量的测量模式。 |
int |
MEASUREMENT_MODE_PEAK_RMS 定义以mB计算峰值和RMS值的测量模式,其中0mB是最大采样值,-9600mB是最小值。 |
int |
SCALING_MODE_AS_PLAYED 定义播放音量将影响(缩放)捕捉数据范围的捕捉模式。 |
int |
SCALING_MODE_NORMALIZED 根据捕获数据的内容定义应用放大的捕获模式。 |
int |
STATE_ENABLED 活动的可视化对象的状态。 |
int |
STATE_INITIALIZED 可以使用的Visualizer对象的状态。 |
int |
STATE_UNINITIALIZED 创建时未成功初始化的Visualizer对象的状态 |
int |
SUCCESS 成功运作。 |
Public constructors |
|
---|---|
Visualizer(int audioSession) 类构造函数。 |
Public methods |
|
---|---|
int |
getCaptureSize() 返回当前捕获大小。 |
static int[] |
getCaptureSizeRange() 返回捕获大小范围。 |
boolean |
getEnabled() 获取可视化器的当前激活状态。 |
int |
getFft(byte[] fft) 返回当前正在播放的音频内容的频率捕获。 |
static int |
getMaxCaptureRate() 返回回调捕获方法的最大捕获速率。 |
int |
getMeasurementMode() 返回此音频效果执行的当前测量模式 |
int |
getMeasurementPeakRms(Visualizer.MeasurementPeakRms measurement) 检索最新的峰值和RMS测量值。 |
int |
getSamplingRate() 返回捕获音频的采样率。 |
int |
getScalingMode() 返回捕获的可视化数据上的当前缩放模式。 |
int |
getWaveForm(byte[] waveform) 返回当前正在播放的音频内容的波形捕获。 |
void |
release() 释放原生的Visualizer资源。 |
int |
setCaptureSize(int size) 设置捕获大小,即 |
int |
setDataCaptureListener(Visualizer.OnDataCaptureListener listener, int rate, boolean waveform, boolean fft) 注册OnDataCaptureListener接口并指定捕获应更新的速率以及请求的捕获类型。 |
int |
setEnabled(boolean enabled) 启用或禁用可视化引擎。 |
int |
setMeasurementMode(int mode) 设置由此音频效果执行的测量模式的组合。 |
int |
setScalingMode(int mode) 设置应用于捕获的可视化数据的缩放类型。 |
Protected methods |
|
---|---|
void |
finalize() 当垃圾收集确定没有更多对该对象的引用时,由对象上的垃圾回收器调用。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
int ERROR_INVALID_OPERATION
操作失败,因为它被请求的状态不正确。
常量值:-5(0xfffffffb)
int MEASUREMENT_MODE_NONE
定义不进行测量的测量模式。
常量值:0(0x00000000)
int MEASUREMENT_MODE_PEAK_RMS
定义以mB计算峰值和RMS值的测量模式,其中0mB是最大采样值,-9600mB是最小值。 峰值和RMS值可以用getMeasurementPeakRms(MeasurementPeakRms)
检索。
常数值:1(0x00000001)
int SCALING_MODE_AS_PLAYED
定义播放音量将影响(缩放)捕捉数据范围的捕捉模式。 低回放音量会导致低采样和fft值,反之亦然。
常数值:1(0x00000001)
int SCALING_MODE_NORMALIZED
根据捕获数据的内容定义应用放大的捕获模式。 这是默认的Visualizer模式,适用于音乐可视化。
常量值:0(0x00000000)
int STATE_INITIALIZED
可以使用的Visualizer对象的状态。
常数值:1(0x00000001)
int STATE_UNINITIALIZED
创建时未成功初始化的Visualizer对象的状态
常量值:0(0x00000000)
Visualizer (int audioSession)
类构造函数。
Parameters | |
---|---|
audioSession |
int : system wide unique audio session identifier. If audioSession is not 0, the visualizer will be attached to the MediaPlayer or AudioTrack in the same audio session. Otherwise, the Visualizer will apply to the output mix. |
Throws | |
---|---|
|
java.lang.UnsupportedOperationException |
RuntimeException |
|
UnsupportedOperationException |
int getCaptureSize ()
返回当前捕获大小。
Returns | |
---|---|
int |
the capture size in bytes. |
Throws | |
---|---|
IllegalStateException |
int[] getCaptureSizeRange ()
返回捕获大小范围。
Returns | |
---|---|
int[] |
the mininum capture size is returned in first array element and the maximum in second array element. |
boolean getEnabled ()
获取可视化器的当前激活状态。
Returns | |
---|---|
boolean |
true if the visualizer is active, false otherwise |
int getFft (byte[] fft)
返回当前正在播放的音频内容的频率捕获。
当启用Visualizer时,必须调用此方法。
捕获是一个8位幅度的FFT,覆盖的频率范围为0(DC)到getSamplingRate()
返回的采样率的getSamplingRate()
。 捕获将返回等于捕获大小的一半加上一个频率点的实部和虚部。
注意:只有实际部分返回第一个点(DC)和最后一个点(采样频率/ 2)。
返回的字节数组中的布局如下所示:
Index | 0 | 1 | 2 | 3 | 4 | 5 | ... | n - 2 | n - 1 |
Data | Rf0 | Rf(n/2) | Rf1 | If1 | Rf2 | If2 | ... | Rf(n-1)/2 | If(n-1)/2 |
Parameters | |
---|---|
fft |
byte : array of bytes where the FFT should be returned |
Returns | |
---|---|
int |
SUCCESS in case of success, ERROR_NO_MEMORY , ERROR_INVALID_OPERATION or ERROR_DEAD_OBJECT in case of failure. |
Throws | |
---|---|
IllegalStateException |
int getMaxCaptureRate ()
返回回调捕获方法的最大捕获速率。 这是setDataCaptureListener(OnDataCaptureListener, int, boolean, boolean)
方法的rate参数的setDataCaptureListener(OnDataCaptureListener, int, boolean, boolean)
。
Returns | |
---|---|
int |
the maximum capture rate expressed in milliHertz |
int getMeasurementMode ()
返回此音频效果执行的当前测量模式
Returns | |
---|---|
int |
the mask of the measurements, MEASUREMENT_MODE_NONE (when no measurements are performed) or MEASUREMENT_MODE_PEAK_RMS . |
Throws | |
---|---|
IllegalStateException |
int getMeasurementPeakRms (Visualizer.MeasurementPeakRms measurement)
检索最新的峰值和RMS测量值。 将提供的Visualizer.MeasurementPeakRms
的峰值和RMS字段设置为最新的测量值。
Parameters | |
---|---|
measurement |
Visualizer.MeasurementPeakRms : a non-null Visualizer.MeasurementPeakRms instance to store the measurement values. |
Returns | |
---|---|
int |
SUCCESS in case of success, ERROR_BAD_VALUE , ERROR_NO_MEMORY , ERROR_INVALID_OPERATION or ERROR_DEAD_OBJECT in case of failure. |
int getSamplingRate ()
返回捕获音频的采样率。
Returns | |
---|---|
int |
the sampling rate in milliHertz. |
Throws | |
---|---|
IllegalStateException |
int getScalingMode ()
返回捕获的可视化数据上的当前缩放模式。
Returns | |
---|---|
int |
the scaling mode, see SCALING_MODE_NORMALIZED and SCALING_MODE_AS_PLAYED . |
Throws | |
---|---|
IllegalStateException |
int getWaveForm (byte[] waveform)
返回当前正在播放的音频内容的波形捕获。 捕获包括多个连续的8位(无符号)单声道PCM采样,其getCaptureSize()
等于由getCaptureSize()
返回的捕获大小。
当启用Visualizer时,必须调用此方法。
Parameters | |
---|---|
waveform |
byte : array of bytes where the waveform should be returned |
Returns | |
---|---|
int |
SUCCESS in case of success, ERROR_NO_MEMORY , ERROR_INVALID_OPERATION or ERROR_DEAD_OBJECT in case of failure. |
Throws | |
---|---|
IllegalStateException |
int setCaptureSize (int size)
设置捕获大小,即由getWaveForm(byte[])
和getFft(byte[])
方法返回的字节数。 在由getCaptureSizeRange()
返回的范围内,捕获大小必须是2的getCaptureSizeRange()
。 启用Visualizer时不能调用此方法。
Parameters | |
---|---|
size |
int : requested capture size |
Returns | |
---|---|
int |
SUCCESS in case of success, ERROR_BAD_VALUE in case of failure. |
Throws | |
---|---|
IllegalStateException |
int setDataCaptureListener (Visualizer.OnDataCaptureListener listener, int rate, boolean waveform, boolean fft)
注册OnDataCaptureListener接口并指定捕获应更新的速率以及请求的捕获类型。
用空侦听器调用此方法以停止接收捕获更新。
Parameters | |
---|---|
listener |
Visualizer.OnDataCaptureListener : OnDataCaptureListener registered |
rate |
int : rate in milliHertz at which the capture should be updated |
waveform |
boolean : true if a waveform capture is requested: the onWaveFormDataCapture() method will be called on the OnDataCaptureListener interface. |
fft |
boolean : true if a frequency capture is requested: the onFftDataCapture() method will be called on the OnDataCaptureListener interface. |
Returns | |
---|---|
int |
SUCCESS in case of success, ERROR_NO_INIT or ERROR_BAD_VALUE in case of failure. |
int setEnabled (boolean enabled)
启用或禁用可视化引擎。
Parameters | |
---|---|
enabled |
boolean : requested enable state |
Returns | |
---|---|
int |
SUCCESS in case of success, ERROR_INVALID_OPERATION or ERROR_DEAD_OBJECT in case of failure. |
Throws | |
---|---|
IllegalStateException |
int setMeasurementMode (int mode)
设置由此音频效果执行的测量模式的组合。
Parameters | |
---|---|
mode |
int : a mask of the measurements to perform. The valid values are MEASUREMENT_MODE_NONE (to cancel any measurement) or MEASUREMENT_MODE_PEAK_RMS . |
Returns | |
---|---|
int |
SUCCESS in case of success, ERROR_BAD_VALUE in case of failure. |
Throws | |
---|---|
IllegalStateException |
int setScalingMode (int mode)
设置应用于捕获的可视化数据的缩放类型。
Parameters | |
---|---|
mode |
int : see SCALING_MODE_NORMALIZED and SCALING_MODE_AS_PLAYED |
Returns | |
---|---|
int |
SUCCESS in case of success, ERROR_BAD_VALUE in case of failure. |
Throws | |
---|---|
IllegalStateException |
void finalize ()
当垃圾收集确定没有更多对该对象的引用时,由对象上的垃圾回收器调用。 子类会覆盖finalize
方法以处置系统资源或执行其他清理。
finalize
的一般合同是,如果当Java TM虚拟机已经确定不再有任何方法可以通过任何尚未死亡的线程访问该对象,除了作为操作的结果取决于某些其他可以完成的对象或类别的最终定稿。 方法finalize
可以采取任何行动,包括使这个对象再次可用于其他线程; 但是, finalize
的通常目的是在对象被不可撤销地丢弃之前执行清理操作。 例如,表示输入/输出连接的对象的finalize方法可能会执行显式I / O事务,以在永久丢弃该对象之前中断连接。
类Object
的finalize
方法Object
执行特殊操作; 它只是正常返回。 Object
子类可能会覆盖此定义。
Java编程语言不保证哪个线程将为任何给定对象调用finalize
方法。 但是,保证调用finalize的线程在调用finalize时不会保留任何用户可见的同步锁。 如果finalize方法引发未捕获的异常,则忽略该异常,并终止该对象的终止。
在为对象调用 finalize
方法之后,在Java虚拟机再次确定不再有任何方法可以通过任何尚未死亡的线程访问此对象的方法之前,不会采取进一步的操作,包括可能的操作通过准备完成的其他对象或类别,此时该对象可能被丢弃。
对于任何给定对象,Java虚拟机永远不会多次调用 finalize
方法。
finalize
方法抛出的任何异常 finalize
导致此对象的终止被暂停,但是会被忽略。