UNPKG

2.66 kBJavaScriptView Raw
1import ExponentAV from './ExponentAV';
2export * from './Audio/Recording';
3export * from './Audio/Sound';
4export { setIsEnabledAsync } from './Audio/AudioAvailability';
5export { PitchCorrectionQuality } from './AV';
6export const INTERRUPTION_MODE_IOS_MIX_WITH_OTHERS = 0;
7export const INTERRUPTION_MODE_IOS_DO_NOT_MIX = 1;
8export const INTERRUPTION_MODE_IOS_DUCK_OTHERS = 2;
9export const INTERRUPTION_MODE_ANDROID_DO_NOT_MIX = 1;
10export const INTERRUPTION_MODE_ANDROID_DUCK_OTHERS = 2;
11// Returns true if value is in validValues, and false if not.
12const _isValueValid = (value, validValues) => {
13 return validValues.filter(validValue => validValue === value).length > 0;
14};
15const _populateMissingKeys = (userAudioMode, defaultAudioMode) => {
16 for (const key in defaultAudioMode) {
17 if (!userAudioMode.hasOwnProperty(key)) {
18 userAudioMode[key] = defaultAudioMode[key];
19 }
20 }
21 return userAudioMode;
22};
23const defaultMode = {
24 allowsRecordingIOS: false,
25 interruptionModeIOS: INTERRUPTION_MODE_IOS_MIX_WITH_OTHERS,
26 playsInSilentModeIOS: false,
27 staysActiveInBackground: false,
28 interruptionModeAndroid: INTERRUPTION_MODE_ANDROID_DUCK_OTHERS,
29 shouldDuckAndroid: true,
30 playThroughEarpieceAndroid: false,
31};
32let currentAudioMode = null;
33function getCurrentAudioMode() {
34 if (!currentAudioMode) {
35 return defaultMode;
36 }
37 return currentAudioMode;
38}
39export async function setAudioModeAsync(partialMode) {
40 const mode = _populateMissingKeys(partialMode, getCurrentAudioMode());
41 if (!_isValueValid(mode.interruptionModeIOS, [
42 INTERRUPTION_MODE_IOS_MIX_WITH_OTHERS,
43 INTERRUPTION_MODE_IOS_DO_NOT_MIX,
44 INTERRUPTION_MODE_IOS_DUCK_OTHERS,
45 ])) {
46 throw new Error(`"interruptionModeIOS" was set to an invalid value.`);
47 }
48 if (!_isValueValid(mode.interruptionModeAndroid, [
49 INTERRUPTION_MODE_ANDROID_DO_NOT_MIX,
50 INTERRUPTION_MODE_ANDROID_DUCK_OTHERS,
51 ])) {
52 throw new Error(`"interruptionModeAndroid" was set to an invalid value.`);
53 }
54 if (typeof mode.allowsRecordingIOS !== 'boolean' ||
55 typeof mode.playsInSilentModeIOS !== 'boolean' ||
56 typeof mode.staysActiveInBackground !== 'boolean' ||
57 typeof mode.shouldDuckAndroid !== 'boolean' ||
58 typeof mode.playThroughEarpieceAndroid !== 'boolean') {
59 throw new Error('"allowsRecordingIOS", "playsInSilentModeIOS", "playThroughEarpieceAndroid", "staysActiveInBackground" and "shouldDuckAndroid" must be booleans.');
60 }
61 currentAudioMode = mode;
62 return await ExponentAV.setAudioMode(mode);
63}
64//# sourceMappingURL=Audio.js.map
\No newline at end of file