java.lang.Object | |
↳ | android.media.AudioTrack |
The AudioTrack class manages and plays a single audio resource for Java applications.
It allows streaming PCM audio buffers to the audio hardware for playback. This is
achieved by "pushing" the data to the AudioTrack object using one of the
write(byte[], int, int)
and write(short[], int, int)
methods.
An AudioTrack instance can operate under two modes: static or streaming.
In Streaming mode, the application writes a continuous stream of data to the AudioTrack, using
one of the write()
methods. These are blocking and return when the data has been
transferred from the Java layer to the native layer and queued for playback. The streaming
mode is most useful when playing blocks of audio data that for instance are:
Upon creation, an AudioTrack object initializes its associated audio buffer.
The size of this buffer, specified during the construction, determines how long an AudioTrack
can play before running out of data.
For an AudioTrack using the static mode, this size is the maximum size of the sound that can
be played from it.
For the streaming mode, data will be written to the hardware in chunks of
sizes less than or equal to the total buffer size.
Nested Classes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
AudioTrack.OnPlaybackPositionUpdateListener | Interface definition for a callback to be invoked when the playback head position of an AudioTrack has reached a notification marker or has increased by a certain period. |
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
int | ERROR | Denotes a generic operation failure. | |||||||||
int | ERROR_BAD_VALUE | Denotes a failure due to the use of an invalid value. | |||||||||
int | ERROR_INVALID_OPERATION | Denotes a failure due to the improper use of a method. | |||||||||
int | MODE_STATIC | Creation mode where audio data is transferred from Java to the native layer only once before the audio starts playing. | |||||||||
int | MODE_STREAM | Creation mode where audio data is streamed from Java to the native layer as the audio is playing. | |||||||||
int | PLAYSTATE_PAUSED | indicates AudioTrack state is paused | |||||||||
int | PLAYSTATE_PLAYING | indicates AudioTrack state is playing | |||||||||
int | PLAYSTATE_STOPPED | indicates AudioTrack state is stopped | |||||||||
int | STATE_INITIALIZED | State of an AudioTrack that is ready to be used. | |||||||||
int | STATE_NO_STATIC_DATA | State of a successfully initialized AudioTrack that uses static data, but that hasn't received that data yet. | |||||||||
int | STATE_UNINITIALIZED | State of an AudioTrack that was not successfully initialized upon creation. | |||||||||
int | SUCCESS | Denotes a successful operation. |
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Class constructor.
| |||||||||||
Class constructor with audio session.
|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Attaches an auxiliary effect to the audio track.
| |||||||||||
Flushes the audio data currently queued for playback.
| |||||||||||
Returns the configured audio data format.
| |||||||||||
Returns the audio session ID.
| |||||||||||
Returns the configured channel configuration.
| |||||||||||
Returns the configured number of channels.
| |||||||||||
Returns the maximum valid volume value.
| |||||||||||
Returns the minimum buffer size required for the successful creation of an AudioTrack
object to be created in the
MODE_STREAM mode. | |||||||||||
Returns the minimum valid volume value.
| |||||||||||
Returns the hardware output sample rate
| |||||||||||
Returns marker position expressed in frames.
| |||||||||||
Returns the playback state of the AudioTrack instance.
| |||||||||||
Returns the playback head position expressed in frames
| |||||||||||
Returns the current playback rate in Hz.
| |||||||||||
Returns the notification update period expressed in frames.
| |||||||||||
Returns the configured audio data sample rate in Hz
| |||||||||||
Returns the state of the AudioTrack instance.
| |||||||||||
Returns the type of audio stream this AudioTrack is configured for.
| |||||||||||
Pauses the playback of the audio data.
| |||||||||||
Starts playing an AudioTrack.
| |||||||||||
Releases the native AudioTrack resources.
| |||||||||||
Notifies the native resource to reuse the audio data already loaded in the native
layer.
| |||||||||||
Sets the send level of the audio track to the attached auxiliary effect
attachAuxEffect(int) . | |||||||||||
Sets the loop points and the loop count.
| |||||||||||
Sets the position of the notification marker.
| |||||||||||
Sets the playback head position.
| |||||||||||
Sets the listener the AudioTrack notifies when a previously set marker is reached or
for each periodic playback head position update.
| |||||||||||
Sets the listener the AudioTrack notifies when a previously set marker is reached or
for each periodic playback head position update.
| |||||||||||
Sets the playback sample rate for this track.
| |||||||||||
Sets the period for the periodic notification event.
| |||||||||||
Sets the specified left/right output volume values on the AudioTrack.
| |||||||||||
Stops playing the audio data.
| |||||||||||
Writes the audio data to the audio hardware for playback.
| |||||||||||
Writes the audio data to the audio hardware for playback.
|
Protected Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Invoked when the garbage collector has detected that this instance is no longer reachable.
| |||||||||||
Returns the native frame count used by the hardware.
| |||||||||||
Sets the initialization state of the instance.
|
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
java.lang.Object
|
Denotes a generic operation failure.
Denotes a failure due to the use of an invalid value.
Denotes a failure due to the improper use of a method.
Creation mode where audio data is transferred from Java to the native layer only once before the audio starts playing.
Creation mode where audio data is streamed from Java to the native layer as the audio is playing.
indicates AudioTrack state is paused
indicates AudioTrack state is playing
indicates AudioTrack state is stopped
State of an AudioTrack that is ready to be used.
State of a successfully initialized AudioTrack that uses static data, but that hasn't received that data yet.
State of an AudioTrack that was not successfully initialized upon creation.
Denotes a successful operation.
Class constructor.
streamType | the type of the audio stream. See
STREAM_VOICE_CALL , STREAM_SYSTEM ,
STREAM_RING , STREAM_MUSIC ,
STREAM_ALARM , and STREAM_NOTIFICATION . |
---|---|
sampleRateInHz | the sample rate expressed in Hertz. |
channelConfig | describes the configuration of the audio channels.
See CHANNEL_OUT_MONO and
CHANNEL_OUT_STEREO |
audioFormat | the format in which the audio data is represented.
See ENCODING_PCM_16BIT and
ENCODING_PCM_8BIT |
bufferSizeInBytes | the total size (in bytes) of the buffer where audio data is read
from for playback. If using the AudioTrack in streaming mode, you can write data into
this buffer in smaller chunks than this size. If using the AudioTrack in static mode,
this is the maximum size of the sound that will be played for this instance.
See getMinBufferSize(int, int, int) to determine the minimum required buffer size
for the successful creation of an AudioTrack instance in streaming mode. Using values
smaller than getMinBufferSize() will result in an initialization failure. |
mode | streaming or static buffer. See MODE_STATIC and MODE_STREAM |
IllegalArgumentException |
---|
Class constructor with audio session. Use this constructor when the AudioTrack must be
attached to a particular audio session. The primary use of the audio session ID is to
associate audio effects to a particular instance of AudioTrack: if an audio session ID
is provided when creating an AudioEffect, this effect will be applied only to audio tracks
and media players in the same session and not to the output mix.
When an AudioTrack is created without specifying a session, it will create its own session
which can be retreived by calling the getAudioSessionId()
method.
If a non-zero session ID is provided, this AudioTrack will share effects attached to this
session
with all other media players or audio tracks in the same session, otherwise a new session
will be created for this track if none is supplied.
streamType | the type of the audio stream. See
STREAM_VOICE_CALL , STREAM_SYSTEM ,
STREAM_RING , STREAM_MUSIC ,
STREAM_ALARM , and STREAM_NOTIFICATION . |
---|---|
sampleRateInHz | the sample rate expressed in Hertz. |
channelConfig | describes the configuration of the audio channels.
See CHANNEL_OUT_MONO and
CHANNEL_OUT_STEREO |
audioFormat | the format in which the audio data is represented.
See ENCODING_PCM_16BIT and
ENCODING_PCM_8BIT |
bufferSizeInBytes | the total size (in bytes) of the buffer where audio data is read
from for playback. If using the AudioTrack in streaming mode, you can write data into
this buffer in smaller chunks than this size. If using the AudioTrack in static mode,
this is the maximum size of the sound that will be played for this instance.
See getMinBufferSize(int, int, int) to determine the minimum required buffer size
for the successful creation of an AudioTrack instance in streaming mode. Using values
smaller than getMinBufferSize() will result in an initialization failure. |
mode | streaming or static buffer. See MODE_STATIC and MODE_STREAM |
sessionId | Id of audio session the AudioTrack must be attached to |
IllegalArgumentException |
---|
Attaches an auxiliary effect to the audio track. A typical auxiliary effect is a reverberation effect which can be applied on any sound source that directs a certain amount of its energy to this effect. This amount is defined by setAuxEffectSendLevel(). .
After creating an auxiliary effect (e.g.
EnvironmentalReverb
), retrieve its ID with
getId()
and use it when calling
this method to attach the audio track to the effect.
To detach the effect from the audio track, call this method with a null effect id.
effectId | system wide unique id of the effect to attach |
---|
SUCCESS
,
ERROR_INVALID_OPERATION
, ERROR_BAD_VALUE
Flushes the audio data currently queued for playback. Any data that has not been played back will be discarded.
Returns the configured audio data format. See ENCODING_PCM_16BIT
and ENCODING_PCM_8BIT
.
Returns the audio session ID.
Returns the configured channel configuration.
See CHANNEL_OUT_MONO
and CHANNEL_OUT_STEREO
.
Returns the maximum valid volume value. Volume values set above this one will be clamped at this value.
Returns the minimum buffer size required for the successful creation of an AudioTrack
object to be created in the MODE_STREAM
mode. Note that this size doesn't
guarantee a smooth playback under load, and higher values should be chosen according to
the expected frequency at which the buffer will be refilled with additional data to play.
sampleRateInHz | the sample rate expressed in Hertz. |
---|---|
channelConfig | describes the configuration of the audio channels.
See CHANNEL_OUT_MONO and
CHANNEL_OUT_STEREO |
audioFormat | the format in which the audio data is represented.
See ENCODING_PCM_16BIT and
ENCODING_PCM_8BIT |
ERROR_BAD_VALUE
if an invalid parameter was passed,
or ERROR
if the implementation was unable to query the hardware for its output
properties,
or the minimum buffer size expressed in bytes.
Returns the minimum valid volume value. Volume values set under this one will be clamped at this value.
Returns the hardware output sample rate
Returns marker position expressed in frames.
Returns the playback state of the AudioTrack instance.
Returns the playback head position expressed in frames
Returns the notification update period expressed in frames.
Returns the configured audio data sample rate in Hz
Returns the state of the AudioTrack instance. This is useful after the AudioTrack instance has been created to check if it was initialized properly. This ensures that the appropriate hardware resources have been acquired.
Returns the type of audio stream this AudioTrack is configured for.
Compare the result against STREAM_VOICE_CALL
,
STREAM_SYSTEM
, STREAM_RING
,
STREAM_MUSIC
, STREAM_ALARM
,
STREAM_NOTIFICATION
, or STREAM_DTMF
.
Pauses the playback of the audio data. Data that has not been played
back will not be discarded. Subsequent calls to play()
will play
this data back. See flush()
to discard this data.
IllegalStateException |
---|
Notifies the native resource to reuse the audio data already loaded in the native layer. This call is only valid with AudioTrack instances that don't use the streaming model.
SUCCESS
, ERROR_BAD_VALUE
,
ERROR_INVALID_OPERATION
Sets the send level of the audio track to the attached auxiliary effect
attachAuxEffect(int)
. The level value range is 0 to 1.0.
By default the send level is 0, so even if an effect is attached to the player this method must be called for the effect to be applied.
Note that the passed level value is a raw scalar. UI controls should be scaled logarithmically: the gain applied by audio framework ranges from -72dB to 0dB, so an appropriate conversion from linear UI input x to level is: x == 0 -> level = 0 0 < x <= R -> level = 10^(72*(x-R)/20/R)
level | send level scalar |
---|
SUCCESS
,
ERROR_INVALID_OPERATION
Sets the loop points and the loop count. The loop can be infinite.
startInFrames | loop start marker expressed in frames |
---|---|
endInFrames | loop end marker expressed in frames |
loopCount | the number of times the loop is looped. A value of -1 means infinite looping. |
SUCCESS
, ERROR_BAD_VALUE
,
ERROR_INVALID_OPERATION
Sets the position of the notification marker.
markerInFrames | marker in frames |
---|
SUCCESS
, ERROR_BAD_VALUE
,
ERROR_INVALID_OPERATION
Sets the playback head position. The track must be stopped for the position to be changed.
positionInFrames | playback head position expressed in frames |
---|
SUCCESS
, ERROR_BAD_VALUE
,
ERROR_INVALID_OPERATION
Sets the listener the AudioTrack notifies when a previously set marker is reached or for each periodic playback head position update. Notifications will be received in the same thread as the one in which the AudioTrack instance was created.
Sets the listener the AudioTrack notifies when a previously set marker is reached or for each periodic playback head position update. Use this method to receive AudioTrack events in the Handler associated with another thread than the one in which you created the AudioTrack instance.
handler | the Handler that will receive the event notification messages. |
---|
Sets the playback sample rate for this track. This sets the sampling rate at which
the audio data will be consumed and played back, not the original sampling rate of the
content. Setting it to half the sample rate of the content will cause the playback to
last twice as long, but will also result in a negative pitch shift.
The valid sample rate range is from 1Hz to twice the value returned by
getNativeOutputSampleRate(int)
.
sampleRateInHz | the sample rate expressed in Hz |
---|
SUCCESS
, ERROR_BAD_VALUE
,
ERROR_INVALID_OPERATION
Sets the period for the periodic notification event.
periodInFrames | update period expressed in frames |
---|
SUCCESS
, ERROR_INVALID_OPERATION
Sets the specified left/right output volume values on the AudioTrack. Values are clamped
to the (getMinVolume()
, getMaxVolume()
) interval if outside this range.
leftVolume | output attenuation for the left channel. A value of 0.0f is silence, a value of 1.0f is no attenuation. |
---|---|
rightVolume | output attenuation for the right channel |
SUCCESS
,
ERROR_INVALID_OPERATION
Stops playing the audio data.
When used on an instance created in MODE_STREAM
mode, audio will stop playing
after the last buffer that was written has been played. For an immediate stop, use
pause()
, followed by flush()
to discard audio data that hasn't been played
back yet.
IllegalStateException |
---|
Writes the audio data to the audio hardware for playback. Will block until
all data has been written to the audio mixer.
Note that the actual playback of this data might occur after this function
returns. This function is thread safe with respect to stop()
calls,
in which case all of the specified data might not be written to the mixer.
audioData | the array that holds the data to play. |
---|---|
offsetInShorts | the offset expressed in shorts in audioData where the data to play starts. |
sizeInShorts | the number of bytes to read in audioData after the offset. |
ERROR_INVALID_OPERATION
if the object wasn't properly initialized, or ERROR_BAD_VALUE
if
the parameters don't resolve to valid data and indexes.
Writes the audio data to the audio hardware for playback. Will block until
all data has been written to the audio mixer.
Note that the actual playback of this data might occur after this function
returns. This function is thread safe with respect to stop()
calls,
in which case all of the specified data might not be written to the mixer.
audioData | the array that holds the data to play. |
---|---|
offsetInBytes | the offset expressed in bytes in audioData where the data to play starts. |
sizeInBytes | the number of bytes to read in audioData after the offset. |
ERROR_INVALID_OPERATION
if the object wasn't properly initialized, or ERROR_BAD_VALUE
if
the parameters don't resolve to valid data and indexes.
Invoked when the garbage collector has detected that this instance is no longer reachable. The default implementation does nothing, but this method can be overridden to free resources.
Note that objects that override finalize
are significantly more expensive than
objects that don't. Finalizers may be run a long time after the object is no longer
reachable, depending on memory pressure, so it's a bad idea to rely on them for cleanup.
Note also that finalizers are run on a single VM-wide finalizer thread,
so doing blocking work in a finalizer is a bad idea. A finalizer is usually only necessary
for a class that has a native peer and needs to call a native method to destroy that peer.
Even then, it's better to provide an explicit close
method (and implement
Closeable
), and insist that callers manually dispose of instances. This
works well for something like files, but less well for something like a BigInteger
where typical calling code would have to deal with lots of temporaries. Unfortunately,
code that creates lots of temporaries is the worst kind of code from the point of view of
the single finalizer thread.
If you must use finalizers, consider at least providing your own
ReferenceQueue
and having your own thread process that queue.
Unlike constructors, finalizers are not automatically chained. You are responsible for
calling super.finalize()
yourself.
Uncaught exceptions thrown by finalizers are ignored and do not terminate the finalizer thread. See Effective Java Item 7, "Avoid finalizers" for more.
Returns the native frame count used by the hardware.
Sets the initialization state of the instance. To be used in an AudioTrack subclass constructor to set a subclass-specific post-initialization state.
state | the state of the AudioTrack instance |
---|