From 0baca769793e40b652df34f6bd2e8845b5f21855 Mon Sep 17 00:00:00 2001 From: N Pex Date: Wed, 10 May 2023 15:59:04 +0000 Subject: [PATCH] Acquire wake lock while recording audio --- README.md | 3 ++ src/assets/sounds/record_stop.mp3 | Bin 0 -> 19225 bytes src/components/VoiceRecorder.vue | 64 +++++++++++++++++++++++++++--- 3 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 src/assets/sounds/record_stop.mp3 diff --git a/README.md b/README.md index 5f4f3c6..d99478a 100644 --- a/README.md +++ b/README.md @@ -58,3 +58,6 @@ The app loads runtime configutation from the server at "./config.json" and merge * Run the "create sticker config" script using "npm run create-sticker-config " * Insert the resulting config blob into the "shortCodeStickers" value of the config file (assets/config.json) * Rearrange order of sticker packs by editing the config blob above. + +### Attributions +Sounds from [Notification Sounds](https://notificationsounds.com) \ No newline at end of file diff --git a/src/assets/sounds/record_stop.mp3 b/src/assets/sounds/record_stop.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3c937aa946d287eb5c51b914ee343d146fa2e498 GIT binary patch literal 19225 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 Pq~)K}>i??0YXkoU-w{B2 literal 0 HcmV?d00001 diff --git a/src/components/VoiceRecorder.vue b/src/components/VoiceRecorder.vue index 48879ba..746c161 100644 --- a/src/components/VoiceRecorder.vue +++ b/src/components/VoiceRecorder.vue @@ -2,10 +2,10 @@

- + @@ -71,7 +71,7 @@ {{ recordingTime }}
- +
<< {{ $t("voice_recorder.swipe_to_cancel") }}
@@ -146,7 +146,7 @@ @@ -209,6 +209,9 @@ export default { errorMessage: null, recorder: null, previewPlayer: null, + wakeLock: null, + maxRecordingLength: 120, // In seconds + forceNonPTTMode: false, }; }, watch: { @@ -244,13 +247,14 @@ export default { } }, show(val) { + this.forceNonPTTMode = false; if (val) { // Add listeners this.state = State.INITIAL; this.errorMessage = null; this.recordedFile = null; this.recordingTime = String.fromCharCode(160); - if (this.ptt) { + if (this.usePTT) { document.addEventListener("mouseup", this.mouseUp, false); document.addEventListener("mousemove", this.mouseMove, false); document.addEventListener("touchend", this.mouseUp, false); @@ -288,6 +292,9 @@ export default { } }, computed: { + usePTT() { + return this.ptt && !this.forceNonPTTMode; + }, lockButtonStyle() { /** Calculate where to show the lock button (it should be at the same X-coord as the) @@ -366,6 +373,9 @@ export default { this.recordStartedAt = Date.now(); this.startRecordTimer(); }) + .then(async () => { + this.aquireWakeLock(); + }) .catch((e) => { console.error(e); if (e && e.name == "NotAllowedError") { @@ -374,25 +384,65 @@ export default { this.state = State.ERROR; }); }, + screenLocked() { + if (document.visibilityState === "hidden" && this.state == State.RECORDING) { + this.pauseRecording(); + } + }, + playRecordedSound() { + const audio = new Audio(require("@/assets/sounds/record_stop.mp3")); + audio.play(); + }, + aquireWakeLock() { + document.addEventListener("visibilitychange", this.screenLocked); + try { + if (navigator.wakeLock && !this.wakeLock) { + navigator.wakeLock.request('screen').then((lock) => this.wakeLock = lock); + } + } + catch(err) { console.error(err)} + }, + releaseWakeLock() { + document.removeEventListener("visibilitychange", this.screenLocked); + if (this.wakeLock) { + this.wakeLock.release().then(() => { + this.wakeLock = null; + }); + } + }, cancelRecording() { if(this.recorder) { this.recorder.stop(); this.recorder = null; } + this.releaseWakeLock(); this.state = State.INITIAL; this.close(); }, pauseRecording() { + // Remove PTT mode. We can get here in PTT if screen is locked or if max time is reached. + if (this.ptt) { + this.forceNonPTTMode = true; + this.recordingLocked = false; + document.removeEventListener("mouseup", this.mouseUp, false); + document.removeEventListener("mousemove", this.mouseMove, false); + document.removeEventListener("touchend", this.mouseUp, false); + document.removeEventListener("touchmove", this.mouseMove, false); + } this.state = State.RECORDED; this.stopRecordTimer(); + this.releaseWakeLock(); this.getFile(false); + this.playRecordedSound(); }, stopRecording() { this.state = State.RECORDED; this.stopRecordTimer(); + this.releaseWakeLock(); this.recordingTime = String.fromCharCode(160); // nbsp; this.close(); this.getFile(true); + this.playRecordedSound(); }, redo() { this.state = State.INITIAL; @@ -431,6 +481,10 @@ export default { this.recordingTime = util.formatRecordDuration( now - this.recordStartedAt ); + // Auto-stop? + if ((now - this.recordStartedAt) >= (1000 * this.maxRecordingLength) && this.state == State.RECORDING) { + this.pauseRecording(); + } }, 500); }, stopRecordTimer() {