File: audio.md | Updated: 11/15/2025
Hide navigation
Search
Ctrl K
Home Guides EAS Reference Learn
Reference version
SDK 52
Archive Expo Snack Discord and Forums Newsletter
Expo Audio (expo-audio)A library that provides an API to implement audio playback and recording in apps.
Android
iOS
Web
Bundled version:
~0.3.5
Copy page
This page documents an upcoming version of the Audio library. Expo Audio is currently in alpha and subject to breaking changes.
expo-audio is a cross-platform audio library for accessing the native audio capabilities of the device.
Note that audio automatically stops if headphones/bluetooth audio devices are disconnected.
Terminal
Copy
- npx expo install expo-audio
If you are installing this in an existing React Native app
, make sure to install expo
in your project.
You can configure expo-audio using its built-in config plugin
if you use config plugins in your project (Continuous Native Generation (CNG)
). The plugin allows you to configure various properties that cannot be set at runtime and require building a new app binary to take effect. If your app does not use CNG, then you'll need to manually configure the library.
app.json
Copy
{ "expo": { "plugins": [ [ "expo-audio", { "microphonePermission": "Allow $(PRODUCT_NAME) to access your microphone." } ] ] } }
| Name | Default | Description |
| --- | --- | --- |
| microphonePermission | "Allow $(PRODUCT_NAME) to access your microphone" | Only for: <br><br>iOS<br><br> <br><br>A string to set the NSMicrophoneUsageDescription<br> permission message. |
Playing sounds
Copy
Open in Snack
import { View, StyleSheet, Button } from 'react-native'; import { useAudioPlayer } from 'expo-audio'; const audioSource = require('./assets/Hello.mp3'); export default function App() { const player = useAudioPlayer(audioSource); return ( <View style={styles.container}> <Button title="Play Sound" onPress={() => player.play()} /> </View> ); } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', backgroundColor: '#ecf0f1', padding: 10, }, });
Show More
Recording sounds
Copy
Open in Snack
import { useState } from 'react'; import { View, StyleSheet, Button } from 'react-native'; import { useAudioRecorder, AudioModule, RecordingPresets } from 'expo-audio'; export default function App() { const audioRecorder = useAudioRecorder(RecordingPresets.HIGH_QUALITY); const record = async () => { await audioRecorder.prepareToRecordAsync(); audioRecorder.record(); }; const stopRecording = async () => { // The recording will be available on `audioRecorder.uri`. await audioRecorder.stop(); }; useEffect(() => { (async () => { const status = await AudioModule.requestRecordingPermissionsAsync(); if (!status.granted) { Alert.alert('Permission to access microphone was denied'); } })(); }, []); return ( <View style={styles.container}> <Button title={audioRecorder.isRecording ? 'Stop Recording' : 'Start Recording'} onPress={audioRecorder.isRecording ? stopRecording : record} /> </View> ); } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', backgroundColor: '#ecf0f1', padding: 10, }, });
Show More
iOS
On iOS, audio playback and recording in background is only available in standalone apps, and it requires some extra configuration. On iOS, each background feature requires a special key in UIBackgroundModes array in your Info.plist file. In standalone apps this array is empty by default, so to use background features you will need to add appropriate keys to your app.json configuration.
See an example of app.json that enables audio playback in background:
{ "expo": { ... "ios": { ... "infoPlist": { ... "UIBackgroundModes": [ "audio" ] } } } }
prepareToRecordAsync will be passed directly to the MediaRecorder API and as such the polyfill.getUserMedia() security
for more details.import { useAudioPlayer, useAudioRecorder } from 'expo-audio';
Audio.AUDIO_SAMPLE_UPDATEAndroid
iOS
Web
Type: 'audioSampleUpdate'
Audio.PLAYBACK_STATUS_UPDATEAndroid
iOS
Web
Type: 'playbackStatusUpdate'
Audio.RECORDING_STATUS_UPDATEAndroid
iOS
Web
Type: 'recordingStatusUpdate'
Audio.RecordingPresetsAndroid
iOS
Web
Type: Record<string, [RecordingOptions](https://docs.expo.dev/versions/v52.0.0/sdk/audio#recordingoptions) >
Constant which contains definitions of the two preset examples of RecordingOptions, as implemented in the Audio SDK.
HIGH_QUALITYRecordingPresets.HIGH_QUALITY = { extension: '.m4a', sampleRate: 44100, numberOfChannels: 2, bitRate: 128000, android: { outputFormat: 'mpeg4', audioEncoder: 'aac', }, ios: { outputFormat: IOSOutputFormat.MPEG4AAC, audioQuality: AudioQuality.MAX, linearPCMBitDepth: 16, linearPCMIsBigEndian: false, linearPCMIsFloat: false, }, web: { mimeType: 'audio/webm', bitsPerSecond: 128000, }, };
Show More
LOW_QUALITYRecordingPresets.LOW_QUALITY = { extension: '.m4a', sampleRate: 44100, numberOfChannels: 2, bitRate: 64000, android: { extension: '.3gp', outputFormat: '3gp', audioEncoder: 'amr_nb', }, ios: { audioQuality: AudioQuality.MIN, outputFormat: IOSOutputFormat.MPEG4AAC, linearPCMBitDepth: 16, linearPCMIsBigEndian: false, linearPCMIsFloat: false, }, web: { mimeType: 'audio/webm', bitsPerSecond: 128000, }, };
Show More
useAudioPlayer(source, updateInterval)Android
iOS
Web
| Parameter | Type |
| --- | --- |
| source(optional) | number \| [AudioSource](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audiosource) |
| updateInterval(optional) | number |
Returns:
[AudioPlayer](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audioplayer)
useAudioPlayerStatus(player)Android
iOS
Web
| Parameter | Type |
| --- | --- |
| player | [AudioPlayer](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audioplayer) |
Returns:
[AudioStatus](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audiostatus)
useAudioRecorder(options, statusListener)Android
iOS
Web
| Parameter | Type |
| --- | --- |
| options | [RecordingOptions](https://docs.expo.dev/versions/v52.0.0/sdk/audio#recordingoptions) |
| statusListener(optional) | (status: [RecordingStatus](https://docs.expo.dev/versions/v52.0.0/sdk/audio#recordingstatus) ) => void |
Returns:
[AudioRecorder](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audiorecorder)
useAudioRecorderState(recorder, interval)Android
iOS
Web
| Parameter | Type |
| --- | --- |
| recorder | [AudioRecorder](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audiorecorder) |
| interval(optional) | number |
Returns:
[RecorderState](https://docs.expo.dev/versions/v52.0.0/sdk/audio#recorderstate)
useAudioSampleListener(player, listener)Android
iOS
Web
| Parameter | Type |
| --- | --- |
| player | [AudioPlayer](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audioplayer) |
| listener | (data: [AudioSample](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audiosample) ) => void |
Returns:
void
AudioPlayerAndroid
iOS
Web
Type: Class extends [SharedObject](https://docs.expo.dev/versions/v52.0.0/sdk/expo#sharedobject) <[AudioEvents](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audioevents) >
AudioPlayer Properties
currentTimeAndroid
iOS
Web
Type: number
The current position through the audio item, in seconds.
durationAndroid
iOS
Web
Type: number
The total duration of the audio in seconds.
idAndroid
iOS
Web
Type: number
Unique identifier for the player object.
isAudioSamplingSupportedAndroid
iOS
Web
Type: boolean
Boolean value indicating whether audio sampling is supported on the platform.
isBufferingAndroid
iOS
Web
Type: boolean
Boolean value indicating whether the player is buffering.
isLoadedAndroid
iOS
Web
Type: boolean
Boolean value indicating whether the player is finished loading.
loopAndroid
iOS
Web
Type: boolean
Boolean value indicating whether the player is currently looping.
mutedAndroid
iOS
Web
Type: boolean
Boolean value indicating whether the player is currently muted.
pausedAndroid
iOS
Web
Type: boolean
Boolean value indicating whether the player is currently paused.
playbackRateAndroid
iOS
Web
Type: number
The current playback rate of the audio.
playingAndroid
iOS
Web
Type: boolean
Boolean value indicating whether the player is currently playing.
shouldCorrectPitchAndroid
iOS
Web
Type: boolean
A boolean describing if we are correcting the pitch for a changed rate.
volumeAndroid
iOS
Web
Type: number
The current volume of the audio.
AudioPlayer Methods
pause()Android
iOS
Web
Pauses the player.
Returns:
void
play()Android
iOS
Web
Start playing audio.
Returns:
void
remove()Android
iOS
Web
Remove the player from memory to free up resources.
Returns:
void
replace(source)Android
iOS
Web
| Parameter | Type |
| --- | --- |
| source | [AudioSource](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audiosource) |
Replaces the current audio source with a new one.
Returns:
void
seekTo(seconds)Android
iOS
Web
| Parameter | Type | Description |
| --- | --- | --- |
| seconds | number | The number of seconds to seek by. |
Seeks the playback by the given number of seconds.
Returns:
[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) <void>
setPlaybackRate(rate, pitchCorrectionQuality)Android
iOS
Web
| Parameter | Type | Description |
| --- | --- | --- |
| rate | number | The playback rate of the audio. |
| pitchCorrectionQuality(optional) | [PitchCorrectionQuality](https://docs.expo.dev/versions/v52.0.0/sdk/audio#pitchcorrectionquality) | The quality of the pitch correction. |
Sets the current playback rate of the audio.
Returns:
void
AudioRecorderAndroid
iOS
Web
Type: Class extends [SharedObject](https://docs.expo.dev/versions/v52.0.0/sdk/expo#sharedobject) <[RecordingEvents](https://docs.expo.dev/versions/v52.0.0/sdk/audio#recordingevents) >
AudioRecorder Properties
currentTimeAndroid
iOS
Web
Type: number
The current length of the recording, in seconds.
idAndroid
iOS
Web
Type: number
Unique identifier for the recorder object.
isRecordingAndroid
iOS
Web
Type: boolean
Boolean value indicating whether the recording is in progress.
uriAndroid
iOS
Web
Literal type: union
The uri of the recording.
Acceptable values are: null | string
AudioRecorder Methods
getAvailableInputs()Android
iOS
Web
Returns a list of available recording inputs. This method can only be called if the Recording has been prepared.
Returns:
[RecordingInput[]](https://docs.expo.dev/versions/v52.0.0/sdk/audio#recordinginput)
A Promise that is fulfilled with an array of RecordingInput objects.
getCurrentInput()Android
iOS
Web
Returns the currently-selected recording input. This method can only be called if the Recording has been prepared.
Returns:
[RecordingInput](https://docs.expo.dev/versions/v52.0.0/sdk/audio#recordinginput)
A Promise that is fulfilled with a RecordingInput object.
getStatus()Android
iOS
Web
Status of the current recording.
Returns:
[RecorderState](https://docs.expo.dev/versions/v52.0.0/sdk/audio#recorderstate)
pause()Android
iOS
Web
Pause the recording.
Returns:
void
prepareToRecordAsync(options)Android
iOS
Web
| Parameter | Type |
| --- | --- |
| options(optional) | [Partial](https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype) <[RecordingOptions](https://docs.expo.dev/versions/v52.0.0/sdk/audio#recordingoptions) > |
Prepares the recording for recording.
Returns:
[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) <void>
record()Android
iOS
Web
Starts the recording.
Returns:
void
recordForDuration(seconds)Android
iOS
Web
| Parameter | Type | Description |
| --- | --- | --- |
| seconds | number | The time in seconds to stop recording at. |
Stops the recording once the specified time has elapsed.
Returns:
void
setInput(inputUid)Android
iOS
Web
| Parameter | Type | Description |
| --- | --- | --- |
| inputUid | string | The uid of a RecordingInput. |
Sets the current recording input.
Returns:
void
A Promise that is resolved if successful or rejected if not.
startRecordingAtTime(seconds)Android
iOS
Web
| Parameter | Type | Description |
| --- | --- | --- |
| seconds | number | The time in seconds to start recording at. |
Starts the recording at the given time.
Returns:
void
stop()Android
iOS
Web
Stop the recording.
Returns:
[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) <void>
Audio.getRecordingPermissionsAsync()Android
iOS
Web
Returns:
[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) <PermissionResponse>
Audio.requestRecordingPermissionsAsync()Android
iOS
Web
Returns:
[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) <PermissionResponse>
Audio.setAudioModeAsync(mode)Android
iOS
Web
| Parameter | Type |
| --- | --- |
| mode | [Partial](https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype) <[AudioMode](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audiomode) > |
Returns:
[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) <void>
Audio.setIsAudioActiveAsync(active)Android
iOS
Web
| Parameter | Type |
| --- | --- |
| active | boolean |
Returns:
[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) <void>
Audio.useAudioSampleListener(player, listener)Android
iOS
Web
| Parameter | Type |
| --- | --- |
| player | [AudioPlayer](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audioplayer) |
| listener | (data: [AudioSample](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audiosample) ) => void |
Returns:
void
PermissionResponseAndroid
iOS
Web
An object obtained by permissions get and request functions.
| Property | Type | Description |
| --- | --- | --- |
| canAskAgain | boolean | Indicates if user can be asked again for specific permission. If not, one should be directed to the Settings app in order to enable/disable the permission. |
| expires | [PermissionExpiration](https://docs.expo.dev/versions/v52.0.0/sdk/audio#permissionexpiration) | Determines time when the permission expires. |
| granted | boolean | A convenience boolean that indicates if the permission is granted. |
| status | [PermissionStatus](https://docs.expo.dev/versions/v52.0.0/sdk/audio#permissionstatus) | Determines the status of the permission. |
AndroidAudioEncoderAndroid
iOS
Web
Literal Type: string
Acceptable values are: 'default' | 'amr_nb' | 'amr_wb' | 'aac' | 'he_aac' | 'aac_eld'
AndroidOutputFormatAndroid
iOS
Web
Literal Type: string
Acceptable values are: 'default' | '3gp' | 'mpeg4' | 'amrnb' | 'amrwb' | 'aac_adts' | 'mpeg2ts' | 'webm'
AudioEventsAndroid
iOS
Web
| Property | Type | Description |
| --- | --- | --- |
| audioSampleUpdate | (data: [AudioSample](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audiosample) ) => void | - |
| playbackStatusUpdate | (status: [AudioStatus](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audiostatus) ) => void | - |
AudioModeAndroid
iOS
Web
| Property | Type | Description |
| --- | --- | --- |
| allowsRecording | boolean | - |
| interruptionMode | [InterruptionMode](https://docs.expo.dev/versions/v52.0.0/sdk/audio#interruptionmode) | - |
| playsInSilentMode | boolean | - |
| shouldPlayInBackground | boolean | - |
| shouldRouteThroughEarpiece | boolean | - |
AudioSampleAndroid
iOS
Web
| Property | Type | Description |
| --- | --- | --- |
| channels | [AudioSampleChannel[]](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audiosamplechannel) | - |
| timestamp | number | - |
AudioSampleChannelAndroid
iOS
Web
| Property | Type | Description |
| --- | --- | --- |
| frames | number[] | - |
AudioSourceAndroid
iOS
Web
Type: string or null or object shaped as below:
| Property | Type | Description |
| --- | --- | --- |
| headers(optional) | Record<string, string> | An object representing the HTTP headers to send along with the request for a remote audio source. On web requires the Access-Control-Allow-Origin header returned by the server to include the current domain. |
| uri(optional) | string | A string representing the resource identifier for the audio, which could be an HTTPS address, a local file path, or the name of a static audio file resource. |
AudioStatusAndroid
iOS
Web
| Property | Type | Description |
| --- | --- | --- |
| currentTime | number | - |
| duration | number | - |
| id | number | - |
| isBuffering | boolean | - |
| isLoaded | boolean | - |
| loop | boolean | - |
| mute | boolean | - |
| playbackRate | number | - |
| playbackState | string | - |
| playing | boolean | - |
| reasonForWaitingToPlay | string | - |
| shouldCorrectPitch | boolean | - |
| timeControlStatus | string | - |
BitRateStrategyAndroid
iOS
Web
Literal Type: string
Acceptable values are: 'constant' | 'longTermAverage' | 'variableConstrained' | 'variable'
InterruptionModeAndroid
iOS
Web
Literal Type: string
Acceptable values are: 'mixWithOthers' | 'doNotMix' | 'duckOthers'
PermissionExpirationAndroid
iOS
Web
Literal Type: union
Permission expiration time. Currently, all permissions are granted permanently.
Acceptable values are: 'never' | number
PitchCorrectionQualityAndroid
iOS
Web
Literal Type: string
Acceptable values are: 'low' | 'medium' | 'high'
RecorderStateAndroid
iOS
Web
| Property | Type | Description |
| --- | --- | --- |
| canRecord | boolean | - |
| durationMillis | number | - |
| isRecording | boolean | - |
| mediaServicesDidReset | boolean | - |
| metering(optional) | number | - |
| url | string \| null | - |
RecordingEventsAndroid
iOS
Web
| Property | Type | Description |
| --- | --- | --- |
| recordingStatusUpdate | (status: [RecordingStatus](https://docs.expo.dev/versions/v52.0.0/sdk/audio#recordingstatus) ) => void | - |
RecordingInputAndroid
iOS
Web
| Property | Type | Description |
| --- | --- | --- |
| name | string | - |
| type | string | - |
| uid | string | - |
RecordingOptionsAndroid
iOS
Web
| Property | Type | Description |
| --- | --- | --- |
| android | [RecordingOptionsAndroid](https://docs.expo.dev/versions/v52.0.0/sdk/audio#recordingoptionsandroid) | Recording options for the Android platform. |
| bitRate | number | The desired bit rate.<br><br>Example<br><br>128000 |
| extension | string | The desired file extension.<br><br>Example<br><br>.caf |
| ios | [RecordingOptionsIos](https://docs.expo.dev/versions/v52.0.0/sdk/audio#recordingoptionsios) | Recording options for the iOS platform. |
| numberOfChannels | number | The desired number of channels.<br><br>Example<br><br>2 |
| sampleRate | number | The desired sample rate.<br><br>Example<br><br>44100 |
| web(optional) | [RecordingOptionsWeb](https://docs.expo.dev/versions/v52.0.0/sdk/audio#recordingoptionsweb) | Recording options for the Web platform. |
RecordingOptionsAndroidAndroid
iOS
Web
| Property | Type | Description |
| --- | --- | --- |
| audioEncoder | [AndroidAudioEncoder](https://docs.expo.dev/versions/v52.0.0/sdk/audio#androidaudioencoder) | The desired audio encoder. See the AndroidAudioEncoder<br> enum for all valid values. |
| extension(optional) | string | The desired file extension.<br><br>Example<br><br>.caf |
| maxFileSize(optional) | number | The desired maximum file size in bytes, after which the recording will stop (but stopAndUnloadAsync() must still be called after this point).<br><br>Example<br><br>65536 |
| outputFormat | [AndroidOutputFormat](https://docs.expo.dev/versions/v52.0.0/sdk/audio#androidoutputformat) | The desired file format. See the AndroidOutputFormat<br> enum for all valid values. |
| sampleRate(optional) | number | The desired sample rate.<br><br>Example<br><br>44100 |
RecordingOptionsIosAndroid
iOS
Web
| Property | Type | Description |
| --- | --- | --- |
| audioQuality | [AudioQuality](https://docs.expo.dev/versions/v52.0.0/sdk/audio#audioquality) \| number | The desired audio quality. See the AudioQuality<br> enum for all valid values. |
| bitDepthHint(optional) | number | The desired bit depth hint.<br><br>Example<br><br>16 |
| bitRateStrategy(optional) | number | The desired bit rate strategy. See the next section for an enumeration of all valid values of bitRateStrategy. |
| extension(optional) | string | The desired file extension.<br><br>Example<br><br>.caf |
| linearPCMBitDepth(optional) | number | The desired PCM bit depth.<br><br>Example<br><br>16 |
| linearPCMIsBigEndian(optional) | boolean | A boolean describing if the PCM data should be formatted in big endian. |
| linearPCMIsFloat(optional) | boolean | A boolean describing if the PCM data should be encoded in floating point or integral values. |
| outputFormat(optional) | string \| [IOSOutputFormat](https://docs.expo.dev/versions/v52.0.0/sdk/audio#iosoutputformat) \| number | The desired file format. See the IOSOutputFormat<br> enum for all valid values. |
| sampleRate(optional) | number | The desired sample rate.<br><br>Example<br><br>44100 |
RecordingOptionsWebAndroid
iOS
Web
| Property | Type | Description |
| --- | --- | --- |
| bitsPerSecond(optional) | number | - |
| mimeType(optional) | string | - |
RecordingStatusAndroid
iOS
Web
| Property | Type | Description |
| --- | --- | --- |
| error | string \| null | - |
| hasError | boolean | - |
| id | number | - |
| isFinished | boolean | - |
| url | string \| null | - |
AudioQualityAndroid
iOS
Web
MINAudioQuality.MIN = 0
LOWAudioQuality.LOW = 32
MEDIUMAudioQuality.MEDIUM = 64
HIGHAudioQuality.HIGH = 96
MAXAudioQuality.MAX = 127
IOSOutputFormatAndroid
iOS
Web
MPEGLAYER1IOSOutputFormat.MPEGLAYER1 = ".mp1"
MPEGLAYER2IOSOutputFormat.MPEGLAYER2 = ".mp2"
MPEGLAYER3IOSOutputFormat.MPEGLAYER3 = ".mp3"
MPEG4AACIOSOutputFormat.MPEG4AAC = "aac "
MPEG4AAC_ELDIOSOutputFormat.MPEG4AAC_ELD = "aace"
MPEG4AAC_ELD_SBRIOSOutputFormat.MPEG4AAC_ELD_SBR = "aacf"
MPEG4AAC_ELD_V2IOSOutputFormat.MPEG4AAC_ELD_V2 = "aacg"
MPEG4AAC_HEIOSOutputFormat.MPEG4AAC_HE = "aach"
MPEG4AAC_LDIOSOutputFormat.MPEG4AAC_LD = "aacl"
MPEG4AAC_HE_V2IOSOutputFormat.MPEG4AAC_HE_V2 = "aacp"
MPEG4AAC_SPATIALIOSOutputFormat.MPEG4AAC_SPATIAL = "aacs"
AC3IOSOutputFormat.AC3 = "ac-3"
AES3IOSOutputFormat.AES3 = "aes3"
APPLELOSSLESSIOSOutputFormat.APPLELOSSLESS = "alac"
ALAWIOSOutputFormat.ALAW = "alaw"
AUDIBLEIOSOutputFormat.AUDIBLE = "AUDB"
60958AC3IOSOutputFormat.60958AC3 = "cac3"
MPEG4CELPIOSOutputFormat.MPEG4CELP = "celp"
ENHANCEDAC3IOSOutputFormat.ENHANCEDAC3 = "ec-3"
MPEG4HVXCIOSOutputFormat.MPEG4HVXC = "hvxc"
ILBCIOSOutputFormat.ILBC = "ilbc"
APPLEIMA4IOSOutputFormat.APPLEIMA4 = "ima4"
LINEARPCMIOSOutputFormat.LINEARPCM = "lpcm"
MACE3IOSOutputFormat.MACE3 = "MAC3"
MACE6IOSOutputFormat.MACE6 = "MAC6"
AMRIOSOutputFormat.AMR = "samr"
AMR_WBIOSOutputFormat.AMR_WB = "sawb"
DVIINTELIMAIOSOutputFormat.DVIINTELIMA = 1836253201
MICROSOFTGSMIOSOutputFormat.MICROSOFTGSM = 1836253233
QUALCOMMIOSOutputFormat.QUALCOMM = "Qclp"
QDESIGN2IOSOutputFormat.QDESIGN2 = "QDM2"
QDESIGNIOSOutputFormat.QDESIGN = "QDMC"
MPEG4TWINVQIOSOutputFormat.MPEG4TWINVQ = "twvq"
ULAWIOSOutputFormat.ULAW = "ulaw"
PermissionStatusAndroid
iOS
Web
DENIEDPermissionStatus.DENIED = "denied"
User has denied the permission.
GRANTEDPermissionStatus.GRANTED = "granted"
User has granted the permission.
UNDETERMINEDPermissionStatus.UNDETERMINED = "undetermined"
User hasn't granted or denied the permission yet.