AudioRecord
  public
  
  
  
  class
  AudioRecord
  
    extends Object
  
  
  
  
  
      implements
      
        AudioRecordingMonitor, 
      
        AudioRouting, 
      
        MicrophoneDirection
      
  
  
| java.lang.Object | |
| ↳ | android.media.AudioRecord | 
The AudioRecord class manages the audio resources for Java applications
 to record audio from the audio input hardware of the platform. This is
 achieved by "pulling" (reading) the data from the AudioRecord object. The
 application is responsible for polling the AudioRecord object in time using one of
 the following three methods:  read(byte[], int, int), read(short[], int, int)
 or read(java.nio.ByteBuffer, int). The choice of which method to use will be based
 on the audio data storage format that is the most convenient for the user of AudioRecord.
 
Upon creation, an AudioRecord object initializes its associated audio buffer that it will fill with the new audio data. The size of this buffer, specified during the construction, determines how long an AudioRecord can record before "over-running" data that has not been read yet. Data should be read from the audio hardware in chunks of sizes inferior to the total recording buffer size.
 Applications creating an AudioRecord instance need
 Manifest.permission.RECORD_AUDIO or the Builder will throw
 UnsupportedOperationException on
 build(),
 and the constructor will return an instance in state
 STATE_UNINITIALIZED.
Summary
| Nested classes | |
|---|---|
| 
        
        
        
        
        class | AudioRecord.BuilderBuilder class for  | 
| 
        
        
        
        
        class | AudioRecord.MetricsConstants
 | 
| 
        
        
        
        
        interface | AudioRecord.OnRecordPositionUpdateListenerInterface definition for a callback to be invoked when an AudioRecord has
 reached a notification marker set by  | 
| 
        
        
        
        
        interface | AudioRecord.OnRoutingChangedListener
      This interface was deprecated
      in API level 24.
    users should switch to the general purpose
              | 
| Constants | |
|---|---|
| int | ERRORDenotes a generic operation failure. | 
| int | ERROR_BAD_VALUEDenotes a failure due to the use of an invalid value. | 
| int | ERROR_DEAD_OBJECTAn error code indicating that the object reporting it is no longer valid and needs to be recreated. | 
| int | ERROR_INVALID_OPERATIONDenotes a failure due to the improper use of a method. | 
| int | READ_BLOCKINGThe read mode indicating the read operation will block until all data requested has been read. | 
| int | READ_NON_BLOCKINGThe read mode indicating the read operation will return immediately after reading as much audio data as possible without blocking. | 
| int | RECORDSTATE_RECORDINGindicates AudioRecord recording state is recording | 
| int | RECORDSTATE_STOPPEDindicates AudioRecord recording state is not recording | 
| int | STATE_INITIALIZEDindicates AudioRecord state is ready to be used | 
| int | STATE_UNINITIALIZEDindicates AudioRecord state is not successfully initialized. | 
| int | SUCCESSDenotes a successful operation. | 
| Inherited constants | 
|---|
| Public constructors | |
|---|---|
| 
      AudioRecord(int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes)
      Class constructor. | |
| Public methods | |
|---|---|
| 
        
        
        
        
        
        void | 
      addOnRoutingChangedListener(AudioRecord.OnRoutingChangedListener listener, Handler handler)
      
      This method was deprecated
      in API level 24.
    users should switch to the general purpose
              | 
| 
        
        
        
        
        
        void | 
      addOnRoutingChangedListener(AudioRouting.OnRoutingChangedListener listener, Handler handler)
      Adds an  | 
| 
        
        
        
        
        
        List<MicrophoneInfo> | 
      getActiveMicrophones()
      Returns a lists of  | 
| 
        
        
        
        
        
        AudioRecordingConfiguration | 
      getActiveRecordingConfiguration()
      Returns the current active audio recording for this audio recorder. | 
| 
        
        
        
        
        
        int | 
      getAudioFormat()
      Returns the configured audio data encoding. | 
| 
        
        
        
        
        
        int | 
      getAudioSessionId()
      Returns the audio session ID. | 
| 
        
        
        
        
        
        int | 
      getAudioSource()
      Returns the audio recording source. | 
| 
        
        
        
        
        
        int | 
      getBufferSizeInFrames()
      Returns the frame count of the native  | 
| 
        
        
        
        
        
        int | 
      getChannelConfiguration()
      Returns the configured channel position mask. | 
| 
        
        
        
        
        
        int | 
      getChannelCount()
      Returns the configured number of channels. | 
| 
        
        
        
        
        
        AudioFormat | 
      getFormat()
      Returns the configured  | 
| 
        
        
        
        
        
        LogSessionId | 
      getLogSessionId()
      Returns the  | 
| 
        
        
        
        
        
        PersistableBundle | 
      getMetrics()
      Return Metrics data about the current AudioTrack instance. | 
| 
        
        
        static
        
        
        int | 
      getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat)
      Returns the minimum buffer size required for the successful creation of an AudioRecord object, in byte units. | 
| 
        
        
        
        
        
        int | 
      getNotificationMarkerPosition()
      Returns the notification marker position expressed in frames. | 
| 
        
        
        
        
        
        int | 
      getPositionNotificationPeriod()
      Returns the notification update period expressed in frames. | 
| 
        
        
        
        
        
        AudioDeviceInfo | 
      getPreferredDevice()
      Returns the selected input specified by  | 
| 
        
        
        
        
        
        int | 
      getRecordingState()
      Returns the recording state of the AudioRecord instance. | 
| 
        
        
        
        
        
        AudioDeviceInfo | 
      getRoutedDevice()
      Returns an  | 
| 
        
        
        
        
        
        List<AudioDeviceInfo> | 
      getRoutedDevices()
      Returns a List of  | 
| 
        
        
        
        
        
        int | 
      getSampleRate()
      Returns the configured audio sink sample rate in Hz. | 
| 
        
        
        
        
        
        int | 
      getState()
      Returns the state of the AudioRecord instance. | 
| 
        
        
        
        
        
        int | 
      getTimestamp(AudioTimestamp outTimestamp, int timebase)
      Poll for an  | 
| 
        
        
        
        
        
        boolean | 
      isPrivacySensitive()
      Returns whether this AudioRecord is marked as privacy sensitive or not. | 
| 
        
        
        
        
        
        int | 
      read(short[] audioData, int offsetInShorts, int sizeInShorts, int readMode)
      Reads audio data from the audio hardware for recording into a short array. | 
| 
        
        
        
        
        
        int | 
      read(ByteBuffer audioBuffer, int sizeInBytes, int readMode)
      Reads audio data from the audio hardware for recording into a direct buffer. | 
| 
        
        
        
        
        
        int | 
      read(short[] audioData, int offsetInShorts, int sizeInShorts)
      Reads audio data from the audio hardware for recording into a short array. | 
| 
        
        
        
        
        
        int | 
      read(float[] audioData, int offsetInFloats, int sizeInFloats, int readMode)
      Reads audio data from the audio hardware for recording into a float array. | 
| 
        
        
        
        
        
        int | 
      read(byte[] audioData, int offsetInBytes, int sizeInBytes, int readMode)
      Reads audio data from the audio hardware for recording into a byte array. | 
| 
        
        
        
        
        
        int | 
      read(ByteBuffer audioBuffer, int sizeInBytes)
      Reads audio data from the audio hardware for recording into a direct buffer. | 
| 
        
        
        
        
        
        int | 
      read(byte[] audioData, int offsetInBytes, int sizeInBytes)
      Reads audio data from the audio hardware for recording into a byte array. | 
| 
        
        
        
        
        
        void | 
      registerAudioRecordingCallback(Executor executor, AudioManager.AudioRecordingCallback cb)
      Register a callback to be notified of audio capture changes via a
  | 
| 
        
        
        
        
        
        void | 
      release()
      Releases the native AudioRecord resources. | 
| 
        
        
        
        
        
        void | 
      removeOnRoutingChangedListener(AudioRecord.OnRoutingChangedListener listener)
      
      This method was deprecated
      in API level 24.
    users should switch to the general purpose
              | 
| 
        
        
        
        
        
        void | 
      removeOnRoutingChangedListener(AudioRouting.OnRoutingChangedListener listener)
      Removes an  | 
| 
        
        
        
        
        
        void | 
      setLogSessionId(LogSessionId logSessionId)
      Sets a  | 
| 
        
        
        
        
        
        int | 
      setNotificationMarkerPosition(int markerInFrames)
      Sets the marker position at which the listener is called, if set with
  | 
| 
        
        
        
        
        
        int | 
      setPositionNotificationPeriod(int periodInFrames)
      Sets the period at which the listener is called, if set with
  | 
| 
        
        
        
        
        
        boolean | 
      setPreferredDevice(AudioDeviceInfo deviceInfo)
      Specifies an audio device (via an  | 
| 
        
        
        
        
        
        boolean | 
      setPreferredMicrophoneDirection(int direction)
      Specifies the logical microphone (for processing). | 
| 
        
        
        
        
        
        boolean | 
      setPreferredMicrophoneFieldDimension(float zoom)
      Specifies the zoom factor (i.e. | 
| 
        
        
        
        
        
        void | 
      setRecordPositionUpdateListener(AudioRecord.OnRecordPositionUpdateListener listener)
      Sets the listener the AudioRecord notifies when a previously set marker is reached or for each periodic record head position update. | 
| 
        
        
        
        
        
        void | 
      setRecordPositionUpdateListener(AudioRecord.OnRecordPositionUpdateListener listener, Handler handler)
      Sets the listener the AudioRecord notifies when a previously set marker is reached or for each periodic record head position update. | 
| 
        
        
        
        
        
        void | 
      startRecording(MediaSyncEvent syncEvent)
      Starts recording from the AudioRecord instance when the specified synchronization event occurs on the specified audio session. | 
| 
        
        
        
        
        
        void | 
      startRecording()
      Starts recording from the AudioRecord instance. | 
| 
        
        
        
        
        
        void | 
      stop()
      Stops recording. | 
| 
        
        
        
        
        
        void | 
      unregisterAudioRecordingCallback(AudioManager.AudioRecordingCallback cb)
      Unregister an audio recording callback previously registered with
  | 
| Protected methods | |
|---|---|
| 
        
        
        
        
        
        void | 
      finalize()
      Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. | 
| Inherited methods | |
|---|---|
Constants
ERROR
public static final int ERROR
Denotes a generic operation failure.
Constant Value: -1 (0xffffffff)
ERROR_BAD_VALUE
public static final int ERROR_BAD_VALUE
Denotes a failure due to the use of an invalid value.
Constant Value: -2 (0xfffffffe)
ERROR_DEAD_OBJECT
public static final int ERROR_DEAD_OBJECT
An error code indicating that the object reporting it is no longer valid and needs to be recreated.
Constant Value: -6 (0xfffffffa)
ERROR_INVALID_OPERATION
public static final int ERROR_INVALID_OPERATION
Denotes a failure due to the improper use of a method.
Constant Value: -3 (0xfffffffd)
READ_BLOCKING
public static final int READ_BLOCKING
The read mode indicating the read operation will block until all data requested has been read.
Constant Value: 0 (0x00000000)
READ_NON_BLOCKING
public static final int READ_NON_BLOCKING
The read mode indicating the read operation will return immediately after reading as much audio data as possible without blocking.
Constant Value: 1 (0x00000001)
RECORDSTATE_RECORDING
public static final int RECORDSTATE_RECORDING
indicates AudioRecord recording state is recording
Constant Value: 3 (0x00000003)
RECORDSTATE_STOPPED
public static final int RECORDSTATE_STOPPED
indicates AudioRecord recording state is not recording
Constant Value: 1 (0x00000001)
STATE_INITIALIZED
public static final int STATE_INITIALIZED
indicates AudioRecord state is ready to be used
Constant Value: 1 (0x00000001)
STATE_UNINITIALIZED
public static final int STATE_UNINITIALIZED
indicates AudioRecord state is not successfully initialized.
Constant Value: 0 (0x00000000)
SUCCESS
public static final int SUCCESS
Denotes a successful operation.
Constant Value: 0 (0x00000000)
Public constructors
AudioRecord
public AudioRecord (int audioSource, 
                int sampleRateInHz, 
                int channelConfig, 
                int audioFormat, 
                int bufferSizeInBytes)Class constructor.
 Though some invalid parameters will result in an IllegalArgumentException exception,
 other errors do not.  Thus you should call getState() immediately after construction
 to confirm that the object is usable.
 
 Requires Manifest.permission.RECORD_AUDIO
| Parameters | |
|---|---|
| audioSource | int: the recording source.
   SeeMediaRecorder.AudioSourcefor the recording source definitions. | 
| sampleRateInHz | int: the sample rate expressed in Hertz. 44100Hz is currently the only
   rate that is guaranteed to work on all devices, but other rates such as 22050,
   16000, and 11025 may work on some devices.AudioFormat.SAMPLE_RATE_UNSPECIFIEDmeans to use a route-dependent value
   which is usually the sample rate of the source.getSampleRate()can be used to retrieve the actual sample rate chosen. | 
| channelConfig | int: describes the configuration of the audio channels.
   SeeAudioFormat.CHANNEL_IN_MONOandAudioFormat.CHANNEL_IN_STEREO.AudioFormat.CHANNEL_IN_MONOis guaranteed
   to work on all devices. | 
| audioFormat | int: the format in which the audio data is to be returned.
   SeeAudioFormat.ENCODING_PCM_8BIT,AudioFormat.ENCODING_PCM_16BIT,
   andAudioFormat.ENCODING_PCM_FLOAT. | 
| bufferSizeInBytes | int: the total size (in bytes) of the buffer where audio data is written
   to during the recording. New audio data can be read from this buffer in smaller chunks
   than this size. SeegetMinBufferSize(int, int, int)to determine the minimum
   required buffer size for the successful creation of an AudioRecord instance. Using values
   smaller than getMinBufferSize() will result in an initialization failure. | 
| Throws | |
|---|---|
|  | java.lang.IllegalArgumentException | 
| IllegalArgumentException | |
Public methods
addOnRoutingChangedListener
public void addOnRoutingChangedListener (AudioRecord.OnRoutingChangedListener listener, Handler handler)
      This method was deprecated
      in API level 24.
    users should switch to the general purpose
             AudioRouting.OnRoutingChangedListener class instead.
  
Adds an OnRoutingChangedListener to receive notifications of routing changes
 on this AudioRecord.
| Parameters | |
|---|---|
| listener | AudioRecord.OnRoutingChangedListener: TheOnRoutingChangedListenerinterface to receive notifications
 of rerouting events. | 
| handler | Handler: Specifies theHandlerobject for the thread on which to execute
 the callback. Ifnull, theHandlerassociated with the mainLooperwill be used. | 
addOnRoutingChangedListener
public void addOnRoutingChangedListener (AudioRouting.OnRoutingChangedListener listener, Handler handler)
Adds an AudioRouting.OnRoutingChangedListener to receive notifications of
 routing changes on this AudioRecord.
| Parameters | |
|---|---|
| listener | AudioRouting.OnRoutingChangedListener: TheAudioRouting.OnRoutingChangedListenerinterface to receive
 notifications of rerouting events. | 
| handler | Handler: Specifies theHandlerobject for the thread on which to execute
 the callback. Ifnull, theHandlerassociated with the mainLooperwill be used. | 
getActiveMicrophones
public List<MicrophoneInfo> getActiveMicrophones ()
Returns a lists of MicrophoneInfo representing the active microphones.
 By querying channel mapping for each active microphone, developer can know how
 the microphone is used by each channels or a capture stream.
 Note that the information about the active microphones may change during a recording.
 See AudioManager.registerAudioDeviceCallback to be notified of changes
 in the audio devices, querying the active microphones then will return the latest
 information.
| Returns | |
|---|---|
| List<MicrophoneInfo> | a lists of MicrophoneInforepresenting the active microphones. | 
| Throws | |
|---|---|
| IOException | if an error occurs | 
getActiveRecordingConfiguration
public AudioRecordingConfiguration getActiveRecordingConfiguration ()
Returns the current active audio recording for this audio recorder.
| Returns | |
|---|---|
| AudioRecordingConfiguration | a valid AudioRecordingConfigurationif this recorder is active
 or null otherwise. | 
See also:
getAudioFormat
public int getAudioFormat ()
Returns the configured audio data encoding. See AudioFormat.ENCODING_PCM_8BIT,
 AudioFormat.ENCODING_PCM_16BIT, and AudioFormat.ENCODING_PCM_FLOAT.
| Returns | |
|---|---|
| int | |
getAudioSessionId
public int getAudioSessionId ()
Returns the audio session ID.
| Returns | |
|---|---|
| int | the ID of the audio session this AudioRecord belongs to. | 
getAudioSource
public int getAudioSource ()
Returns the audio recording source.
| Returns | |
|---|---|
| int | |
See also:
getBufferSizeInFrames
public int getBufferSizeInFrames ()
Returns the frame count of the native AudioRecord buffer.
  This is greater than or equal to the bufferSizeInBytes converted to frame units
  specified in the AudioRecord constructor or Builder.
  The native frame count may be enlarged to accommodate the requirements of the
  source on creation or if the AudioRecord
  is subsequently rerouted.
| Returns | |
|---|---|
| int | current size in frames of the AudioRecordbuffer. | 
| Throws | |
|---|---|
|  | java.lang.IllegalStateException | 
getChannelConfiguration
public int getChannelConfiguration ()
Returns the configured channel position mask.
 See AudioFormat.CHANNEL_IN_MONO
 and AudioFormat.CHANNEL_IN_STEREO.
 This method may return AudioFormat.CHANNEL_INVALID if
 a channel index mask is used.
 Consider getFormat() instead, to obtain an AudioFormat,
 which contains both the channel position mask and the channel index mask.
| Returns | |
|---|---|
| int | |
getChannelCount
public int getChannelCount ()
Returns the configured number of channels.
| Returns | |
|---|---|
| int | |
getFormat
public AudioFormat getFormat ()
Returns the configured AudioRecord format.
| Returns | |
|---|---|
| AudioFormat | an AudioFormatcontaining theAudioRecordparameters at the time of configuration.
 This value cannot benull. | 
getLogSessionId
public LogSessionId getLogSessionId ()
Returns the LogSessionId.
| Returns | |
|---|---|
| LogSessionId | This value cannot be null. | 
getMetrics
public PersistableBundle getMetrics ()
Return Metrics data about the current AudioTrack instance.
| Returns | |
|---|---|
| PersistableBundle | a PersistableBundlecontaining the set of attributes and values
 available for the media being handled by this instance of AudioRecord
 The attributes are descibed inMetricsConstants.
 Additional vendor-specific fields may also be present in
 the return value. | 
getMinBufferSize
public static int getMinBufferSize (int sampleRateInHz, 
                int channelConfig, 
                int audioFormat)Returns the minimum buffer size required for the successful creation of an AudioRecord
 object, in byte units.
 Note that this size doesn't guarantee a smooth recording under load, and higher values
 should be chosen according to the expected frequency at which the AudioRecord instance
 will be polled for new data.
 See AudioRecord(int, int, int, int, int) for more information on valid
 configuration values.
| Parameters | |
|---|---|
| sampleRateInHz | int: the sample rate expressed in Hertz.AudioFormat.SAMPLE_RATE_UNSPECIFIEDis not permitted. | 
| channelConfig | int: describes the configuration of the audio channels.
   SeeAudioFormat.CHANNEL_IN_MONOandAudioFormat.CHANNEL_IN_STEREO | 
| audioFormat | int: the format in which the audio data is represented.
   SeeAudioFormat.ENCODING_PCM_16BIT. | 
| Returns | |
|---|---|
| int | ERROR_BAD_VALUEif the recording parameters are not supported by the
  hardware, or an invalid parameter was passed,
  orERRORif the implementation was unable to query the hardware for its
  input properties,
   or the minimum buffer size expressed in bytes. | 
See also:
getNotificationMarkerPosition
public int getNotificationMarkerPosition ()
Returns the notification marker position expressed in frames.
| Returns | |
|---|---|
| int | |
getPositionNotificationPeriod
public int getPositionNotificationPeriod ()
Returns the notification update period expressed in frames.
| Returns | |
|---|---|
| int | |
getPreferredDevice
public AudioDeviceInfo getPreferredDevice ()
Returns the selected input specified by setPreferredDevice(AudioDeviceInfo). Note that this
 is not guarenteed to correspond to the actual device being used for recording.
| Returns | |
|---|---|
| AudioDeviceInfo | |
getRecordingState
public int getRecordingState ()
Returns the recording state of the AudioRecord instance.
| Returns | |
|---|---|
| int | |
See also:
getRoutedDevice
public AudioDeviceInfo getRoutedDevice ()
Returns an AudioDeviceInfo identifying the current routing of this AudioRecord.
 Note: The query is only valid if the AudioRecord is currently recording. If it is not,
 getRoutedDevice() will return null.
| Returns | |
|---|---|
| AudioDeviceInfo | |
getRoutedDevices
public List<AudioDeviceInfo> getRoutedDevices ()
Returns a List of AudioDeviceInfo identifying the current routing of this
 AudioRecord.
 Note: The query is only valid if the AudioRecord is currently playing. If it is not,
 getRoutedDevices() will return an empty list.
| Returns | |
|---|---|
| List<AudioDeviceInfo> | This value cannot be null. | 
getSampleRate
public int getSampleRate ()
Returns the configured audio sink sample rate in Hz.
 The sink sample rate never changes after construction.
 If the constructor had a specific sample rate, then the sink sample rate is that value.
 If the constructor had AudioFormat.SAMPLE_RATE_UNSPECIFIED,
 then the sink sample rate is a route-dependent default value based on the source [sic].
| Returns | |
|---|---|
| int | |
getState
public int getState ()
Returns the state of the AudioRecord instance. This is useful after the AudioRecord instance has been created to check if it was initialized properly. This ensures that the appropriate hardware resources have been acquired.
| Returns | |
|---|---|
| int | |
See also:
getTimestamp
public int getTimestamp (AudioTimestamp outTimestamp, int timebase)
Poll for an AudioTimestamp on demand.
 
The AudioTimestamp reflects the frame delivery information at the earliest point available in the capture pipeline.
 Calling startRecording() following a stop() will reset
 the frame count to 0.
| Parameters | |
|---|---|
| outTimestamp | AudioTimestamp: a caller provided non-null AudioTimestamp instance,
        which is updated with the AudioRecord frame delivery information upon success. | 
| timebase | int: one ofAudioTimestamp.TIMEBASE_BOOTTIMEorAudioTimestamp.TIMEBASE_MONOTONIC,
        used to select the clock for the AudioTimestamp time.
 Value isAudioTimestamp.TIMEBASE_MONOTONIC, orAudioTimestamp.TIMEBASE_BOOTTIME | 
| Returns | |
|---|---|
| int | SUCCESSif a timestamp is available,
         orERROR_INVALID_OPERATIONif a timestamp not available. | 
isPrivacySensitive
public boolean isPrivacySensitive ()
Returns whether this AudioRecord is marked as privacy sensitive or not.
 See Builder.setPrivacySensitive(boolean)
 
| Returns | |
|---|---|
| boolean | true if privacy sensitive, false otherwise | 
read
public int read (short[] audioData, 
                int offsetInShorts, 
                int sizeInShorts, 
                int readMode)Reads audio data from the audio hardware for recording into a short array.
 The format specified in the AudioRecord constructor should be
 AudioFormat.ENCODING_PCM_16BIT to correspond to the data in the array.
| Parameters | |
|---|---|
| audioData | short: the array to which the recorded audio data is written.
 This value cannot benull. | 
| offsetInShorts | int: index in audioData from which the data is written expressed in shorts.
        Must not be negative, or cause the data access to go out of bounds of the array. | 
| sizeInShorts | int: the number of requested shorts.
        Must not be negative, or cause the data access to go out of bounds of the array. | 
| readMode | int: one ofREAD_BLOCKING,READ_NON_BLOCKING.With READ_BLOCKING, the read will block until all the requested data
     is read.With READ_NON_BLOCKING, the read will return immediately after
     reading as much audio data as possible without blocking.
 Value isREAD_BLOCKING, orREAD_NON_BLOCKING | 
| Returns | |
|---|---|
| int | zero or the positive number of shorts that were read, or one of the following
    error codes. The number of shorts will be a multiple of the channel count not to exceed
    sizeInShorts. 
 | 
read
public int read (ByteBuffer audioBuffer, int sizeInBytes, int readMode)
Reads audio data from the audio hardware for recording into a direct buffer. If this buffer
 is not a direct buffer, this method will always return 0.
 Note that the value returned by Buffer.position() on this buffer is
 unchanged after a call to this method.
 The representation of the data in the buffer will depend on the format specified in
 the AudioRecord constructor, and will be native endian.
| Parameters | |
|---|---|
| audioBuffer | ByteBuffer: the direct buffer to which the recorded audio data is written.
    Data is written to the beginning of the byte buffer. Importantly, this
    method ignores theBuffer.position()andBuffer.limit()properties.
 This value cannot benull. | 
| sizeInBytes | int: the number of requested bytes. 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). | 
| readMode | int: one ofREAD_BLOCKING,READ_NON_BLOCKING.With READ_BLOCKING, the read will block until all the requested data
     is read.With READ_NON_BLOCKING, the read will return immediately after
     reading as much audio data as possible without blocking.
 Value isREAD_BLOCKING, orREAD_NON_BLOCKING | 
| Returns | |
|---|---|
| int | zero or the positive number of bytes that were read, or one of the following
    error codes. The number of bytes will not exceed sizeInBytes and will be truncated to be
    a multiple of the frame size. 
 | 
read
public int read (short[] audioData, 
                int offsetInShorts, 
                int sizeInShorts)Reads audio data from the audio hardware for recording into a short array.
 The format specified in the AudioRecord constructor should be
 AudioFormat.ENCODING_PCM_16BIT to correspond to the data in the array.
| Parameters | |
|---|---|
| audioData | short: the array to which the recorded audio data is written.
 This value cannot benull. | 
| offsetInShorts | int: index in audioData to which the data is written expressed in shorts.
        Must not be negative, or cause the data access to go out of bounds of the array. | 
| sizeInShorts | int: the number of requested shorts.
        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 read, or one of the following
    error codes. The number of shorts will be a multiple of the channel count not to exceed
    sizeInShorts. 
 | 
read
public int read (float[] audioData, 
                int offsetInFloats, 
                int sizeInFloats, 
                int readMode)Reads audio data from the audio hardware for recording into a float array.
 The format specified in the AudioRecord constructor should be
 AudioFormat.ENCODING_PCM_FLOAT to correspond to the data in the array.
| Parameters | |
|---|---|
| audioData | float: the array to which the recorded audio data is written.
 This value cannot benull. | 
| offsetInFloats | int: index in audioData from which the data is written.
        Must not be negative, or cause the data access to go out of bounds of the array. | 
| sizeInFloats | int: the number of requested floats.
        Must not be negative, or cause the data access to go out of bounds of the array. | 
| readMode | int: one ofREAD_BLOCKING,READ_NON_BLOCKING.With READ_BLOCKING, the read will block until all the requested data
     is read.With READ_NON_BLOCKING, the read will return immediately after
     reading as much audio data as possible without blocking.
 Value isREAD_BLOCKING, orREAD_NON_BLOCKING | 
| Returns | |
|---|---|
| int | zero or the positive number of floats that were read, or one of the following
    error codes. The number of floats will be a multiple of the channel count not to exceed
    sizeInFloats. 
 | 
read
public int read (byte[] audioData, 
                int offsetInBytes, 
                int sizeInBytes, 
                int readMode)Reads audio data from the audio hardware for recording into a byte array.
 The format specified in the AudioRecord constructor should be
 AudioFormat.ENCODING_PCM_8BIT to correspond to the data in the array.
 The format can be AudioFormat.ENCODING_PCM_16BIT, but this is deprecated.
| Parameters | |
|---|---|
| audioData | byte: the array to which the recorded audio data is written.
 This value cannot benull. | 
| offsetInBytes | int: index in audioData to which the data is written expressed in bytes.
        Must not be negative, or cause the data access to go out of bounds of the array. | 
| sizeInBytes | int: the number of requested bytes.
        Must not be negative, or cause the data access to go out of bounds of the array. | 
| readMode | int: one ofREAD_BLOCKING,READ_NON_BLOCKING.With READ_BLOCKING, the read will block until all the requested data
     is read.With READ_NON_BLOCKING, the read will return immediately after
     reading as much audio data as possible without blocking.
 Value isREAD_BLOCKING, orREAD_NON_BLOCKING | 
| Returns | |
|---|---|
| int | zero or the positive number of bytes that were read, 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. 
 | 
read
public int read (ByteBuffer audioBuffer, int sizeInBytes)
Reads audio data from the audio hardware for recording into a direct buffer. If this buffer
 is not a direct buffer, this method will always return 0.
 Note that the value returned by Buffer.position() on this buffer is
 unchanged after a call to this method.
 The representation of the data in the buffer will depend on the format specified in
 the AudioRecord constructor, and will be native endian.
| Parameters | |
|---|---|
| audioBuffer | ByteBuffer: the direct buffer to which the recorded audio data is written.
    Data is written to the beginning of the byte buffer. Importantly, this
    method ignores theBuffer.position()andBuffer.limit()properties.
 This value cannot benull. | 
| sizeInBytes | int: the number of requested bytes. 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). | 
| Returns | |
|---|---|
| int | zero or the positive number of bytes that were read, or one of the following
    error codes. The number of bytes will not exceed sizeInBytes and will be truncated to be
    a multiple of the frame size. 
 | 
read
public int read (byte[] audioData, 
                int offsetInBytes, 
                int sizeInBytes)Reads audio data from the audio hardware for recording into a byte array.
 The format specified in the AudioRecord constructor should be
 AudioFormat.ENCODING_PCM_8BIT to correspond to the data in the array.
| Parameters | |
|---|---|
| audioData | byte: the array to which the recorded audio data is written.
 This value cannot benull. | 
| offsetInBytes | int: index in audioData from which the data is written expressed in bytes. | 
| sizeInBytes | int: the number of requested bytes. | 
| Returns | |
|---|---|
| int | zero or the positive number of bytes that were read, or one of the following
    error codes. The number of bytes will not exceed sizeInBytes. 
 | 
registerAudioRecordingCallback
public void registerAudioRecordingCallback (Executor executor, AudioManager.AudioRecordingCallback cb)
Register a callback to be notified of audio capture changes via a
 AudioManager.AudioRecordingCallback. A callback is received when the capture path
 configuration changes (pre-processing, format, sampling rate...) or capture is
 silenced/unsilenced by the system.
| Parameters | |
|---|---|
| executor | Executor:Executorto handle the callbacks.
 This value cannot benull.
 Callback and listener events are dispatched through thisExecutor, providing an easy way to control which thread is
 used. To dispatch events through the main thread of your
 application, you can useContext.getMainExecutor().
 Otherwise, provide anExecutorthat dispatches to an appropriate thread. | 
| cb | AudioManager.AudioRecordingCallback: non-null callback to register | 
release
public void release ()
Releases the native AudioRecord resources. The object can no longer be used and the reference should be set to null after a call to release()
removeOnRoutingChangedListener
public void removeOnRoutingChangedListener (AudioRecord.OnRoutingChangedListener listener)
      This method was deprecated
      in API level 24.
    users should switch to the general purpose
             AudioRouting.OnRoutingChangedListener class instead.
  
Removes an OnRoutingChangedListener which has been previously added
 to receive rerouting notifications.
| Parameters | |
|---|---|
| listener | AudioRecord.OnRoutingChangedListener: The previously addedOnRoutingChangedListenerinterface to remove. | 
removeOnRoutingChangedListener
public void removeOnRoutingChangedListener (AudioRouting.OnRoutingChangedListener listener)
Removes an AudioRouting.OnRoutingChangedListener which has been previously added
 to receive rerouting notifications.
| Parameters | |
|---|---|
| listener | AudioRouting.OnRoutingChangedListener: The previously addedAudioRouting.OnRoutingChangedListenerinterface
 to remove. | 
setLogSessionId
public void setLogSessionId (LogSessionId logSessionId)
Sets a LogSessionId instance to this AudioRecord for metrics collection.
| Parameters | |
|---|---|
| logSessionId | LogSessionId: aLogSessionIdinstance which is used to
        identify this object to the metrics service. Proper generated
        Ids must be obtained from the Java metrics service and should
        be considered opaque. UseLogSessionId.LOG_SESSION_ID_NONEto remove the
        logSessionId association.
 This value cannot benull. | 
| Throws | |
|---|---|
| IllegalStateException | if AudioRecord not initialized. | 
setNotificationMarkerPosition
public int setNotificationMarkerPosition (int markerInFrames)
Sets the marker position at which the listener is called, if set with
 setRecordPositionUpdateListener(android.media.AudioRecord.OnRecordPositionUpdateListener) or
 setRecordPositionUpdateListener(android.media.AudioRecord.OnRecordPositionUpdateListener, android.os.Handler).
| Parameters | |
|---|---|
| markerInFrames | int: marker position expressed in frames | 
| Returns | |
|---|---|
| int | error code or success, see SUCCESS,ERROR_BAD_VALUE,ERROR_INVALID_OPERATION | 
setPositionNotificationPeriod
public int setPositionNotificationPeriod (int periodInFrames)
Sets the period at which the listener is called, if set with
 setRecordPositionUpdateListener(android.media.AudioRecord.OnRecordPositionUpdateListener) or
 setRecordPositionUpdateListener(android.media.AudioRecord.OnRecordPositionUpdateListener, android.os.Handler).
 It is possible for notifications to be lost if the period is too small.
| Parameters | |
|---|---|
| periodInFrames | int: update period expressed in frames | 
| Returns | |
|---|---|
| int | error code or success, see SUCCESS,ERROR_INVALID_OPERATION | 
setPreferredDevice
public boolean setPreferredDevice (AudioDeviceInfo deviceInfo)
Specifies an audio device (via an AudioDeviceInfo object) to route
 the input to this AudioRecord.
| Parameters | |
|---|---|
| deviceInfo | AudioDeviceInfo: TheAudioDeviceInfospecifying the audio source.
  If deviceInfo is null, default routing is restored. | 
| Returns | |
|---|---|
| boolean | true if successful, false if the specified AudioDeviceInfois non-null and
 does not correspond to a valid audio input device. | 
setPreferredMicrophoneDirection
public boolean setPreferredMicrophoneDirection (int direction)
Specifies the logical microphone (for processing). Applications can use this to specify which side of the device to optimize capture from. Typically used in conjunction with the camera capturing video.
| Returns | |
|---|---|
| boolean | true if sucessful. | 
setPreferredMicrophoneFieldDimension
public boolean setPreferredMicrophoneFieldDimension (float zoom)
Specifies the zoom factor (i.e. the field dimension) for the selected microphone (for processing). The selected microphone is determined by the use-case for the stream.
| Parameters | |
|---|---|
| zoom | float: the desired field dimension of microphone capture. Range is from -1 (wide angle),
 though 0 (no zoom) to 1 (maximum zoom).
 Value is between -1.0f and 1.0f inclusive | 
| Returns | |
|---|---|
| boolean | true if sucessful. | 
setRecordPositionUpdateListener
public void setRecordPositionUpdateListener (AudioRecord.OnRecordPositionUpdateListener listener)
Sets the listener the AudioRecord notifies when a previously set marker is reached or for each periodic record head position update.
setRecordPositionUpdateListener
public void setRecordPositionUpdateListener (AudioRecord.OnRecordPositionUpdateListener listener, Handler handler)
Sets the listener the AudioRecord notifies when a previously set marker is reached or for each periodic record head position update. Use this method to receive AudioRecord events in the Handler associated with another thread than the one in which you created the AudioRecord instance.
| Parameters | |
|---|---|
| handler | Handler: the Handler that will receive the event notification messages. | 
startRecording
public void startRecording (MediaSyncEvent syncEvent)
Starts recording from the AudioRecord instance when the specified synchronization event occurs on the specified audio session.
| Parameters | |
|---|---|
| syncEvent | MediaSyncEvent: event that triggers the capture. | 
| Throws | |
|---|---|
|  | java.lang.IllegalStateException | 
| IllegalStateException | |
See also:
startRecording
public void startRecording ()
Starts recording from the AudioRecord instance.
| Throws | |
|---|---|
|  | java.lang.IllegalStateException | 
| IllegalStateException | |
stop
public void stop ()
Stops recording.
| Throws | |
|---|---|
|  | java.lang.IllegalStateException | 
| IllegalStateException | |
unregisterAudioRecordingCallback
public void unregisterAudioRecordingCallback (AudioManager.AudioRecordingCallback cb)
Unregister an audio recording callback previously registered with
 registerAudioRecordingCallback(java.util.concurrent.Executor, android.media.AudioManager.AudioRecordingCallback).
| Parameters | |
|---|---|
| cb | AudioManager.AudioRecordingCallback: non-null callback to unregister | 
Protected methods
finalize
protected void finalize ()
Called by the garbage collector on an object when garbage collection
 determines that there are no more references to the object.
 A subclass overrides the finalize method to dispose of
 system resources or to perform other cleanup.
 
 The general contract of finalize is that it is invoked
 if and when the Java virtual
 machine has determined that there is no longer any
 means by which this object can be accessed by any thread that has
 not yet died, except as a result of an action taken by the
 finalization of some other object or class which is ready to be
 finalized. The finalize method may take any action, including
 making this object available again to other threads; the usual purpose
 of finalize, however, is to perform cleanup actions before
 the object is irrevocably discarded. For example, the finalize method
 for an object that represents an input/output connection might perform
 explicit I/O transactions to break the connection before the object is
 permanently discarded.
 
 The finalize method of class Object performs no
 special action; it simply returns normally. Subclasses of
 Object may override this definition.
 
 The Java programming language does not guarantee which thread will
 invoke the finalize method for any given object. It is
 guaranteed, however, that the thread that invokes finalize will not
 be holding any user-visible synchronization locks when finalize is
 invoked. If an uncaught exception is thrown by the finalize method,
 the exception is ignored and finalization of that object terminates.
 
 After the finalize method has been invoked for an object, no
 further action is taken until the Java virtual machine has again
 determined that there is no longer any means by which this object can
 be accessed by any thread that has not yet died, including possible
 actions by other objects or classes which are ready to be finalized,
 at which point the object may be discarded.
 
 The finalize method is never invoked more than once by a Java
 virtual machine for any given object.
 
 Any exception thrown by the finalize method causes
 the finalization of this object to be halted, but is otherwise
 ignored.
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2025-09-17 UTC.
