172 lines
6.3 KiB
TypeScript
172 lines
6.3 KiB
TypeScript
// Metro module 11416 (f11417).
|
|
import MediaEngineStore from "../../../stores/MediaEngineStore";
|
|
import { VoiceMessageRecordingStatus, addVoiceMessageWave, resetVoiceMessageState, setSavedVoiceMessageUploadData, setVoiceMessageRecordingId, setVoiceMessageRecordingState, setVoiceMessageStartTimeMillis, useVoiceMessagesUIStore } from "./VoiceMessagesUIStore";
|
|
import { VOICE_RECORDING_MAX_DB, VOICE_RECORDING_MAX_DURATION_MILLIS, VOICE_RECORDING_MIN_DB, WAVEFORM_MAX_SAMPLES, WAVEFORM_WAVE_MAX_VALUE } from "../VoiceMessageConstants";
|
|
import { AnalyticEvents } from "../../../Constants";
|
|
import Logger from "../../debug/Logger";
|
|
import downsampleWaveform from "../downsampleWaveform";
|
|
import Module206 from "../../../_bundle/Module206";
|
|
import Module12 from "../../../_bundle/Module12";
|
|
import { MediaEngineEvent } from "../../../_bundle/Module4286";
|
|
import AnalyticsUtils from "../../../utils/AnalyticsUtils";
|
|
import { triggerHapticFeedback, HapticFeedbackTypes } from "../../haptics/HapticUtils.native";
|
|
import { isAndroid } from "../../../utils/PlatformUtils";
|
|
let initialize_secs, c7765_20, c7765_21, stopAndGetAudioRecording, stopAndCacheAudioRecording, $mk87149 = function() {
|
|
return (a0) => Math.min(a0, WAVEFORM_WAVE_MAX_VALUE);
|
|
};
|
|
const resetAudioRecording = function resetAudioRecording() {
|
|
MediaEngineStore.getMediaEngine().removeListener(MediaEngineEvent.VoiceActivity, c7765_21);
|
|
resetVoiceMessageState();
|
|
};
|
|
stopAndGetAudioRecording = function stopAndGetAudioRecording() {
|
|
setVoiceMessageRecordingId(null);
|
|
setVoiceMessageRecordingState(null);
|
|
const r19 = useVoiceMessagesUIStore.getState().waveform.map((item) => {
|
|
const [r8] = item;
|
|
return r8;
|
|
});
|
|
const r6 = r19.length <= WAVEFORM_MAX_SAMPLES ? r19 : downsampleWaveform(r19, WAVEFORM_MAX_SAMPLES);
|
|
const waveform = Module206.fromByteArray(new Uint8Array(r6.map($mk87149())));
|
|
return new Promise((c27061_0) => {
|
|
MediaEngineStore.getMediaEngine().stopLocalAudioRecording((a0, a1) => {
|
|
c27061_0({
|
|
filename: a0,
|
|
durationSecs: a1 / 1000,
|
|
waveform
|
|
});
|
|
});
|
|
});
|
|
};
|
|
stopAndCacheAudioRecording = async function stopAndCacheAudioRecording() {
|
|
let c27063_1;
|
|
c27063_1 = void 0;
|
|
let c30404_0 = await stopAndGetAudioRecording();
|
|
MediaEngineStore.getMediaEngine().removeListener(MediaEngineEvent.VoiceActivity, c7765_21);
|
|
(0, setSavedVoiceMessageUploadData)(c30404_0);
|
|
};
|
|
initialize_secs = null;
|
|
c7765_20 = new Logger("VoiceMessages");
|
|
c7765_21 = Module12.throttle((a0) => {
|
|
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 && performance.now() - state.startTimeMillis >= VOICE_RECORDING_MAX_DURATION_MILLIS) {
|
|
stopAndCacheAudioRecording();
|
|
}
|
|
}
|
|
}, 100);
|
|
export function generateBase64EncodedWaveform(a0) {
|
|
return Module206.fromByteArray(new Uint8Array((a0.length <= WAVEFORM_MAX_SAMPLES ? a0 : downsampleWaveform(a0, WAVEFORM_MAX_SAMPLES)).map($mk87149())));
|
|
}
|
|
export async function startAudioRecording(c27060_0) {
|
|
let c27060_3;
|
|
let c27060_4 = 0;
|
|
let c30402_0, c30402_1, c30402_2;
|
|
L12: {
|
|
try {
|
|
c30402_0 = c27060_0;
|
|
c30402_1 = void 0;
|
|
initialize_secs = null;
|
|
setVoiceMessageRecordingState(VoiceMessageRecordingStatus.REQUESTED);
|
|
setVoiceMessageRecordingId(c27060_0);
|
|
MediaEngineStore.getMediaEngine().on(MediaEngineEvent.VoiceActivity, c7765_21);
|
|
c27060_4 = 1;
|
|
c30402_1 = performance.now();
|
|
await MediaEngineStore.getMediaEngine().startLocalAudioRecording({
|
|
echoCancellation: MediaEngineStore.getEchoCancellation(),
|
|
echoCancellationPreEcho: false,
|
|
noiseSuppression: MediaEngineStore.getNoiseSuppression(),
|
|
automaticGainControlConfig: {
|
|
enabled: MediaEngineStore.getAutomaticGainControl()
|
|
},
|
|
noiseCancellation: MediaEngineStore.getNoiseCancellation()
|
|
});
|
|
initialize_secs = performance.now() - c30402_1;
|
|
c7765_20.log("Voice message audio startup latency:", initialize_secs);
|
|
if (useVoiceMessagesUIStore.getState().recordingId !== c30402_0) {
|
|
c27060_4 = 0;
|
|
break L12;
|
|
}
|
|
(0, setVoiceMessageRecordingState)(VoiceMessageRecordingStatus.STARTED);
|
|
(0, setVoiceMessageStartTimeMillis)(Date.now());
|
|
c27060_4 = 0;
|
|
} catch ($e) {
|
|
const r29 = $e;
|
|
let r8 = r29;
|
|
c27060_3 = r29;
|
|
if (c27060_4 !== 0) {
|
|
while (true) {
|
|
try {
|
|
const r116 = c27060_3;
|
|
c27060_4 = 0;
|
|
c30402_2 = r116;
|
|
(0, resetAudioRecording)();
|
|
throw c30402_2;
|
|
} catch (r112) {
|
|
r8 = r112;
|
|
c27060_3 = r112;
|
|
if (c27060_4 === 0) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
throw r8;
|
|
}
|
|
return void 0;
|
|
}
|
|
}
|
|
export async function endAudioRecording() {
|
|
let r74;
|
|
let c27062_1;
|
|
let c30403_0, c30403_1;
|
|
L17: {
|
|
c27062_1 = void 0;
|
|
c30403_0 = void 0;
|
|
c30403_1 = void 0;
|
|
const state = useVoiceMessagesUIStore.getState();
|
|
c30403_0 = state.savedVoiceMessageUploadData;
|
|
if (c30403_0 == null && state.recordingStatus === VoiceMessageRecordingStatus.REQUESTED) {
|
|
stopAndGetAudioRecording();
|
|
c30403_0 = {
|
|
filename: "",
|
|
durationSecs: 0,
|
|
waveform: ""
|
|
};
|
|
}
|
|
if (c30403_0 == null) {
|
|
c30403_0 = await stopAndGetAudioRecording();
|
|
c30403_1 = useVoiceMessagesUIStore.getState().startTimeMillis;
|
|
(0, resetAudioRecording)();
|
|
r74 = {
|
|
data: c30403_0,
|
|
startTimeMillis: c30403_1
|
|
};
|
|
break L17;
|
|
}
|
|
c30403_1 = useVoiceMessagesUIStore.getState().startTimeMillis;
|
|
(0, resetAudioRecording)();
|
|
return {
|
|
data: c30403_0,
|
|
startTimeMillis: c30403_1
|
|
};
|
|
}
|
|
return r74;
|
|
}
|
|
export { stopAndCacheAudioRecording };
|
|
export function emitVoiceMessageRecorded(a0, a1, a2) {
|
|
if (a2 != null) {
|
|
AnalyticsUtils.track(AnalyticEvents.VOICE_MESSAGE_RECORDED, {
|
|
recording_start_timestamp: a2,
|
|
recording_stop_timestamp: Date.now(),
|
|
duration_secs: a1,
|
|
result: a0,
|
|
initialize_secs
|
|
});
|
|
initialize_secs = null;
|
|
}
|
|
}
|
|
export function triggerHaptic() {
|
|
triggerHapticFeedback(isAndroid() ? HapticFeedbackTypes.IMPACT_LIGHT : HapticFeedbackTypes.IMPACT_MEDIUM);
|
|
}
|