Most visited

Recently visited

Added in API level 9

Visualizer

public class Visualizer
extends Object

java.lang.Object
   ↳ android.media.audiofx.Visualizer


Visualizer类使应用程序能够检索当前正在播放的部分音频以用于可视化目的。 它不是音频录音接口,只能返回部分和低质量的音频内容。 但是,为了保护某些音频数据(例如语音邮件)的隐私,使用可视化器需要android.permission.RECORD_AUDIO权限。

传递给构造函数的音频会话ID指示应该可视化哪些音频内容:

音频内容的两种表示形式可以被捕获:

通过分别调用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)检索。

Summary

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

Constants

ALREADY_EXISTS

Added in API level 9
int ALREADY_EXISTS

内部操作状态。 没有任何方法返回。

常量值:-2(0xfffffffe)

ERROR

Added in API level 9
int ERROR

未指定的错误。

常量值:-1(0xffffffff)

ERROR_BAD_VALUE

Added in API level 9
int ERROR_BAD_VALUE

由于参数值不正确,操作失败。

常量值:-4(0xfffffffc)

ERROR_DEAD_OBJECT

Added in API level 9
int ERROR_DEAD_OBJECT

由于死亡的远程对象导致操作失败。

常量值:-7(0xfffffff9)

ERROR_INVALID_OPERATION

Added in API level 9
int ERROR_INVALID_OPERATION

操作失败,因为它被请求的状态不正确。

常量值:-5(0xfffffffb)

ERROR_NO_INIT

Added in API level 9
int ERROR_NO_INIT

由于对象初始化不当,操作失败。

常量值:-3(0xfffffffd)

ERROR_NO_MEMORY

Added in API level 9
int ERROR_NO_MEMORY

由于内存不足,操作失败。

常量值:-6(0xfffffffa)

MEASUREMENT_MODE_NONE

Added in API level 19
int MEASUREMENT_MODE_NONE

定义不进行测量的测量模式。

常量值:0(0x00000000)

MEASUREMENT_MODE_PEAK_RMS

Added in API level 19
int MEASUREMENT_MODE_PEAK_RMS

定义以mB计算峰值和RMS值的测量模式,其中0mB是最大采样值,-9600mB是最小值。 峰值和RMS值可以用getMeasurementPeakRms(MeasurementPeakRms)检索。

常数值:1(0x00000001)

SCALING_MODE_AS_PLAYED

Added in API level 16
int SCALING_MODE_AS_PLAYED

定义播放音量将影响(缩放)捕捉数据范围的捕捉模式。 低回放音量会导致低采样和fft值,反之亦然。

常数值:1(0x00000001)

SCALING_MODE_NORMALIZED

Added in API level 16
int SCALING_MODE_NORMALIZED

根据捕获数据的内容定义应用放大的捕获模式。 这是默认的Visualizer模式,适用于音乐可视化。

常量值:0(0x00000000)

STATE_ENABLED

Added in API level 9
int STATE_ENABLED

活动的可视化对象的状态。

常量值:2(0x00000002)

STATE_INITIALIZED

Added in API level 9
int STATE_INITIALIZED

可以使用的Visualizer对象的状态。

常数值:1(0x00000001)

STATE_UNINITIALIZED

Added in API level 9
int STATE_UNINITIALIZED

创建时未成功初始化的Visualizer对象的状态

常量值:0(0x00000000)

SUCCESS

Added in API level 9
int SUCCESS

成功运作。

常量值:0(0x00000000)

Public constructors

Visualizer

Added in API level 9
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

Public methods

getCaptureSize

Added in API level 9
int getCaptureSize ()

返回当前捕获大小。

Returns
int the capture size in bytes.
Throws
IllegalStateException

getCaptureSizeRange

Added in API level 9
int[] getCaptureSizeRange ()

返回捕获大小范围。

Returns
int[] the mininum capture size is returned in first array element and the maximum in second array element.

getEnabled

Added in API level 9
boolean getEnabled ()

获取可视化器的当前激活状态。

Returns
boolean true if the visualizer is active, false otherwise

getFft

Added in API level 9
int getFft (byte[] fft)

返回当前正在播放的音频内容的频率捕获。

当启用Visualizer时,必须调用此方法。

捕获是一个8位幅度的FFT,覆盖的频率范围为0(DC)到getSamplingRate()返回的采样率的getSamplingRate() 捕获将返回等于捕获大小的一半加上一个频率点的实部和虚部。

注意:只有实际部分返回第一个点(DC)和最后一个点(采样频率/ 2)。

返回的字节数组中的布局如下所示:

  • n is the capture size returned by getCaptureSize()
  • Rfk, Ifk are respectively the real and imaginary parts of the kth frequency component
  • If Fs is the sampling frequency retuned by getSamplingRate() the kth frequency is: (k*Fs)/(n/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

getMaxCaptureRate

Added in API level 9
int getMaxCaptureRate ()

返回回调捕获方法的最大捕获速率。 这是setDataCaptureListener(OnDataCaptureListener, int, boolean, boolean)方法的rate参数的setDataCaptureListener(OnDataCaptureListener, int, boolean, boolean)

Returns
int the maximum capture rate expressed in milliHertz

getMeasurementMode

Added in API level 19
int getMeasurementMode ()

返回此音频效果执行的当前测量模式

Returns
int the mask of the measurements, MEASUREMENT_MODE_NONE (when no measurements are performed) or MEASUREMENT_MODE_PEAK_RMS.
Throws
IllegalStateException

getMeasurementPeakRms

Added in API level 19
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.

getSamplingRate

Added in API level 9
int getSamplingRate ()

返回捕获音频的采样率。

Returns
int the sampling rate in milliHertz.
Throws
IllegalStateException

getScalingMode

Added in API level 16
int getScalingMode ()

返回捕获的可视化数据上的当前缩放模式。

Returns
int the scaling mode, see SCALING_MODE_NORMALIZED and SCALING_MODE_AS_PLAYED.
Throws
IllegalStateException

getWaveForm

Added in API level 9
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

release

Added in API level 9
void release ()

释放原生的Visualizer资源。 在不使用时释放可视化引擎是一种很好的做法。

setCaptureSize

Added in API level 9
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

setDataCaptureListener

Added in API level 9
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.

setEnabled

Added in API level 9
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

setMeasurementMode

Added in API level 19
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

setScalingMode

Added in API level 16
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

Protected methods

finalize

Added in API level 9
void finalize ()

当垃圾收集确定没有更多对该对象的引用时,由对象上的垃圾回收器调用。 子类会覆盖finalize方法以处置系统资源或执行其他清理。

finalize的一般合同是,如果当Java TM虚拟机已经确定不再有任何方法可以通过任何尚未死亡的线程访问该对象,除了作为操作的结果取决于某些其他可以完成的对象或类别的最终定稿。 方法finalize可以采取任何行动,包括使这个对象再次可用于其他线程; 但是, finalize的通常目的是在对象被不可撤销地丢弃之前执行清理操作。 例如,表示输入/输出连接的对象的finalize方法可能会执行显式I / O事务,以在永久丢弃该对象之前中断连接。

Objectfinalize方法Object执行特殊操作; 它只是正常返回。 Object子类可能会覆盖此定义。

Java编程语言不保证哪个线程将为任何给定对象调用finalize方法。 但是,保证调用finalize的线程在调用finalize时不会保留任何用户可见的同步锁。 如果finalize方法引发未捕获的异常,则忽略该异常,并终止该对象的终止。

在为对象调用 finalize方法之后,在Java虚拟机再次确定不再有任何方法可以通过任何尚未死亡的线程访问此对象的方法之前,不会采取进一步的操作,包括可能的操作通过准备完成的其他对象或类别,此时该对象可能被丢弃。

对于任何给定对象,Java虚拟机永远不会多次调用 finalize方法。

finalize方法抛出的任何异常 finalize导致此对象的终止被暂停,但是会被忽略。

Hooray!