/* Metro module 11778; source: modules/voice_messages/native/VoiceMessageUtils.tsx; dependencies: [5, 4259, 11527, 11528, 661, 3, 11779, 206, 22, 4406, 683, 4081, 477, 2] */ function _fun90221(global, require, importDefault, importAll, module, exports, dependencyMap) { // fn#90221, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:11964:6, offset: 0x02030f70, size: 528 bytes, params: 8, frame: 21 const env0_0 = require; const closure = generateBase64EncodedWaveform; const closure2 = function() { return _stopAndCacheAudioRecording.apply(this, arguments); }; const Object = global.Object; Object.defineProperty(exports, '__esModule', {value: true}); const env0_3 = importDefault(5) /* metro dependency 5 */; const mediaEngineStore = importDefault(4259) /* metro dependency 4259: MediaEngineStore */; let value = require(11527) /* metro dependency 11527: VoiceMessagesUIStore */; const env0_5 = value.addVoiceMessageWave; const env0_6 = value.resetVoiceMessageState; const env0_7 = value.setSavedVoiceMessageUploadData; const env0_8 = value.setVoiceMessageRecordingId; const env0_9 = value.setVoiceMessageRecordingState; const env0_10 = value.setVoiceMessageStartTimeMillis; const env0_11 = value.useVoiceMessagesUIStore; const env0_12 = value.VoiceMessageRecordingStatus; value = require(11528) /* metro dependency 11528: VoiceMessageConstants */; const env0_13 = value.WAVEFORM_WAVE_MAX_VALUE; const env0_14 = value.VOICE_RECORDING_MIN_DB; const env0_15 = value.VOICE_RECORDING_MAX_DB; const env0_16 = value.WAVEFORM_MAX_SAMPLES; const env0_17 = value.VOICE_RECORDING_MAX_DURATION_MILLIS; const env0_18 = (require(661) /* metro dependency 661: Constants */).AnalyticEvents; value = importDefault(3) /* metro dependency 3: Logger */; value = new value('VoiceMessages'); const env0_21 = (importDefault(22) /* metro dependency 22 */).throttle(_fun90239, 100); (require(2) /* metro dependency 2 */).fileFinishedImporting('modules/voice_messages/native/VoiceMessageUtils.tsx'); exports.generateBase64EncodedWaveform = closure; exports.startAudioRecording = function() { return _startAudioRecording.apply(this, arguments); }; exports.endAudioRecording = function() { return _endAudioRecording.apply(this, arguments); }; exports.stopAndCacheAudioRecording = closure2; exports.emitVoiceMessageRecorded = emitVoiceMessageRecorded; exports.triggerHaptic = function() { var moduleValue = require(dependencyMap[11]); var triggerHapticFeedback = moduleValue.triggerHapticFeedback; var isAndroid = require(dependencyMap[12]).isAndroid(); var HapticFeedbackTypes = require(dependencyMap[11]).HapticFeedbackTypes; Reflect.apply(triggerHapticFeedback, moduleValue, [isAndroid ? HapticFeedbackTypes.IMPACT_LIGHT : HapticFeedbackTypes.IMPACT_MEDIUM]); }; } function generateBase64EncodedWaveform(a0) { // fn#90222, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:11964:595, offset: 0x02031180, size: 135 bytes, params: 2, frame: 16 var r3; let value = a0; if (value.length <= WAVEFORM_MAX_SAMPLES) { r3 = value; } else { value = (importDefault(11779) /* metro dependency 11779: downsampleWaveform */)(value, WAVEFORM_MAX_SAMPLES); r3 = value; } value = r3.map(function(a0) { var Math = global.Math; return Math.min(a0, WAVEFORM_WAVE_MAX_VALUE); }); const defaultImport = importDefault(206) /* metro dependency 206 */; const fromByteArray = defaultImport.fromByteArray; const Uint8Array = global.Uint8Array; const value3 = Object.create(Uint8Array.prototype, {constructor: {value: Uint8Array}}); const uint8Array = new Uint8Array(value); return Reflect.apply(fromByteArray, defaultImport, [uint8Array instanceof Object ? uint8Array : value3]); } function _startAudioRecording() { // fn#90224, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:11964:990, offset: 0x02031226, size: 50 bytes, params: 1, frame: 14 return env0_3(_fun90226).apply(this, arguments); } function resetAudioRecording() { // fn#90227, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:11964:1657, offset: 0x020313f8, size: 77 bytes, params: 1, frame: 15 const mediaEngine = MediaEngineStore.getMediaEngine(); const removeListener = mediaEngine.removeListener; const MediaEngineEvent = (require(4406) /* metro dependency 4406: mediaEngine */).MediaEngineEvent; const VoiceActivity = MediaEngineEvent.VoiceActivity; Reflect.apply(removeListener, mediaEngine, [VoiceActivity, env0_21]); resetVoiceMessageState(); } function stopAndGetAudioRecording() { // fn#90228, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:11964:1768, offset: 0x02031445, size: 114 bytes, params: 1, frame: 14 setVoiceMessageRecordingId(null); setVoiceMessageRecordingState(null); const generateBase64EncodedWaveformBinding = generateBase64EncodedWaveform; const getState = useVoiceMessagesUIStore.getState; const waveform = Reflect.apply(getState, useVoiceMessagesUIStore, []).waveform; const env0_0 = generateBase64EncodedWaveformBinding(waveform.map(function(a0) { var iterator = a0[Symbol.iterator](); var item2 = iterator.next(); var item = item2.value; item2 = item2.done ? undefined : iterator; var value = undefined; var value2 = item2 === value; var r0 = value2 ? value : item; if (!value2) { item2.return(); } return r0; })); const Promise = global.Promise; let value = Object.create(Promise.prototype, {constructor: {value: Promise}}); const promise = new Promise(_fun90230); return promise instanceof Object ? promise : value; } function _endAudioRecording() { // fn#90232, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:11964:2023, offset: 0x0203151f, size: 50 bytes, params: 1, frame: 14 return env0_3(_fun90234).apply(this, arguments); } function _stopAndCacheAudioRecording() { // fn#90236, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:11964:2517, offset: 0x02031602, size: 50 bytes, params: 1, frame: 14 return env0_3(_fun90238).apply(this, arguments); } function _fun90239(a0) { // fn#90239, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:11964:808, offset: 0x020316ad, size: 134 bytes, params: 2, frame: 16 const state = useVoiceMessagesUIStore.getState(); if (state.startTimeMillis != null) { addVoiceMessageWave(WAVEFORM_WAVE_MAX_VALUE * ((a0 - VOICE_RECORDING_MIN_DB) / (VOICE_RECORDING_MAX_DB - VOICE_RECORDING_MIN_DB))); if (state.savedVoiceMessageUploadData == null && global.performance.now() - state.startTimeMillis >= VOICE_RECORDING_MAX_DURATION_MILLIS) { stopAndCacheAudioRecording(); } } } function emitVoiceMessageRecorded(a0, a1, a2) { // fn#90242, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:11964:3190, offset: 0x02031733, size: 123 bytes, params: 4, frame: 17 var defaultImport; var track; var VOICE_MESSAGE_RECORDED; var object2; if (a2 != null) { defaultImport = importDefault(683) /* metro dependency 683: AnalyticsUtils */; track = defaultImport.track; VOICE_MESSAGE_RECORDED = AnalyticEvents.VOICE_MESSAGE_RECORDED; object2 = {recording_start_timestamp: a2}; object2.recording_stop_timestamp = global.Date.now(); object2.duration_secs = a1; object2.result = a0; object2.initialize_secs = env0_19; Reflect.apply(track, defaultImport, [VOICE_MESSAGE_RECORDED, object2]); } } function* _fun90226(a0) { // fn#90226, original name: ?anon_0_, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:11964:1053, offset: 0x02031263, size: 405 bytes, params: 2, frame: 21 var performance; var now; var value4; var value5; var startLocalAudioRecording; var object3; var getEchoCancellation; var value6; var getNoiseSuppression; var value7; var object4; var getAutomaticGainControl; var value8; var getNoiseCancellation; var value9; var value10; var value11; var value12; var value13; var value14; var log; var binding2; var getState; var value15; var recordingId; var value16; var binding3; var STARTED; var Date; var value17; var error; if (true) { value = environment.__proto__.__proto__; var binding = env2_9; var REQUESTED = env2_12.REQUESTED; binding(REQUESTED); env2_8(a0); var mediaEngine = env2_4.getMediaEngine(); var on = mediaEngine.on; var MediaEngineEvent = env2_0(env2_2[9]).MediaEngineEvent; var VoiceActivity = MediaEngineEvent.VoiceActivity; Reflect.apply(on, mediaEngine, [VoiceActivity, env2_21]); try { performance = global.performance; } catch (error) { env2_24(); throw error; } try { now = performance.now; } catch (error) { env2_24(); throw error; } try { value4 = Reflect.apply(now, performance, []); } catch (error) { env2_24(); throw error; } try { binding = env2_4; } catch (error) { env2_24(); throw error; } try { getMediaEngine = binding.getMediaEngine; } catch (error) { env2_24(); throw error; } try { value5 = Reflect.apply(getMediaEngine, binding, []); } catch (error) { env2_24(); throw error; } try { startLocalAudioRecording = value5.startLocalAudioRecording; } catch (error) { env2_24(); throw error; } try { object3 = {}; } catch (error) { env2_24(); throw error; } try { binding = env2_4; } catch (error) { env2_24(); throw error; } try { getEchoCancellation = binding.getEchoCancellation; } catch (error) { env2_24(); throw error; } try { value6 = Reflect.apply(getEchoCancellation, binding, []); } catch (error) { env2_24(); throw error; } try { object3.echoCancellation = value6; } catch (error) { env2_24(); throw error; } try { object3.echoCancellationPreEcho = false; } catch (error) { env2_24(); throw error; } try { binding = env2_4; } catch (error) { env2_24(); throw error; } try { getNoiseSuppression = binding.getNoiseSuppression; } catch (error) { env2_24(); throw error; } try { value7 = Reflect.apply(getNoiseSuppression, binding, []); } catch (error) { env2_24(); throw error; } try { object3.noiseSuppression = value7; } catch (error) { env2_24(); throw error; } try { object4 = {}; } catch (error) { env2_24(); throw error; } try { binding = env2_4; } catch (error) { env2_24(); throw error; } try { getAutomaticGainControl = binding.getAutomaticGainControl; } catch (error) { env2_24(); throw error; } try { value8 = Reflect.apply(getAutomaticGainControl, binding, []); } catch (error) { env2_24(); throw error; } try { object4.enabled = value8; } catch (error) { env2_24(); throw error; } try { object3.automaticGainControlConfig = object4; } catch (error) { env2_24(); throw error; } try { binding = env2_4; } catch (error) { env2_24(); throw error; } try { getNoiseCancellation = binding.getNoiseCancellation; } catch (error) { env2_24(); throw error; } try { value9 = Reflect.apply(getNoiseCancellation, binding, []); } catch (error) { env2_24(); throw error; } try { object3.noiseCancellation = value9; } catch (error) { env2_24(); throw error; } try { value10 = Reflect.apply(startLocalAudioRecording, value5, [object3]); } catch (error) { env2_24(); throw error; } yield value10; try { value11 = undefined; value12 = false; } catch (error) { env2_24(); throw error; } if (value12) { return value11; } try { performance = global.performance; } catch (error) { env2_24(); throw error; } try { now = performance.now; } catch (error) { env2_24(); throw error; } try { value13 = Reflect.apply(now, performance, []); } catch (error) { env2_24(); throw error; } try { value14 = value13 - value4; } catch (error) { env2_24(); throw error; } try { env2_19 = value14; } catch (error) { env2_24(); throw error; } try { binding = env2_20; } catch (error) { env2_24(); throw error; } try { log = binding.log; } catch (error) { env2_24(); throw error; } try { binding2 = env2_19; } catch (error) { env2_24(); throw error; } try { Reflect.apply(log, binding, ['Voice message audio startup latency:', binding2]); } catch (error) { env2_24(); throw error; } try { binding = env2_11; } catch (error) { env2_24(); throw error; } try { getState = binding.getState; } catch (error) { env2_24(); throw error; } try { value15 = Reflect.apply(getState, binding, []); } catch (error) { env2_24(); throw error; } try { recordingId = value15.recordingId; } catch (error) { env2_24(); throw error; } try { value16 = recordingId !== a0; } catch (error) { env2_24(); throw error; } if (!value16) { try { binding = env2_9; } catch (error) { env2_24(); throw error; } try { binding3 = env2_12; } catch (error) { env2_24(); throw error; } try { STARTED = binding3.STARTED; } catch (error) { env2_24(); throw error; } try { binding(STARTED); } catch (error) { env2_24(); throw error; } try { binding = env2_10; } catch (error) { env2_24(); throw error; } try { Date = global.Date; } catch (error) { env2_24(); throw error; } try { now = Date.now; } catch (error) { env2_24(); throw error; } try { value17 = Reflect.apply(now, Date, []); } catch (error) { env2_24(); throw error; } try { binding(value17); } catch (error) { env2_24(); throw error; } } } } function _fun90230(a0) { // fn#90230, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:11964:1915, offset: 0x020314b7, size: 48 bytes, params: 2, frame: 11 var environment; const env0_0 = a0; const value = environment.__proto__; MediaEngineStore.getMediaEngine().stopLocalAudioRecording(_fun90231); } function* _fun90234() { // fn#90234, original name: ?anon_0_, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:11964:2082, offset: 0x0203155c, size: 166 bytes, params: 1, frame: 14 var r4; var startTimeMillis; if (false) { return undefined; } value = environment.__proto__.__proto__; let binding = env2_11; const state = binding.getState(); const savedVoiceMessageUploadData = state.savedVoiceMessageUploadData; if (savedVoiceMessageUploadData == null && state.recordingStatus === env2_12.REQUESTED) { env2_25(); r4 = {'filename': '', 'durationSecs': 0, 'waveform': ''}; } else { r4 = savedVoiceMessageUploadData; } if (r4 != null) { binding = env2_11; startTimeMillis = binding.getState().startTimeMillis; } else { yield env2_25(); var value6 = undefined; if (false) { return value6; } r4 = value6; binding = env2_11; startTimeMillis = binding.getState().startTimeMillis; } env2_24(); return {data: r4, startTimeMillis: startTimeMillis}; } function* _fun90238() { // fn#90238, original name: ?anon_0_, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:11964:2594, offset: 0x0203163f, size: 110 bytes, params: 1, frame: 18 if (true) { value = environment.__proto__.__proto__; yield env2_25(); var value3 = undefined; if (false) { return value3; } var mediaEngine = env2_4.getMediaEngine(); var removeListener = mediaEngine.removeListener; var MediaEngineEvent = env2_0(env2_2[9]).MediaEngineEvent; var VoiceActivity = MediaEngineEvent.VoiceActivity; Reflect.apply(removeListener, mediaEngine, [VoiceActivity, env2_21]); env2_7(value3); } } function _fun90231(a0, a1) { // fn#90231, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:11964:1963, offset: 0x020314e7, size: 56 bytes, params: 3, frame: 12 env0_0({filename: a0, durationSecs: a1 / 1000, waveform: env1_0}); }