1 | import ExponentAV from './ExponentAV';
|
2 | export * from './Audio/Recording';
|
3 | export * from './Audio/Sound';
|
4 | export { setIsEnabledAsync } from './Audio/AudioAvailability';
|
5 | export { PitchCorrectionQuality } from './AV';
|
6 | export const INTERRUPTION_MODE_IOS_MIX_WITH_OTHERS = 0;
|
7 | export const INTERRUPTION_MODE_IOS_DO_NOT_MIX = 1;
|
8 | export const INTERRUPTION_MODE_IOS_DUCK_OTHERS = 2;
|
9 | export const INTERRUPTION_MODE_ANDROID_DO_NOT_MIX = 1;
|
10 | export const INTERRUPTION_MODE_ANDROID_DUCK_OTHERS = 2;
|
11 |
|
12 | const _isValueValid = (value, validValues) => {
|
13 | return validValues.filter(validValue => validValue === value).length > 0;
|
14 | };
|
15 | const _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 | };
|
23 | const 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 | };
|
32 | let currentAudioMode = null;
|
33 | function getCurrentAudioMode() {
|
34 | if (!currentAudioMode) {
|
35 | return defaultMode;
|
36 | }
|
37 | return currentAudioMode;
|
38 | }
|
39 | export 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 |
|
\ | No newline at end of file |