Most visited

Recently visited

Added in API level 3

AudioTrack

public class AudioTrack
extends Object implements AudioRouting

java.lang.Object
   ↳ android.media.AudioTrack


AudioTrack类管理和播放Java应用程序的单个音频资源。 它允许将PCM音频缓冲器流式传输到音频接收器进行播放。 这是通过“推”的数据使用的所述一个的AudioTrack对象write(byte[], int, int)write(short[], int, int) ,和write(float[], int, int, int)方法。

AudioTrack实例可以在两种模式下运行:静态或流式传输。
在Streaming模式下,应用程序使用write()方法之一将连续的数据流写入write() 当数据从Java层传输到本地层并排队等待播放时,它们会阻塞并返回。 在播放音频数据块时,流模式非常有用,例如:

The static mode should be chosen when dealing with short sounds that fit in memory and that need to be played with the smallest latency possible. The static mode will therefore be preferred for UI and game sounds that are played often, and with the smallest overhead possible.

一旦创建,AudioTrack对象将初始化其关联的音频缓冲区。 在构建过程中指定的这个缓冲区的大小决定了AudioTrack在耗尽数据之前可以播放多长时间。
对于使用静态模式的AudioTrack,此大小是可以从中播放的最大声音大小。
对于流模式,数据将以大小小于或等于总缓冲区大小的块形式写入音频接收器。 AudioTrack不是最终的,因此允许使用子类,但不建议使用这种类型的子类。

Summary

Nested classes

class AudioTrack.Builder

AudioTrack对象的生成器类。

interface AudioTrack.OnPlaybackPositionUpdateListener

当AudioTrack的回放头位置达到通知标记或增加了一定时间时,将调用回调的接口定义。

interface AudioTrack.OnRoutingChangedListener

此接口在API级别24中已被弃用。用户应改用通用型AudioRouting.OnRoutingChangedListener类。

Constants

int ERROR

表示通用操作失败。

int ERROR_BAD_VALUE

表示由于使用无效值而导致的失败。

int ERROR_DEAD_OBJECT

指示报告对象不再有效并需要重新创建的错误代码。

int ERROR_INVALID_OPERATION

表示由于不正确使用方法而导致的失败。

int MODE_STATIC

创建模式,音频数据在音频开始播放前仅从Java传输到本机层。

int MODE_STREAM

音频播放时音频数据从Java流式传输到本地层的创建模式。

int PLAYSTATE_PAUSED

表示AudioTrack状态已暂停

int PLAYSTATE_PLAYING

表示AudioTrack状态正在播放

int PLAYSTATE_STOPPED

表示AudioTrack状态已停止

int STATE_INITIALIZED

准备使用的AudioTrack的状态。

int STATE_NO_STATIC_DATA

已成功初始化的使用静态数据的AudioTrack的状态,但尚未收到该数据。

int STATE_UNINITIALIZED

创建时未成功初始化的AudioTrack的状态。

int SUCCESS

表示成功的操作。

int WRITE_BLOCKING

指示写操作将阻塞,直到所有的数据已经被写入时,写入模式被用作writeMode参数的实际值 write(byte[], int, int, int)write(short[], int, int, int)write(float[], int, int, int)write(ByteBuffer, int, int) ,和 write(ByteBuffer, int, int, long)

int WRITE_NON_BLOCKING

指示写操作将排队重放尽可能多的音频数据而不阻塞后立即返回,写模式下被用作writeMode参数的实际值 write(ByteBuffer, int, int)write(short[], int, int, int)write(float[], int, int, int)write(ByteBuffer, int, int) ,和 write(ByteBuffer, int, int, long)

Fields

protected AudioAttributes mAttributes

protected float mAuxEffectSendLevel

protected float mLeftVolume

protected float mRightVolume

Public constructors

AudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes, int mode)

类构造函数。

AudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes, int mode, int sessionId)

具有音频会话的类构造函数。

AudioTrack(AudioAttributes attributes, AudioFormat format, int bufferSizeInBytes, int mode, int sessionId)

具有 AudioAttributesAudioFormat类构造 AudioFormat

Public methods

void addOnRoutingChangedListener(AudioTrack.OnRoutingChangedListener listener, Handler handler)

此方法在API级别24中已弃用。用户应改用通用AudioRouting.OnRoutingChangedListener

void addOnRoutingChangedListener(AudioRouting.OnRoutingChangedListener listener, Handler handler)

添加 AudioRouting.OnRoutingChangedListener以接收此AudioTrack上路由更改的通知。

int attachAuxEffect(int effectId)

为音轨添加辅助效果。

void flush()

刷新当前排队播放的音频数据。

int getAudioFormat()

返回配置的音频数据编码。

int getAudioSessionId()

返回音频会话ID。

int getBufferCapacityInFrames()

以帧为 AudioTrack返回 AudioTrack缓冲区的最大大小。

int getBufferSizeInFrames()

返回应用程序写入的 AudioTrack缓冲区的有效大小。

int getChannelConfiguration()

返回配置的通道位置掩码。

int getChannelCount()

返回配置的通道数量。

AudioFormat getFormat()

返回配置的 AudioTrack格式。

static float getMaxVolume()

返回大于或等于1.0的最大增益值。

static int getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat)

返回要在 MODE_STREAM模式下创建的AudioTrack对象所需的估计最小缓冲区大小。

static float getMinVolume()

返回最小增益值,即常数0.0。

static int getNativeOutputSampleRate(int streamType)

返回指定流类型的输出采样率(以Hz为单位)。

int getNotificationMarkerPosition()

返回以帧表示的标记位置。

int getPlayState()

返回AudioTrack实例的播放状态。

int getPlaybackHeadPosition()

返回以帧为单位表示的播放头位置。

PlaybackParams getPlaybackParams()

返回当前的播放参数。

int getPlaybackRate()

以Hz为单位返回当前播放采样率。

int getPositionNotificationPeriod()

返回以帧为单位表示的通知更新周期。

AudioDeviceInfo getPreferredDevice()

返回由 setPreferredDevice(AudioDeviceInfo)指定的选定输出。

AudioDeviceInfo getRoutedDevice()

返回 AudioDeviceInfo标识此AudioTrack的当前路由。

int getSampleRate()

以Hz为单位返回配置的音频源采样率。

int getState()

返回AudioTrack实例的状态。

int getStreamType()

返回此AudioTrack配置的音频流的类型。

boolean getTimestamp(AudioTimestamp timestamp)

根据需求轮询时间戳。

int getUnderrunCount()

自AudioTrack创建以来,返回应用程序级写入缓冲区中的欠载发生次数。

void pause()

暂停播放音频数据。

void play()

开始播放音轨。

void release()

发布本机AudioTrack资源。

int reloadStaticData()

将静态缓冲区内的播放头位置设置为零,即将其回退到静态缓冲区的开始位置。

void removeOnRoutingChangedListener(AudioTrack.OnRoutingChangedListener listener)

此方法在API级别24中已弃用。用户应改为使用通用AudioRouting.OnRoutingChangedListener

void removeOnRoutingChangedListener(AudioRouting.OnRoutingChangedListener listener)

删除以前添加的 AudioRouting.OnRoutingChangedListener以接收重新路由通知。

int setAuxEffectSendLevel(float level)

将音轨的发送电平设置为所附的辅助效果 attachAuxEffect(int)

int setBufferSizeInFrames(int bufferSizeInFrames)

限制应用程序写入的 AudioTrack缓冲区的有效大小。

int setLoopPoints(int startInFrames, int endInFrames, int loopCount)

设置循环点和循环计数。

int setNotificationMarkerPosition(int markerInFrames)

设置通知标记的位置。

int setPlaybackHeadPosition(int positionInFrames)

设置静态缓冲区内的播放头位置。

void setPlaybackParams(PlaybackParams params)

设置播放参数。

void setPlaybackPositionUpdateListener(AudioTrack.OnPlaybackPositionUpdateListener listener, Handler handler)

设置AudioTrack在达到预先设置的标记时通知的听众或每个定期播放头位置更新。

void setPlaybackPositionUpdateListener(AudioTrack.OnPlaybackPositionUpdateListener listener)

设置AudioTrack在达到预先设置的标记时通知的听众或每个定期播放头位置更新。

int setPlaybackRate(int sampleRateInHz)

设置此曲目的播放采样率。

int setPositionNotificationPeriod(int periodInFrames)

设置定期通知事件的周期。

boolean setPreferredDevice(AudioDeviceInfo deviceInfo)

指定一个音频设备(通过 AudioDeviceInfo对象)来路由来自此AudioTrack的输出。

int setStereoVolume(float leftGain, float rightGain)

此方法在API级别21中已被弃用。应用程序应该使用setVolume(float) ,因为它可以更平滑地缩小到单声道,并且最多可以超出立体声的多声道内容。

int setVolume(float gain)

设置此轨道所有通道上的指定输出增益值。

void stop()

停止播放音频数据。

int write(float[] audioData, int offsetInFloats, int sizeInFloats, int writeMode)

将音频数据写入音频接收器进行播放(流式传输模式),或复制音频数据以供以后播放(静态缓冲模式)。

int write(short[] audioData, int offsetInShorts, int sizeInShorts)

将音频数据写入音频接收器进行播放(流式传输模式),或复制音频数据以供以后播放(静态缓冲模式)。

int write(byte[] audioData, int offsetInBytes, int sizeInBytes)

将音频数据写入音频接收器进行播放(流式传输模式),或复制音频数据以供以后播放(静态缓冲模式)。

int write(ByteBuffer audioData, int sizeInBytes, int writeMode)

将音频数据写入音频接收器进行播放(流式传输模式),或复制音频数据以供以后播放(静态缓冲模式)。

int write(ByteBuffer audioData, int sizeInBytes, int writeMode, long timestamp)

将音频数据写入音频接收器以在HW_AV_SYNC音轨上以流模式播放。

int write(short[] audioData, int offsetInShorts, int sizeInShorts, int writeMode)

将音频数据写入音频接收器进行播放(流式传输模式),或复制音频数据以供以后播放(静态缓冲模式)。

int write(byte[] audioData, int offsetInBytes, int sizeInBytes, int writeMode)

将音频数据写入音频接收器进行播放(流式传输模式),或复制音频数据以供以后播放(静态缓冲模式)。

Protected methods

void finalize()

当垃圾收集确定没有更多对该对象的引用时,由对象上的垃圾回收器调用。

int getNativeFrameCount()

此方法在API级别19中已弃用。请改用相同的公用方法getBufferSizeInFrames()

void setState(int state)

此方法在API级别19中已弃用。只能由子类访问,不建议用于AudioTrack。

Inherited methods

From class java.lang.Object
From interface android.media.AudioRouting

Constants

ERROR

Added in API level 3
int ERROR

表示通用操作失败。

常量值:-1(0xffffffff)

ERROR_BAD_VALUE

Added in API level 3
int ERROR_BAD_VALUE

表示由于使用无效值而导致的失败。

常量值:-2(0xfffffffe)

ERROR_DEAD_OBJECT

Added in API level 24
int ERROR_DEAD_OBJECT

指示报告对象不再有效并需要重新创建的错误代码。

常量值:-6(0xfffffffa)

ERROR_INVALID_OPERATION

Added in API level 3
int ERROR_INVALID_OPERATION

表示由于不正确使用方法而导致的失败。

常量值:-3(0xfffffffd)

MODE_STATIC

Added in API level 3
int MODE_STATIC

创建模式,音频数据在音频开始播放前仅从Java传输到本机层。

常量值:0(0x00000000)

MODE_STREAM

Added in API level 3
int MODE_STREAM

音频播放时音频数据从Java流式传输到本地层的创建模式。

常数值:1(0x00000001)

PLAYSTATE_PAUSED

Added in API level 3
int PLAYSTATE_PAUSED

表示AudioTrack状态已暂停

常量值:2(0x00000002)

PLAYSTATE_PLAYING

Added in API level 3
int PLAYSTATE_PLAYING

表示AudioTrack状态正在播放

常量值:3(0x00000003)

PLAYSTATE_STOPPED

Added in API level 3
int PLAYSTATE_STOPPED

表示AudioTrack状态已停止

常数值:1(0x00000001)

STATE_INITIALIZED

Added in API level 3
int STATE_INITIALIZED

准备使用的AudioTrack的状态。

常数值:1(0x00000001)

STATE_NO_STATIC_DATA

Added in API level 3
int STATE_NO_STATIC_DATA

已成功初始化的使用静态数据的AudioTrack的状态,但尚未收到该数据。

常量值:2(0x00000002)

STATE_UNINITIALIZED

Added in API level 3
int STATE_UNINITIALIZED

创建时未成功初始化的AudioTrack的状态。

常量值:0(0x00000000)

SUCCESS

Added in API level 3
int SUCCESS

表示成功的操作。

常量值:0(0x00000000)

WRITE_BLOCKING

Added in API level 21
int WRITE_BLOCKING

指示写操作将阻塞,直到所有的数据已经被写入时,写入模式被用作writeMode参数的实际值 write(byte[], int, int, int)write(short[], int, int, int)write(float[], int, int, int)write(ByteBuffer, int, int) ,和 write(ByteBuffer, int, int, long)

常量值:0(0x00000000)

WRITE_NON_BLOCKING

Added in API level 21
int WRITE_NON_BLOCKING

指示写操作将排队重放尽可能多的音频数据而不阻塞后立即返回,写模式下被用作writeMode参数的实际值 write(ByteBuffer, int, int)write(short[], int, int, int)write(float[], int, int, int)write(ByteBuffer, int, int) ,和 write(ByteBuffer, int, int, long)

常数值:1(0x00000001)

Fields

mAttributes

AudioAttributes mAttributes

mAuxEffectSendLevel

float mAuxEffectSendLevel

mLeftVolume

float mLeftVolume

mRightVolume

float mRightVolume

Public constructors

AudioTrack

Added in API level 3
AudioTrack (int streamType, 
                int sampleRateInHz, 
                int channelConfig, 
                int audioFormat, 
                int bufferSizeInBytes, 
                int mode)

类构造函数。

Parameters
streamType int: the type of the audio stream. See STREAM_VOICE_CALL, STREAM_SYSTEM, STREAM_RING, STREAM_MUSIC, STREAM_ALARM, and STREAM_NOTIFICATION.
sampleRateInHz int: the initial source sample rate expressed in Hz. SAMPLE_RATE_UNSPECIFIED means to use a route-dependent value which is usually the sample rate of the sink. getSampleRate() can be used to retrieve the actual sample rate chosen.
channelConfig int: describes the configuration of the audio channels. See CHANNEL_OUT_MONO and CHANNEL_OUT_STEREO
audioFormat int: the format in which the audio data is represented. See ENCODING_PCM_16BIT, ENCODING_PCM_8BIT, and ENCODING_PCM_FLOAT.
bufferSizeInBytes int: the total size (in bytes) of the internal buffer where audio data is read from for playback. This should be a nonzero multiple of the frame size in bytes.

如果轨道的创建模式为 MODE_STATIC ,则这是此实例可以播放的最大长度样本或音频片段。

如果轨道的创建模式为MODE_STREAM ,则这应该是AudioTrack满足应用程序延迟要求所需的缓冲区大小。 如果bufferSizeInBytes小于输出接收器的最小缓冲区大小,则会增加到最小缓冲区大小。 方法getBufferSizeInFrames()返回创建的缓冲区的帧中的实际大小,该大小确定写入流AudioTrack以避免欠载的最小频率。 请参阅getMinBufferSize(int, int, int)以确定流模式下AudioTrack实例的估计最小缓冲区大小。

mode int: streaming or static buffer. See MODE_STATIC and MODE_STREAM
Throws
IllegalArgumentException

AudioTrack

Added in API level 9
AudioTrack (int streamType, 
                int sampleRateInHz, 
                int channelConfig, 
                int audioFormat, 
                int bufferSizeInBytes, 
                int mode, 
                int sessionId)

具有音频会话的类构造函数。 当AudioTrack必须附加到特定的音频会话时使用此构造函数。 音频会话ID的主要用途是将音频效果与AudioTrack的特定实例相关联:如果在创建AudioEffect时提供了音频会话ID,则此效果将仅应用于同一会话中的音频轨道和媒体播放器,而不适用于到输出组合。 当没有指定会话的情况下创建AudioTrack时,它将创建自己的会话,可以通过调用getAudioSessionId()方法来检索会话。 如果提供非零会话ID,则此AudioTrack将与同一会话中的所有其他媒体播放器或音频轨道共享此会话的附加效果,否则将为此轨道创建新的会话(如果未提供任何会话)。

Parameters
streamType int: the type of the audio stream. See STREAM_VOICE_CALL, STREAM_SYSTEM, STREAM_RING, STREAM_MUSIC, STREAM_ALARM, and STREAM_NOTIFICATION.
sampleRateInHz int: the initial source sample rate expressed in Hz. SAMPLE_RATE_UNSPECIFIED means to use a route-dependent value which is usually the sample rate of the sink.
channelConfig int: describes the configuration of the audio channels. See CHANNEL_OUT_MONO and CHANNEL_OUT_STEREO
audioFormat int: the format in which the audio data is represented. See ENCODING_PCM_16BIT and ENCODING_PCM_8BIT, and ENCODING_PCM_FLOAT.
bufferSizeInBytes int: the total size (in bytes) of the internal buffer where audio data is read from for playback. This should be a nonzero multiple of the frame size in bytes.

如果曲目的创建模式为 MODE_STATIC ,这是此实例可以播放的最大长度样本或音频片段。

如果轨道的创建模式为MODE_STREAM ,则这应该是AudioTrack满足应用程序延迟要求所需的缓冲区大小。 如果bufferSizeInBytes小于输出接收器的最小缓冲区大小,则会增加到最小缓冲区大小。 方法getBufferSizeInFrames()返回创建的缓冲区的帧中的实际大小,该大小确定写入流AudioTrack以避免欠载运行的最小频率。 您可以以比这个大小更小的块将数据写入此缓冲区。 请参阅getMinBufferSize(int, int, int)以确定流模式下AudioTrack实例的估计最小缓冲区大小。

mode int: streaming or static buffer. See MODE_STATIC and MODE_STREAM
sessionId int: Id of audio session the AudioTrack must be attached to
Throws
IllegalArgumentException

AudioTrack

Added in API level 21
AudioTrack (AudioAttributes attributes, 
                AudioFormat format, 
                int bufferSizeInBytes, 
                int mode, 
                int sessionId)

具有 AudioAttributesAudioFormat类构造 AudioFormat

Parameters
attributes AudioAttributes: a non-null AudioAttributes instance.
format AudioFormat: a non-null AudioFormat instance describing the format of the data that will be played through this AudioTrack. See AudioFormat.Builder for configuring the audio format parameters such as encoding, channel mask and sample rate.
bufferSizeInBytes int: the total size (in bytes) of the internal buffer where audio data is read from for playback. This should be a nonzero multiple of the frame size in bytes.

如果轨道的创建模式为 MODE_STATIC ,则这是此实例可以播放的最大长度样本或音频片段。

如果轨道的创建模式为MODE_STREAM ,则这应该是AudioTrack满足应用程序延迟要求所需的缓冲区大小。 如果bufferSizeInBytes小于输出接收器的最小缓冲区大小,则会增加到最小缓冲区大小。 方法getBufferSizeInFrames()返回创建的缓冲区的帧中的实际大小,该大小确定写入流AudioTrack以避免欠载的最小频率。 请参阅getMinBufferSize(int, int, int)以确定流模式下AudioTrack实例的估计最小缓冲区大小。

mode int: streaming or static buffer. See MODE_STATIC and MODE_STREAM.
sessionId int: ID of audio session the AudioTrack must be attached to, or AUDIO_SESSION_ID_GENERATE if the session isn't known at construction time. See also generateAudioSessionId() to obtain a session ID before construction.
Throws
IllegalArgumentException

Public methods

addOnRoutingChangedListener

Added in API level 23
void addOnRoutingChangedListener (AudioTrack.OnRoutingChangedListener listener, 
                Handler handler)

此方法在API级别24中已弃用。
用户应改用通用AudioRouting.OnRoutingChangedListener类。

添加 AudioTrack.OnRoutingChangedListener以接收此AudioTrack上路由更改的通知。

Parameters
listener AudioTrack.OnRoutingChangedListener: The AudioTrack.OnRoutingChangedListener interface to receive notifications of rerouting events.
handler Handler: Specifies the Handler object for the thread on which to execute the callback. If null, the Handler associated with the main Looper will be used.

addOnRoutingChangedListener

Added in API level 24
void addOnRoutingChangedListener (AudioRouting.OnRoutingChangedListener listener, 
                Handler handler)

添加 AudioRouting.OnRoutingChangedListener以接收此AudioTrack上路由更改的通知。

Parameters
listener AudioRouting.OnRoutingChangedListener: The AudioRouting.OnRoutingChangedListener interface to receive notifications of rerouting events.
handler Handler: Specifies the Handler object for the thread on which to execute the callback. If null, the Handler associated with the main Looper will be used.

attachAuxEffect

Added in API level 9
int attachAuxEffect (int effectId)

为音轨添加辅助效果。 典型的辅助效果是混响效果,可以应用在任何声源上,这些声源将其一定量的能量引导至该效果。 这个数量由setAuxEffectSendLevel()定义。

创建辅助效果(例如 EnvironmentalReverb )后,请使用 getId()检索其ID,并在调用此方法将音轨附加到效果时使用它。

要从音轨中分离效果,请使用空效果ID调用此方法。

Parameters
effectId int: system wide unique id of the effect to attach
Returns
int error code or success, see SUCCESS, ERROR_INVALID_OPERATION, ERROR_BAD_VALUE

也可以看看:

flush

Added in API level 3
void flush ()

刷新当前排队播放的音频数据。 任何已经写入但尚未呈现的数据将被丢弃。 如果未停止或暂停,或者曲目的创建模式不是MODE_STREAM则禁止MODE_STREAM
请注意,虽然写入但尚未呈现的数据已被丢弃,但不能保证该数据以前使用的所有缓冲区空间都可用于后续写入。 例如,调用write(byte[], int, int)sizeInBytes小于或等于总缓冲区大小可能会返回一个短的实际传输计数。

getAudioFormat

Added in API level 3
int getAudioFormat ()

返回配置的音频数据编码。 ENCODING_PCM_8BITENCODING_PCM_16BIT ,并ENCODING_PCM_FLOAT

Returns
int

getAudioSessionId

Added in API level 9
int getAudioSessionId ()

返回音频会话ID。

Returns
int the ID of the audio session this AudioTrack belongs to.

getBufferCapacityInFrames

Added in API level 24
int getBufferCapacityInFrames ()

以帧为 AudioTrack返回 AudioTrack缓冲区的最大大小。

如果轨道的创建模式为MODE_STATIC ,则它与构造中指定的bufferSizeInBytes相等,转换为帧单位。 静态轨道的帧数不会改变。

如果轨道的创建模式为MODE_STREAM ,则它大于或等于指定的bufferSizeInBytes转换为帧单位。 对于流媒体音轨,如果目标输出接收器需要,此值可能会四舍五入为较大的值,并且如果随后将音轨路由到不同的输出接收器,则帧数可能会放大以适应。

如果 AudioTrack编码指示压缩数据,例如 ENCODING_AC3 ,则返回的帧计数为 AudioTrack缓冲区的大小(以字节为单位)。

又见 getProperty(String)关键 PROPERTY_OUTPUT_FRAMES_PER_BUFFER

Returns
int maximum size in frames of the AudioTrack buffer.
Throws
IllegalStateException if track is not initialized.

getBufferSizeInFrames

Added in API level 23
int getBufferSizeInFrames ()

返回应用程序写入的 AudioTrack缓冲区的有效大小。

这将小于或等于getBufferCapacityInFrames()的结果。 如果setBufferSizeInFrames(int)从未被调用过,它将是平等的。

如果该轨道随后被路由到不同的输出接收器,则缓冲器大小和容量可以放大以适应。

如果 AudioTrack编码指示压缩数据,例如 ENCODING_AC3 ,则返回的帧计数是 AudioTrack缓冲区的大小(以字节为单位)。

密钥 PROPERTY_OUTPUT_FRAMES_PER_BUFFERgetProperty(String)参见 PROPERTY_OUTPUT_FRAMES_PER_BUFFER

Returns
int current size in frames of the AudioTrack buffer.
Throws
IllegalStateException if track is not initialized.

getChannelConfiguration

Added in API level 3
int getChannelConfiguration ()

返回配置的通道位置掩码。

例如,参考CHANNEL_OUT_MONOCHANNEL_OUT_STEREOCHANNEL_OUT_5POINT1 如果使用通道索引掩码,则此方法可能会返回CHANNEL_INVALID 请考虑getFormat() ,以获得AudioFormat ,其中包含通道位置掩码和通道索引掩码。

Returns
int

getChannelCount

Added in API level 3
int getChannelCount ()

返回配置的通道数量。

Returns
int

getFormat

Added in API level 23
AudioFormat getFormat ()

返回配置的 AudioTrack格式。

Returns
AudioFormat an AudioFormat containing the AudioTrack parameters at the time of configuration.

getMaxVolume

Added in API level 3
float getMaxVolume ()

返回大于或等于1.0的最大增益值。 大于最大值的增益值将被钳位到最大值。

API名称中的“卷”一词是历史性的; 这实际上是一种收益。 在采样值上表示为线性乘法器,其中最大值1.0对应于0 dB的增益(样本值保持未修改)。

Returns
float the maximum value, which is greater than or equal to 1.0.

getMinBufferSize

Added in API level 3
int getMinBufferSize (int sampleRateInHz, 
                int channelConfig, 
                int audioFormat)

返回要在MODE_STREAM模式下创建的AudioTrack对象所需的估计最小缓冲区大小。 大小是一个估计,因为它既不考虑路线也不考虑汇,因为它们都不知道。 请注意,此大小不能保证在负载下顺畅播放,并且应根据预期的频率选择较高的值,在此频率下缓冲区将被重新填充额外的数据播放。 例如,如果您打算将AudioTrack的源采样率动态设置为比初始源采样率更高的值,请确保根据最高计划采样率配置缓冲区大小。

Parameters
sampleRateInHz int: the source sample rate expressed in Hz. SAMPLE_RATE_UNSPECIFIED is not permitted.
channelConfig int: describes the configuration of the audio channels. See CHANNEL_OUT_MONO and CHANNEL_OUT_STEREO
audioFormat int: the format in which the audio data is represented. See ENCODING_PCM_16BIT and ENCODING_PCM_8BIT, and ENCODING_PCM_FLOAT.
Returns
int ERROR_BAD_VALUE if an invalid parameter was passed, or ERROR if unable to query for output properties, or the minimum buffer size expressed in bytes.

getMinVolume

Added in API level 3
float getMinVolume ()

返回最小增益值,即常数0.0。 小于0.0的增益值将被钳位到0.0。

API名称中的“卷”一词是历史性的; 这实际上是一个线性增益。

Returns
float the minimum value, which is the constant 0.0.

getNativeOutputSampleRate

Added in API level 3
int getNativeOutputSampleRate (int streamType)

返回指定流类型的输出采样率(以Hz为单位)。

Parameters
streamType int
Returns
int

getNotificationMarkerPosition

Added in API level 3
int getNotificationMarkerPosition ()

返回以帧表示的标记位置。

Returns
int marker position in wrapping frame units similar to getPlaybackHeadPosition(), or zero if marker is disabled.

getPlayState

Added in API level 3
int getPlayState ()

返回AudioTrack实例的播放状态。

Returns
int

也可以看看:

getPlaybackHeadPosition

Added in API level 3
int getPlaybackHeadPosition ()

返回以帧为单位表示的播放头位置。 尽管“int”类型是带符号的32位,但值应该重新解释为无符号32位。 也就是说,0x7FFFFFFF之后的下一个位置是(int)0x80000000。 这是一个不断前进的计数器。 它会定期打包(溢出),例如大约每隔27:03:11小时:分钟:44.1 kHz秒钟一次。 它是由重置为零flush()reloadStaticData() ,并stop() 如果轨道的创建模式为MODE_STATIC ,则返回值指示自复位后播放的帧总数, 而不是缓冲区内的当前偏移量。

Returns
int

getPlaybackParams

Added in API level 23
PlaybackParams getPlaybackParams ()

返回当前的播放参数。 请参阅setPlaybackParams(PlaybackParams)来设置播放参数

Returns
PlaybackParams current PlaybackParams.
Throws
IllegalStateException if track is not initialized.

getPlaybackRate

Added in API level 3
int getPlaybackRate ()

以Hz为单位返回当前播放采样率。

Returns
int

getPositionNotificationPeriod

Added in API level 3
int getPositionNotificationPeriod ()

返回以帧为单位表示的通知更新周期。 零意味着没有位置更新通知正在传递。

Returns
int

getPreferredDevice

Added in API level 23
AudioDeviceInfo getPreferredDevice ()

返回由setPreferredDevice(AudioDeviceInfo)指定的所选输出。 请注意,这并不保证与实际用于播放的设备相对应。

Returns
AudioDeviceInfo

getRoutedDevice

Added in API level 23
AudioDeviceInfo getRoutedDevice ()

返回AudioDeviceInfo标识此AudioTrack的当前路由。 注意:只有当AudioTrack正在播放时,该查询才有效。 如果不是, getRoutedDevice()将返回null。

Returns
AudioDeviceInfo

getSampleRate

Added in API level 3
int getSampleRate ()

以Hz为单位返回配置的音频源采样率。 初始源采样率取决于构造函数参数,但如果setPlaybackRate(int) ,则源采样率可能会更改。 如果构造函数具有特定的采样率,那么初始接收采样率就是该值。 如果构造函数具有SAMPLE_RATE_UNSPECIFIED ,则初始接收器采样率是基于源[sic]的路由依赖默认值。

Returns
int

getState

Added in API level 3
int getState ()

返回AudioTrack实例的状态。 在创建AudioTrack实例以检查它是否被正确初始化之后,这很有用。 这确保了获得适当的资源。

Returns
int

也可以看看:

getStreamType

Added in API level 3
int getStreamType ()

返回此AudioTrack配置的音频流的类型。 对比较结果STREAM_VOICE_CALLSTREAM_SYSTEMSTREAM_RINGSTREAM_MUSICSTREAM_ALARMSTREAM_NOTIFICATION ,或STREAM_DTMF

Returns
int

getTimestamp

Added in API level 19
boolean getTimestamp (AudioTimestamp timestamp)

根据需求轮询时间戳。

如果您需要在初始预热期间或路由或模式更改后跟踪时间戳,则应定期请求新的时间戳,直到报告的时间戳显示帧位置正在前进,或者直到明确该时间戳不可用于此路由。

在时钟以稳定的速度前进之后,大约每10秒钟查询一次新的时间戳到每分钟一次。 更经常地调用此方法效率不高。 将此方法称为比推荐方式更频繁也是适得其反的,因为连续时间戳报告之间的短期差异是没有意义的。 如果您需要帧位置和演示时间之间的高分辨率映射,请考虑在应用程序级别基于低分辨率时间戳实现该映射。

返回位置处的音频数据可能已经被呈现,或者可能还没有被呈现,但是被承诺呈现。 不可能请求对应于特定位置的时间,或者请求对应于特定时间的(小数)位置。 如果您需要这些功能,请考虑在应用程序级别实施它们。

Parameters
timestamp AudioTimestamp: a reference to a non-null AudioTimestamp instance allocated and owned by caller.
Returns
boolean true if a timestamp is available, or false if no timestamp is available. If a timestamp if available, the AudioTimestamp instance is filled in with a position in frame units, together with the estimated time when that frame was presented or is committed to be presented. In the case that no timestamp is available, any supplied instance is left unaltered. A timestamp may be temporarily unavailable while the audio clock is stabilizing, or during and immediately after a route change. A timestamp is permanently unavailable for a given route if the route does not support timestamps. In this case, the approximate frame position can be obtained using getPlaybackHeadPosition(). However, it may be useful to continue to query for timestamps occasionally, to recover after a route change.

getUnderrunCount

Added in API level 24
int getUnderrunCount ()

自AudioTrack创建以来,返回应用程序级写入缓冲区中的欠载发生次数。 如果应用程序不能足够快地写入音频数据,就会发生欠载运行,导致缓冲区下溢并产生潜在的音频故障或弹出。

当缓冲区大小较小时,欠载较少。 通过用更大的缓冲区重新创建AudioTrack,可以消除欠载。 或者通过使用setBufferSizeInFrames(int)来动态增加缓冲区的有效大小。

Returns
int

pause

Added in API level 3
void pause ()

暂停播放音频数据。 未播放的数据不会被丢弃。 随后调用play()将播放此数据。 请参阅flush()放弃此数据。

Throws
IllegalStateException

play

Added in API level 3
void play ()

开始播放音轨。

如果跟踪的创建模式为 MODE_STATIC ,你必须叫的写入方法(一个 write(byte[], int, int)write(byte[], int, int, int)write(short[], int, int)write(short[], int, int, int)write(float[], int, int, int) ,或 write(ByteBuffer, int, int) )打前()。

如果模式为MODE_STREAM ,则可以选择在调用play()之前MODE_STREAM数据路径,最多写入bufferSizeInBytes (来自构造函数)。 如果您不先调用write(),或者调用write()但数据量不足,则该轨道将在play()处于underrun状态。 在这种情况下,只有将数据路径填充到设备特定的最低级别时,播放才会真正开始播放。 在调用stop()后恢复音频播放时,对路径填充到最低级别的要求也是如此。 同样,由于没有及时调用write()和足够的数据,在缓冲区溢出后,需要重新填充缓冲区。 为便于携带,应用程序应该通过写数据来使数据路径达到所允许的最大值,直到write()方法返回一个较短的传输计数为止。 这允许play()立即开始,并减少欠载的机会。

Throws
IllegalStateException if the track isn't properly initialized

release

Added in API level 3
void release ()

发布本机AudioTrack资源。

reloadStaticData

Added in API level 3
int reloadStaticData ()

将静态缓冲区内的播放头位置设置为零,即将其回退到静态缓冲区的开始位置。 曲目必须停止或暂停,曲目的创建模式必须为MODE_STATIC

M ,还将由getPlaybackHeadPosition()返回的值重置为零。 对于较早的API级别,重置行为未指定。

使用 setPlaybackHeadPosition(int)如果复位用零位 getPlaybackHeadPosition()是没有必要的。

Returns
int error code or success, see SUCCESS, ERROR_BAD_VALUE, ERROR_INVALID_OPERATION

removeOnRoutingChangedListener

Added in API level 23
void removeOnRoutingChangedListener (AudioTrack.OnRoutingChangedListener listener)

此方法在API级别24中已弃用。
用户应该切换到通用AudioRouting.OnRoutingChangedListener

删除以前添加的 AudioTrack.OnRoutingChangedListener以接收重新路由通知。

Parameters
listener AudioTrack.OnRoutingChangedListener: The previously added AudioTrack.OnRoutingChangedListener interface to remove.

removeOnRoutingChangedListener

Added in API level 24
void removeOnRoutingChangedListener (AudioRouting.OnRoutingChangedListener listener)

移除先前已添加的 AudioRouting.OnRoutingChangedListener以接收重新路由通知。

Parameters
listener AudioRouting.OnRoutingChangedListener: The previously added AudioRouting.OnRoutingChangedListener interface to remove.

setAuxEffectSendLevel

Added in API level 9
int setAuxEffectSendLevel (float level)

将音轨的发送电平设置为所附的辅助效果attachAuxEffect(int) 效果等级被限制在封闭区间[0.0,max],其中max是getMaxVolume()的值。 0.0的值不起作用,1.0的值为完整发送。

默认情况下,发送电平为0.0f,因此即使将效果附加到播放器上,也必须调用此方法才能应用效果。

请注意,传递的级别值是一个线性标量。 UI控件应该按对数进行缩放:音频框架应用的增益范围从-72dB到至少0dB,因此从线性UI输入x到等级的适当转换为:x == 0 - > level = 0 0 <x <= R - >等级= 10 ^(72 *(xR)/ 20 / R)

Parameters
level float: linear send level
Returns
int error code or success, see SUCCESS, ERROR_INVALID_OPERATION, ERROR

setBufferSizeInFrames

Added in API level 24
int setBufferSizeInFrames (int bufferSizeInFrames)

限制应用程序写入的 AudioTrack缓冲区的有效大小。

对此AudioTrack的写入不会超出此限制。 如果使用阻塞写入,则写入将被阻塞,直到数据符合此限制。

更改此限制会修改与此轨道的缓冲区关联的延迟时间。 较小的尺寸会降低延迟,但由于缓冲区欠载,可能会出现更多的毛刺。

使用的实际大小可能不等于此请求的大小。 它将被限制在一个有效范围内,最大值为getBufferCapacityInFrames() 由于内部原因,它也可能会稍微调整。 如果bufferSizeInFrames小于零,则返回ERROR_BAD_VALUE

此方法仅适用于PCM音频。 它不支持压缩音轨。

Parameters
bufferSizeInFrames int: requested buffer size in frames
Returns
int the actual buffer size in frames or an error code, ERROR_BAD_VALUE, ERROR_INVALID_OPERATION
Throws
IllegalStateException if track is not initialized.

setLoopPoints

Added in API level 3
int setLoopPoints (int startInFrames, 
                int endInFrames, 
                int loopCount)

设置循环点和循环计数。 循环可以是无限的。 与setPlaybackHeadPosition类似,必须停止或暂停轨迹以更改循环点,并且必须使用MODE_STATIC模式。

Parameters
startInFrames int: loop start marker expressed in frames. Zero corresponds to start of buffer. The start marker must not be greater than or equal to the buffer size in frames, or negative.
endInFrames int: loop end marker expressed in frames. The total buffer size in frames corresponds to end of buffer. The end marker must not be greater than the buffer size in frames. For looping, the end marker must not be less than or equal to the start marker, but to disable looping it is permitted for start marker, end marker, and loop count to all be 0. If any input parameters are out of range, this method returns ERROR_BAD_VALUE. If the loop period (endInFrames - startInFrames) is too small for the implementation to support, ERROR_BAD_VALUE is returned. The loop range is the interval [startInFrames, endInFrames).
As of M, the position is left unchanged, unless it is greater than or equal to the loop end marker, in which case it is forced to the loop start marker. For earlier API levels, the effect on position is unspecified.
loopCount int: the number of times the loop is looped; must be greater than or equal to -1. A value of -1 means infinite looping, and 0 disables looping. A value of positive N means to "loop" (go back) N times. For example, a value of one means to play the region two times in total.
Returns
int error code or success, see SUCCESS, ERROR_BAD_VALUE, ERROR_INVALID_OPERATION

setNotificationMarkerPosition

Added in API level 3
int setNotificationMarkerPosition (int markerInFrames)

设置通知标记的位置。 最多只能有一个标记处于活动状态。

Parameters
markerInFrames int: marker position in wrapping frame units similar to getPlaybackHeadPosition(), or zero to disable the marker. To set a marker at a position which would appear as zero due to wraparound, a workaround is to use a non-zero position near zero, such as -1 or 1.
Returns
int error code or success, see SUCCESS, ERROR_BAD_VALUE, ERROR_INVALID_OPERATION

setPlaybackHeadPosition

Added in API level 3
int setPlaybackHeadPosition (int positionInFrames)

设置静态缓冲区内的播放头位置。 轨道必须停止或暂停以更改位置,并且必须使用MODE_STATIC模式。

Parameters
positionInFrames int: playback head position within buffer, expressed in frames. Zero corresponds to start of buffer. The position must not be greater than the buffer size in frames, or negative. Though this method and getPlaybackHeadPosition() have similar names, the position values have different meanings.
If looping is currently enabled and the new position is greater than or equal to the loop end marker, the behavior varies by API level: as of M, the looping is first disabled and then the position is set. For earlier API levels, the behavior is unspecified.
Returns
int error code or success, see SUCCESS, ERROR_BAD_VALUE, ERROR_INVALID_OPERATION

setPlaybackParams

Added in API level 23
void setPlaybackParams (PlaybackParams params)

设置播放参数。 如果无法应用播放参数,此方法将返回失败。 一个可能的原因是速度或音调参数超出范围。 另一个可能的原因是AudioTrack正在流式传输(请参阅MODE_STREAM )并且缓冲区大小太小。 对于大于1.0f的速度,配置中的AudioTrack缓冲区必须大于速度乘以最小大小getMinBufferSize(int, int, int) )以允许正确播放。

Parameters
params PlaybackParams: see PlaybackParams. In particular, speed, pitch, and audio mode should be set.
Throws
IllegalArgumentException if the parameters are invalid or not accepted.
IllegalStateException if track is not initialized.

setPlaybackPositionUpdateListener

Added in API level 3
void setPlaybackPositionUpdateListener (AudioTrack.OnPlaybackPositionUpdateListener listener, 
                Handler handler)

设置AudioTrack在达到预先设置的标记时通知的听众或每个定期播放头位置更新。 使用此方法在Handler中接收与创建AudioTrack实例的线程相关联的另一个线程的AudioTrack事件。

Parameters
handler Handler: the Handler that will receive the event notification messages.

setPlaybackPositionUpdateListener

Added in API level 3
void setPlaybackPositionUpdateListener (AudioTrack.OnPlaybackPositionUpdateListener listener)

设置AudioTrack在达到预先设置的标记时通知的听众或每个定期播放头位置更新。 通知将在与创建AudioTrack实例的线程相同的线程中接收。

setPlaybackRate

Added in API level 3
int setPlaybackRate (int sampleRateInHz)

设置此曲目的播放采样率。 这将设置音频数据将被消耗和播放的采样率(由AudioTrack(int, int, int, int, int, int)构造函数中的sampleRateInHz参数设置),而不是内容的原始采样率。 例如,将其设置为内容采样率的一半将导致播放持续两倍,但也会导致音高降低一个八度。 有效采样率范围从1 Hz到getNativeOutputSampleRate(int)返回值的getNativeOutputSampleRate(int) 使用setPlaybackParams(PlaybackParams)进行速度控制。

此方法也可用于重新调整现有的 AudioTrack以播放不同采样率的内容,但编码和通道掩码相同。

Parameters
sampleRateInHz int: the sample rate expressed in Hz
Returns
int error code or success, see SUCCESS, ERROR_BAD_VALUE, ERROR_INVALID_OPERATION

setPositionNotificationPeriod

Added in API level 3
int setPositionNotificationPeriod (int periodInFrames)

设置定期通知事件的周期。

Parameters
periodInFrames int: update period expressed in frames. Zero period means no position updates. A negative period is not allowed.
Returns
int error code or success, see SUCCESS, ERROR_INVALID_OPERATION

setPreferredDevice

Added in API level 23
boolean setPreferredDevice (AudioDeviceInfo deviceInfo)

指定一个音频设备(通过 AudioDeviceInfo对象) AudioDeviceInfo由此AudioTrack的输出。

Parameters
deviceInfo AudioDeviceInfo: The AudioDeviceInfo specifying the audio sink. If deviceInfo is null, default routing is restored.
Returns
boolean true if succesful, false if the specified AudioDeviceInfo is non-null and does not correspond to a valid audio output device.

setStereoVolume

Added in API level 3
int setStereoVolume (float leftGain, 
                float rightGain)

此方法在API级别21中已弃用。
应用程序应该使用setVolume(float) ,因为它可以更加平滑地缩小到单声道,并且可以达到超出立体声的多声道内容。

在AudioTrack上设置指定的左右输出增益值。

增益值被钳位到闭区间[0.0,max],其中max是getMaxVolume()的值。 0.0值导致零增益(静音),1.0值表示单位增益(信号不变)。 默认值是1.0意味着统一增益。

API名称中的“卷”一词是历史性的; 这实际上是一个线性增益。

Parameters
leftGain float: output gain for the left channel.
rightGain float: output gain for the right channel
Returns
int error code or success, see SUCCESS, ERROR_INVALID_OPERATION

setVolume

Added in API level 21
int setVolume (float gain)

设置此轨道所有通道上的指定输出增益值。

增益值被限制在闭区间[0.0,max],其中max是getMaxVolume()的值。 0.0值导致零增益(静音),1.0值表示单位增益(信号不变)。 默认值是1.0意味着统一增益。

此API比 setStereoVolume(float, float)setStereoVolume(float, float) ,因为它可以更加优雅地缩小到单声道,并且可以达到超过立体声的多声道内容。

API名称中的“卷”一词是历史性的; 这实际上是一个线性增益。

Parameters
gain float: output gain for all channels.
Returns
int error code or success, see SUCCESS, ERROR_INVALID_OPERATION

stop

Added in API level 3
void stop ()

停止播放音频数据。 在以MODE_STREAM模式创建的实例上使用时,在播放写入的最后一个缓冲区后,音频将停止播放。 对于立即停止使用pause() ,其次是flush()丢弃尚未回放尚未音频数据。

Throws
IllegalStateException

write

Added in API level 21
int write (float[] audioData, 
                int offsetInFloats, 
                int sizeInFloats, 
                int writeMode)

将音频数据写入音频接收器进行播放(流式传输模式),或复制音频数据以供以后播放(静态缓冲模式)。 在AudioTrack构造器中指定的格式应该是ENCODING_PCM_FLOAT以对应数组中的数据。

在流模式下,阻塞行为取决于写入模式。 如果写入模式为WRITE_BLOCKING ,则通常会阻止写入操作,直到所有数据已排入播放队列为止,并且将返回完整的传输计数。 但是,如果写入模式为WRITE_NON_BLOCKING ,或者磁道在进入时停止或暂停,或者另一个线程通过调用停止或暂停来中断写入,或者在写入期间发生I / O错误,则写入可能会返回短暂传输计数。

在静态缓冲模式下,将数据复制到从偏移量0开始的缓冲区,并忽略写入模式。 请注意,在此函数返回后,可能会发生此数据的实际播放。

Parameters
audioData float: the array that holds the data to write. The implementation does not clip for sample values within the nominal range [-1.0f, 1.0f], provided that all gains in the audio pipeline are less than or equal to unity (1.0f), and in the absence of post-processing effects that could add energy, such as reverb. For the convenience of applications that compute samples using filters with non-unity gain, sample values +3 dB beyond the nominal range are permitted. However such values may eventually be limited or clipped, depending on various gains and later processing in the audio path. Therefore applications are encouraged to provide samples values within the nominal range.
offsetInFloats int: the offset, expressed as a number of floats, in audioData where the data to write starts. Must not be negative, or cause the data access to go out of bounds of the array.
sizeInFloats int: the number of floats to write in audioData after the offset. Must not be negative, or cause the data access to go out of bounds of the array.
writeMode int: one of WRITE_BLOCKING, WRITE_NON_BLOCKING. It has no effect in static mode.
With WRITE_BLOCKING, the write will block until all data has been written to the audio sink.
With WRITE_NON_BLOCKING, the write will return immediately after queuing as much audio data for playback as possible without blocking.
Returns
int zero or the positive number of floats that were written, or one of the following error codes. The number of floats will be a multiple of the channel count not to exceed sizeInFloats.
  • ERROR_INVALID_OPERATION if the track isn't properly initialized
  • ERROR_BAD_VALUE if the parameters don't resolve to valid data and indexes
  • ERROR_DEAD_OBJECT if the AudioTrack is not valid anymore and needs to be recreated. The dead object error code is not returned if some data was successfully transferred. In this case, the error is returned at the next write()
  • ERROR in case of other error

write

Added in API level 3
int write (short[] audioData, 
                int offsetInShorts, 
                int sizeInShorts)

将音频数据写入音频接收器进行播放(流式传输模式),或复制音频数据以供以后播放(静态缓冲模式)。 在AudioTrack构造器中指定的格式应该是ENCODING_PCM_16BIT以对应数组中的数据。

在流模式下,写入通常会阻塞,直到所有数据已排入队列进行播放为止,并且将返回完整的传输计数。 但是,如果轨道在进入时停止或暂停,或者另一个线程通过调用停止或暂停来中断写入,或者在写入期间发生I / O错误,则写入可能会返回一个短的传输计数。

在静态缓冲区模式下,将数据复制到从偏移量0开始的缓冲区。请注意,此数据的实际播放可能在此函数返回后发生。

Parameters
audioData short: the array that holds the data to play.
offsetInShorts int: the offset expressed in shorts in audioData where the data to play starts. Must not be negative, or cause the data access to go out of bounds of the array.
sizeInShorts int: the number of shorts to read in audioData after the offset. Must not be negative, or cause the data access to go out of bounds of the array.
Returns
int zero or the positive number of shorts that were written, or one of the following error codes. The number of shorts will be a multiple of the channel count not to exceed sizeInShorts.
  • ERROR_INVALID_OPERATION if the track isn't properly initialized
  • ERROR_BAD_VALUE if the parameters don't resolve to valid data and indexes
  • ERROR_DEAD_OBJECT if the AudioTrack is not valid anymore and needs to be recreated. The dead object error code is not returned if some data was successfully transferred. In this case, the error is returned at the next write()
  • ERROR in case of other error
This is equivalent to write(short[], int, int, int) with writeMode set to WRITE_BLOCKING.

write

Added in API level 3
int write (byte[] audioData, 
                int offsetInBytes, 
                int sizeInBytes)

将音频数据写入音频接收器进行播放(流式传输模式),或复制音频数据以供以后播放(静态缓冲模式)。 在AudioTrack构造器中指定的格式应该是ENCODING_PCM_8BIT以对应数组中的数据。 格式可以是ENCODING_PCM_16BIT ,但不推荐使用。

在流模式下,写入通常会阻塞,直到所有数据已排入队列进行播放为止,并且将返回完整的传输计数。 但是,如果轨道在进入时停止或暂停,或者另一个线程通过调用停止或暂停来中断写入,或者在写入期间发生I / O错误,则写入可能会返回一个短的传输计数。

在静态缓冲区模式下,将数据复制到从偏移量0开始的缓冲区。请注意,此数据的实际播放可能在此函数返回后发生。

Parameters
audioData byte: the array that holds the data to play.
offsetInBytes int: the offset expressed in bytes in audioData where the data to write starts. Must not be negative, or cause the data access to go out of bounds of the array.
sizeInBytes int: the number of bytes to write in audioData after the offset. Must not be negative, or cause the data access to go out of bounds of the array.
Returns
int zero or the positive number of bytes that were written, or one of the following error codes. The number of bytes will be a multiple of the frame size in bytes not to exceed sizeInBytes.
  • ERROR_INVALID_OPERATION if the track isn't properly initialized
  • ERROR_BAD_VALUE if the parameters don't resolve to valid data and indexes
  • ERROR_DEAD_OBJECT if the AudioTrack is not valid anymore and needs to be recreated. The dead object error code is not returned if some data was successfully transferred. In this case, the error is returned at the next write()
  • ERROR in case of other error
This is equivalent to write(byte[], int, int, int) with writeMode set to WRITE_BLOCKING.

write

Added in API level 21
int write (ByteBuffer audioData, 
                int sizeInBytes, 
                int writeMode)

将音频数据写入音频接收器进行播放(流式传输模式),或复制音频数据以供以后播放(静态缓冲模式)。 ByteBuffer中的audioData应该与AudioTrack构造函数中指定的格式相匹配。

在流模式下,阻塞行为取决于写入模式。 如果写入模式为WRITE_BLOCKING ,写入通常会阻塞,直到所有数据已排入播放队列,并且将返回完整的传输计数。 但是,如果写入模式为WRITE_NON_BLOCKING ,或者轨道在入口处停止或暂停,或者另一个线程通过调用停止或暂停来中断写入,或者在写入期间发生I / O错误,则写入可能会返回短暂传输计数。

在静态缓冲模式下,将数据复制到从偏移量0开始的缓冲区,并忽略写入模式。 请注意,在此函数返回后,可能会发生此数据的实际播放。

Parameters
audioData ByteBuffer: the buffer that holds the data to write, starting at the position reported by audioData.position().
Note that upon return, the buffer position (audioData.position()) will have been advanced to reflect the amount of data that was successfully written to the AudioTrack.
sizeInBytes int: number of bytes to write. It is recommended but not enforced that the number of bytes requested be a multiple of the frame size (sample size in bytes multiplied by the channel count).
Note this may differ from audioData.remaining(), but cannot exceed it.
writeMode int: one of WRITE_BLOCKING, WRITE_NON_BLOCKING. It has no effect in static mode.
With WRITE_BLOCKING, the write will block until all data has been written to the audio sink.
With WRITE_NON_BLOCKING, the write will return immediately after queuing as much audio data for playback as possible without blocking.
Returns
int zero or the positive number of bytes that were written, or one of the following error codes.
  • ERROR_INVALID_OPERATION if the track isn't properly initialized
  • ERROR_BAD_VALUE if the parameters don't resolve to valid data and indexes
  • ERROR_DEAD_OBJECT if the AudioTrack is not valid anymore and needs to be recreated. The dead object error code is not returned if some data was successfully transferred. In this case, the error is returned at the next write()
  • ERROR in case of other error

write

Added in API level 23
int write (ByteBuffer audioData, 
                int sizeInBytes, 
                int writeMode, 
                long timestamp)

将音频数据写入音频接收器以在HW_AV_SYNC音轨上以流模式播放。 阻塞行为将取决于写入模式。

Parameters
audioData ByteBuffer: the buffer that holds the data to write, starting at the position reported by audioData.position().
Note that upon return, the buffer position (audioData.position()) will have been advanced to reflect the amount of data that was successfully written to the AudioTrack.
sizeInBytes int: number of bytes to write. It is recommended but not enforced that the number of bytes requested be a multiple of the frame size (sample size in bytes multiplied by the channel count).
Note this may differ from audioData.remaining(), but cannot exceed it.
writeMode int: one of WRITE_BLOCKING, WRITE_NON_BLOCKING.
With WRITE_BLOCKING, the write will block until all data has been written to the audio sink.
With WRITE_NON_BLOCKING, the write will return immediately after queuing as much audio data for playback as possible without blocking.
timestamp long: The timestamp of the first decodable audio frame in the provided audioData.
Returns
int zero or the positive number of bytes that were written, or one of the following error codes.
  • ERROR_INVALID_OPERATION if the track isn't properly initialized
  • ERROR_BAD_VALUE if the parameters don't resolve to valid data and indexes
  • ERROR_DEAD_OBJECT if the AudioTrack is not valid anymore and needs to be recreated. The dead object error code is not returned if some data was successfully transferred. In this case, the error is returned at the next write()
  • ERROR in case of other error

write

Added in API level 23
int write (short[] audioData, 
                int offsetInShorts, 
                int sizeInShorts, 
                int writeMode)

将音频数据写入音频接收器进行播放(流式传输模式),或复制音频数据以供以后播放(静态缓冲模式)。 在AudioTrack构造器中指定的格式应该是ENCODING_PCM_16BIT以对应数组中的数据。

在流模式下,阻塞行为取决于写入模式。 如果写入模式为WRITE_BLOCKING ,写入通常会阻塞,直到所有数据已排入播放队列,并且将返回完整的传输计数。 但是,如果写入模式为WRITE_NON_BLOCKING ,或者在进入时轨道停止或暂停,或者另一个线程通过调用停止或暂停来中断写入,或者在写入期间发生I / O错误,则写入可能会返回短暂传输计数。

在静态缓冲区模式下,将数据复制到从偏移量0开始的缓冲区。请注意,此数据的实际播放可能在此函数返回后发生。

Parameters
audioData short: the array that holds the data to write.
offsetInShorts int: the offset expressed in shorts in audioData where the data to write starts. Must not be negative, or cause the data access to go out of bounds of the array.
sizeInShorts int: the number of shorts to read in audioData after the offset. Must not be negative, or cause the data access to go out of bounds of the array.
writeMode int: one of WRITE_BLOCKING, WRITE_NON_BLOCKING. It has no effect in static mode.
With WRITE_BLOCKING, the write will block until all data has been written to the audio sink.
With WRITE_NON_BLOCKING, the write will return immediately after queuing as much audio data for playback as possible without blocking.
Returns
int zero or the positive number of shorts that were written, or one of the following error codes. The number of shorts will be a multiple of the channel count not to exceed sizeInShorts.
  • ERROR_INVALID_OPERATION if the track isn't properly initialized
  • ERROR_BAD_VALUE if the parameters don't resolve to valid data and indexes
  • ERROR_DEAD_OBJECT if the AudioTrack is not valid anymore and needs to be recreated. The dead object error code is not returned if some data was successfully transferred. In this case, the error is returned at the next write()
  • ERROR in case of other error

write

Added in API level 23
int write (byte[] audioData, 
                int offsetInBytes, 
                int sizeInBytes, 
                int writeMode)

将音频数据写入音频接收器进行播放(流式传输模式),或复制音频数据以供以后播放(静态缓冲模式)。 在AudioTrack构造函数中指定的格式应该是ENCODING_PCM_8BIT以对应数组中的数据。 格式可以是ENCODING_PCM_16BIT ,但不推荐使用。

在流模式下,阻塞行为取决于写入模式。 如果写入模式为WRITE_BLOCKING ,则写入通常会阻塞,直到所有数据已排入队列进行播放为止,并且将返回完整的传输计数。 但是,如果写入模式为WRITE_NON_BLOCKING ,或者在进入时轨道停止或暂停,或者另一个线程通过调用停止或暂停来中断写入,或者在写入期间发生I / O错误,则写入可能会返回一个短暂传输计数。

在静态缓冲模式下,将数据复制到从偏移量0开始的缓冲区,并忽略写入模式。 请注意,在此函数返回后,可能会发生此数据的实际播放。

Parameters
audioData byte: the array that holds the data to play.
offsetInBytes int: the offset expressed in bytes in audioData where the data to write starts. Must not be negative, or cause the data access to go out of bounds of the array.
sizeInBytes int: the number of bytes to write in audioData after the offset. Must not be negative, or cause the data access to go out of bounds of the array.
writeMode int: one of WRITE_BLOCKING, WRITE_NON_BLOCKING. It has no effect in static mode.
With WRITE_BLOCKING, the write will block until all data has been written to the audio sink.
With WRITE_NON_BLOCKING, the write will return immediately after queuing as much audio data for playback as possible without blocking.
Returns
int zero or the positive number of bytes that were written, or one of the following error codes. The number of bytes will be a multiple of the frame size in bytes not to exceed sizeInBytes.
  • ERROR_INVALID_OPERATION if the track isn't properly initialized
  • ERROR_BAD_VALUE if the parameters don't resolve to valid data and indexes
  • ERROR_DEAD_OBJECT if the AudioTrack is not valid anymore and needs to be recreated. The dead object error code is not returned if some data was successfully transferred. In this case, the error is returned at the next write()
  • ERROR in case of other error

Protected methods

finalize

Added in API level 3
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导致此对象的终止被暂停,但是会被忽略。

getNativeFrameCount

Added in API level 3
int getNativeFrameCount ()

此方法在API级别19中已被弃用。
改为使用相同的公共方法getBufferSizeInFrames()

返回本机 AudioTrack缓冲区的 AudioTrack

Returns
int current size in frames of the AudioTrack buffer.
Throws
IllegalStateException

setState

Added in API level 3
void setState (int state)

此方法在API级别19中已被弃用。
只能由子类访问,不建议用于AudioTrack。

设置实例的初始化状态。 此方法最初打算用于AudioTrack子类构造函数中,以设置子类特定的初始化后状态。 但是,不再推荐AudioTrack的子类,因此此方法已过时。

Parameters
state int: the state of the AudioTrack instance

Hooray!