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层传输到本地层并排队等待播放时,它们会阻塞并返回。 在播放音频数据块时,流模式非常有用,例如:
一旦创建,AudioTrack对象将初始化其关联的音频缓冲区。 在构建过程中指定的这个缓冲区的大小决定了AudioTrack在耗尽数据之前可以播放多长时间。
对于使用静态模式的AudioTrack,此大小是可以从中播放的最大声音大小。
对于流模式,数据将以大小小于或等于总缓冲区大小的块形式写入音频接收器。 AudioTrack不是最终的,因此允许使用子类,但不建议使用这种类型的子类。
Nested classes |
|
---|---|
class |
AudioTrack.Builder |
interface |
AudioTrack.OnPlaybackPositionUpdateListener 当AudioTrack的回放头位置达到通知标记或增加了一定时间时,将调用回调的接口定义。 |
interface |
AudioTrack.OnRoutingChangedListener 此接口在API级别24中已被弃用。用户应改用通用型 |
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) 具有 |
Public methods |
|
---|---|
void |
addOnRoutingChangedListener(AudioTrack.OnRoutingChangedListener listener, Handler handler) 此方法在API级别24中已弃用。用户应改用通用 |
void |
addOnRoutingChangedListener(AudioRouting.OnRoutingChangedListener listener, Handler handler) 添加 |
int |
attachAuxEffect(int effectId) 为音轨添加辅助效果。 |
void |
flush() 刷新当前排队播放的音频数据。 |
int |
getAudioFormat() 返回配置的音频数据编码。 |
int |
getAudioSessionId() 返回音频会话ID。 |
int |
getBufferCapacityInFrames() 以帧为 |
int |
getBufferSizeInFrames() 返回应用程序写入的 |
int |
getChannelConfiguration() 返回配置的通道位置掩码。 |
int |
getChannelCount() 返回配置的通道数量。 |
AudioFormat |
getFormat() 返回配置的 |
static float |
getMaxVolume() 返回大于或等于1.0的最大增益值。 |
static int |
getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat) 返回要在 |
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() 返回由 |
AudioDeviceInfo |
getRoutedDevice() 返回 |
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中已弃用。用户应改为使用通用 |
void |
removeOnRoutingChangedListener(AudioRouting.OnRoutingChangedListener listener) 删除以前添加的 |
int |
setAuxEffectSendLevel(float level) 将音轨的发送电平设置为所附的辅助效果 |
int |
setBufferSizeInFrames(int bufferSizeInFrames) 限制应用程序写入的 |
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) 指定一个音频设备(通过 |
int |
setStereoVolume(float leftGain, float rightGain) 此方法在API级别21中已被弃用。应用程序应该使用 |
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中已弃用。请改用相同的公用方法 |
void |
setState(int state) 此方法在API级别19中已弃用。只能由子类访问,不建议用于AudioTrack。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface android.media.AudioRouting
|
int ERROR_DEAD_OBJECT
指示报告对象不再有效并需要重新创建的错误代码。
常量值:-6(0xfffffffa)
int ERROR_INVALID_OPERATION
表示由于不正确使用方法而导致的失败。
常量值:-3(0xfffffffd)
int STATE_NO_STATIC_DATA
已成功初始化的使用静态数据的AudioTrack的状态,但尚未收到该数据。
常量值:2(0x00000002)
int STATE_UNINITIALIZED
创建时未成功初始化的AudioTrack的状态。
常量值:0(0x00000000)
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)
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)
float mAuxEffectSendLevel
float mLeftVolume
float mRightVolume
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 |
int : streaming or static buffer. See MODE_STATIC and MODE_STREAM |
Throws | |
---|---|
IllegalArgumentException |
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 |
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 (AudioAttributes attributes, AudioFormat format, int bufferSizeInBytes, int mode, int sessionId)
具有 AudioAttributes
和 AudioFormat
类构造 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 |
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 |
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. |
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. |
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 |
也可以看看:
void flush ()
刷新当前排队播放的音频数据。 任何已经写入但尚未呈现的数据将被丢弃。 如果未停止或暂停,或者曲目的创建模式不是MODE_STREAM
则禁止MODE_STREAM
。
请注意,虽然写入但尚未呈现的数据已被丢弃,但不能保证该数据以前使用的所有缓冲区空间都可用于后续写入。 例如,调用write(byte[], int, int)
与sizeInBytes
小于或等于总缓冲区大小可能会返回一个短的实际传输计数。
int getAudioFormat ()
返回配置的音频数据编码。 见ENCODING_PCM_8BIT
, ENCODING_PCM_16BIT
,并ENCODING_PCM_FLOAT
。
Returns | |
---|---|
int |
int getAudioSessionId ()
返回音频会话ID。
Returns | |
---|---|
int |
the ID of the audio session this AudioTrack belongs to. |
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. |
int getBufferSizeInFrames ()
返回应用程序写入的 AudioTrack
缓冲区的有效大小。
这将小于或等于getBufferCapacityInFrames()
的结果。 如果setBufferSizeInFrames(int)
从未被调用过,它将是平等的。
如果该轨道随后被路由到不同的输出接收器,则缓冲器大小和容量可以放大以适应。
如果 AudioTrack
编码指示压缩数据,例如 ENCODING_AC3
,则返回的帧计数是 AudioTrack
缓冲区的大小(以字节为单位)。
密钥 PROPERTY_OUTPUT_FRAMES_PER_BUFFER
也 getProperty(String)
参见 PROPERTY_OUTPUT_FRAMES_PER_BUFFER
。
Returns | |
---|---|
int |
current size in frames of the AudioTrack buffer. |
Throws | |
---|---|
IllegalStateException |
if track is not initialized. |
int getChannelConfiguration ()
返回配置的通道位置掩码。
例如,参考CHANNEL_OUT_MONO
, CHANNEL_OUT_STEREO
, CHANNEL_OUT_5POINT1
。 如果使用通道索引掩码,则此方法可能会返回CHANNEL_INVALID
。 请考虑getFormat()
,以获得AudioFormat
,其中包含通道位置掩码和通道索引掩码。
Returns | |
---|---|
int |
AudioFormat getFormat ()
返回配置的 AudioTrack
格式。
Returns | |
---|---|
AudioFormat |
an AudioFormat containing the AudioTrack parameters at the time of configuration. |
float getMaxVolume ()
返回大于或等于1.0的最大增益值。 大于最大值的增益值将被钳位到最大值。
API名称中的“卷”一词是历史性的; 这实际上是一种收益。 在采样值上表示为线性乘法器,其中最大值1.0对应于0 dB的增益(样本值保持未修改)。
Returns | |
---|---|
float |
the maximum value, which is greater than or equal to 1.0. |
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. |
float getMinVolume ()
返回最小增益值,即常数0.0。 小于0.0的增益值将被钳位到0.0。
API名称中的“卷”一词是历史性的; 这实际上是一个线性增益。
Returns | |
---|---|
float |
the minimum value, which is the constant 0.0. |
int getNativeOutputSampleRate (int streamType)
返回指定流类型的输出采样率(以Hz为单位)。
Parameters | |
---|---|
streamType |
int
|
Returns | |
---|---|
int |
int getNotificationMarkerPosition ()
返回以帧表示的标记位置。
Returns | |
---|---|
int |
marker position in wrapping frame units similar to getPlaybackHeadPosition() , or zero if marker is disabled. |
int getPlaybackHeadPosition ()
返回以帧为单位表示的播放头位置。 尽管“int”类型是带符号的32位,但值应该重新解释为无符号32位。 也就是说,0x7FFFFFFF之后的下一个位置是(int)0x80000000。 这是一个不断前进的计数器。 它会定期打包(溢出),例如大约每隔27:03:11小时:分钟:44.1 kHz秒钟一次。 它是由重置为零flush()
, reloadStaticData()
,并stop()
。 如果轨道的创建模式为MODE_STATIC
,则返回值指示自复位后播放的帧总数, 而不是缓冲区内的当前偏移量。
Returns | |
---|---|
int |
PlaybackParams getPlaybackParams ()
返回当前的播放参数。 请参阅setPlaybackParams(PlaybackParams)
来设置播放参数
Returns | |
---|---|
PlaybackParams |
current PlaybackParams . |
Throws | |
---|---|
IllegalStateException |
if track is not initialized. |
int getPositionNotificationPeriod ()
返回以帧为单位表示的通知更新周期。 零意味着没有位置更新通知正在传递。
Returns | |
---|---|
int |
AudioDeviceInfo getPreferredDevice ()
返回由setPreferredDevice(AudioDeviceInfo)
指定的所选输出。 请注意,这并不保证与实际用于播放的设备相对应。
Returns | |
---|---|
AudioDeviceInfo |
AudioDeviceInfo getRoutedDevice ()
返回AudioDeviceInfo
标识此AudioTrack的当前路由。 注意:只有当AudioTrack正在播放时,该查询才有效。 如果不是, getRoutedDevice()
将返回null。
Returns | |
---|---|
AudioDeviceInfo |
int getSampleRate ()
以Hz为单位返回配置的音频源采样率。 初始源采样率取决于构造函数参数,但如果setPlaybackRate(int)
,则源采样率可能会更改。 如果构造函数具有特定的采样率,那么初始接收采样率就是该值。 如果构造函数具有SAMPLE_RATE_UNSPECIFIED
,则初始接收器采样率是基于源[sic]的路由依赖默认值。
Returns | |
---|---|
int |
int getState ()
返回AudioTrack实例的状态。 在创建AudioTrack实例以检查它是否被正确初始化之后,这很有用。 这确保了获得适当的资源。
Returns | |
---|---|
int |
int getStreamType ()
返回此AudioTrack配置的音频流的类型。 对比较结果STREAM_VOICE_CALL
, STREAM_SYSTEM
, STREAM_RING
, STREAM_MUSIC
, STREAM_ALARM
, STREAM_NOTIFICATION
,或STREAM_DTMF
。
Returns | |
---|---|
int |
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. |
int getUnderrunCount ()
自AudioTrack创建以来,返回应用程序级写入缓冲区中的欠载发生次数。 如果应用程序不能足够快地写入音频数据,就会发生欠载运行,导致缓冲区下溢并产生潜在的音频故障或弹出。
当缓冲区大小较小时,欠载较少。 通过用更大的缓冲区重新创建AudioTrack,可以消除欠载。 或者通过使用setBufferSizeInFrames(int)
来动态增加缓冲区的有效大小。
Returns | |
---|---|
int |
void pause ()
暂停播放音频数据。 未播放的数据不会被丢弃。 随后调用play()
将播放此数据。 请参阅flush()
放弃此数据。
Throws | |
---|---|
IllegalStateException |
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 |
int reloadStaticData ()
将静态缓冲区内的播放头位置设置为零,即将其回退到静态缓冲区的开始位置。 曲目必须停止或暂停,曲目的创建模式必须为MODE_STATIC
。
从M
,还将由getPlaybackHeadPosition()
返回的值重置为零。 对于较早的API级别,重置行为未指定。
使用 setPlaybackHeadPosition(int)
如果复位用零位 getPlaybackHeadPosition()
是没有必要的。
Returns | |
---|---|
int |
error code or success, see SUCCESS , ERROR_BAD_VALUE , ERROR_INVALID_OPERATION |
void removeOnRoutingChangedListener (AudioTrack.OnRoutingChangedListener listener)
此方法在API级别24中已弃用。
用户应该切换到通用AudioRouting.OnRoutingChangedListener
。
删除以前添加的 AudioTrack.OnRoutingChangedListener
以接收重新路由通知。
Parameters | |
---|---|
listener |
AudioTrack.OnRoutingChangedListener : The previously added AudioTrack.OnRoutingChangedListener interface to remove. |
void removeOnRoutingChangedListener (AudioRouting.OnRoutingChangedListener listener)
移除先前已添加的 AudioRouting.OnRoutingChangedListener
以接收重新路由通知。
Parameters | |
---|---|
listener |
AudioRouting.OnRoutingChangedListener : The previously added AudioRouting.OnRoutingChangedListener interface to remove. |
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 |
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. |
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 |
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 |
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 |
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. |
void setPlaybackPositionUpdateListener (AudioTrack.OnPlaybackPositionUpdateListener listener, Handler handler)
设置AudioTrack在达到预先设置的标记时通知的听众或每个定期播放头位置更新。 使用此方法在Handler中接收与创建AudioTrack实例的线程相关联的另一个线程的AudioTrack事件。
Parameters | |
---|---|
handler |
Handler : the Handler that will receive the event notification messages. |
void setPlaybackPositionUpdateListener (AudioTrack.OnPlaybackPositionUpdateListener listener)
设置AudioTrack在达到预先设置的标记时通知的听众或每个定期播放头位置更新。 通知将在与创建AudioTrack实例的线程相同的线程中接收。
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 |
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 |
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. |
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 |
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 |
void stop ()
停止播放音频数据。 在以MODE_STREAM
模式创建的实例上使用时,在播放写入的最后一个缓冲区后,音频将停止播放。 对于立即停止使用pause()
,其次是flush()
丢弃尚未回放尚未音频数据。
Throws | |
---|---|
IllegalStateException |
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.
|
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.
write(short[], int, int, int) with writeMode set to WRITE_BLOCKING . |
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.
write(byte[], int, int, int) with writeMode set to WRITE_BLOCKING . |
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.
|
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.
|
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.
|
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.
|
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
导致此对象的终止被暂停,但是会被忽略。
int getNativeFrameCount ()
此方法在API级别19中已被弃用。
改为使用相同的公共方法getBufferSizeInFrames()
。
返回本机 AudioTrack
缓冲区的 AudioTrack
。
Returns | |
---|---|
int |
current size in frames of the AudioTrack buffer. |
Throws | |
---|---|
|
IllegalStateException |
void setState (int state)
此方法在API级别19中已被弃用。
只能由子类访问,不建议用于AudioTrack。
设置实例的初始化状态。 此方法最初打算用于AudioTrack子类构造函数中,以设置子类特定的初始化后状态。 但是,不再推荐AudioTrack的子类,因此此方法已过时。
Parameters | |
---|---|
state |
int : the state of the AudioTrack instance |