From fa4191dfe098fe356bdb1d24ab5762dd5728ab22 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Wed, 22 Oct 2025 19:42:38 +0800
Subject: [PATCH] feat: 喊话和广播
---
src/subPackages/droneConsole/index.vue | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 57 insertions(+), 3 deletions(-)
diff --git a/src/subPackages/droneConsole/index.vue b/src/subPackages/droneConsole/index.vue
index 8755c84..48420da 100644
--- a/src/subPackages/droneConsole/index.vue
+++ b/src/subPackages/droneConsole/index.vue
@@ -5,16 +5,70 @@
import {onHide, onLoad, onShow} from "@dcloudio/uni-app";
import WebViewPlus from "@/components/WebViewPlus.vue";
import {getWebViewUrl} from "@/utils/index.js";
+import Recorder from "js-audio-recorder";
+import dayjs from "dayjs";
+import {startVoice} from "@/api/drone.js";
+import {showToast} from "@dcloudio/uni-h5";
-const viewUrl = ref('')
const wayLineJodInfoId = ref(null)
-function onPostMessage(event) {
+const startState = ref('0')
+let recorder
+const soundVideoName = ref('') // 喊话名称
+soundVideoName.value = `${dayjs().format('YYYYMMDDHHmmss')}实时喊话`
+const viewUrl = computed(()=>{
+ return getWebViewUrl('/DroneConsole', {
+ wayLineJodInfoId: wayLineJodInfoId.value,
+ startState: startState.value
+ })
+})
+
+function onPostMessage(data) {
+ if (data.type === 'record') {
+ startState.value = 1
+ recorder = new Recorder({
+ sampleBits: 16, // 采样位数,支持8或16,默认16
+ sampleRate: 16000, // 采样率,支持11025、16000、22050、24000、44100、48000
+ numChannels: 1, // 声道,支持1或2,默认1
+ })
+ nextTick(() => {
+ recorder.start().then(() => {
+ recorder.onprocess = duration => {
+ }
+ })
+ })
+ }else if (data.type === 'stopRecord') {
+ startState.value = '2'
+ recorder.stop()
+ }else if(data.type === 'trialListening'){
+ recorder.play()
+ }else if (data.type === 'resetRecording'){
+ startState.value = '0'
+ recorder?.destroy().then(() => {
+ recorder = null // 释放资源
+ })
+ }else if(data.type === 'pushToDrone'){
+ pushToDrone()
+ }
+}
+
+// 无人机开始喊话
+function pushToDrone() {
+ let formData = new FormData()
+ const wavBlob = recorder.getWAVBlob()
+ const wavform = new File([wavBlob], new Date().getTime() + '.wav')
+ formData.append('file', wavform)
+ formData.append('sn', dockSn.value)
+ formData.append('psdk_index', 2)
+ formData.append('name', soundVideoName.value)
+ formData.append('volumn', 100)
+ startVoice(formData).then(res => {
+ showToast('喊话成功')
+ })
}
onLoad((options) => {
wayLineJodInfoId.value = options.wayLineJodInfoId
- viewUrl.value = getWebViewUrl('/DroneConsole', {wayLineJodInfoId: wayLineJodInfoId.value})
})
--
Gitblit v1.9.3