| | |
| | | import {useUserStore} from "@/store/index.js"; |
| | | |
| | | const wayLineJodInfoId = ref(null) |
| | | const startState = ref('0') |
| | | let recorder |
| | | const soundVideoName = ref('') // 喊话名称 |
| | | soundVideoName.value = `${dayjs().format('YYYYMMDDHHmmss')}实时喊话` |
| | | const droneHornState = ref('0') |
| | | const updateKey = ref(0) |
| | | const uNotifyRef = ref(null) |
| | | |
| | | const viewUrl = computed(() => { |
| | | return getWebViewUrl('/DroneConsole', { |
| | | wayLineJodInfoId: wayLineJodInfoId.value, |
| | | startState: startState.value, |
| | | droneHornState: droneHornState.value, |
| | | updateKey: updateKey.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' |
| | | droneHornState.value = '0' |
| | | recorder?.destroy().then(() => { |
| | | recorder = null // 释放资源 |
| | | }) |
| | | } else if (data.type === 'pushToDrone') { |
| | | pushToDrone(data) |
| | | } else if (data.type === 'saveSound') { |
| | | saveSound(data) |
| | | } |
| | | } |
| | | |
| | | // 文件上传demo |
| | | const {VITE_API_BASE_URL} = getEnvObj() |
| | | |
| | | function uploadUtil(options) { |
| | | const {formData, file, url} = options |
| | | return new Promise((resolve, reject) => { |
| | |
| | | |
| | | // 保存喊话至广播列表内 |
| | | function saveSound(data) { |
| | | const file = new File([recorder.getWAVBlob()], '.wav') |
| | | const recorder = 'xxx' |
| | | const file = new File([recorder?.getWAVBlob()], '.wav') |
| | | uploadUtil({ |
| | | file, |
| | | formData: { |
| | | fileName: data.soundName, |
| | | sn: data.dockSn |
| | | fileName: 'xxx', |
| | | sn: 'xxx', |
| | | }, |
| | | url: '/drone-device-core/speak/api/v1/uploadSpeak' |
| | | }).then(res => { |
| | | showToast('保存成功') |
| | | }) |
| | | } |
| | | |
| | | // 无人机开始喊话 |
| | | function pushToDrone(data) { |
| | | const wavBlob = recorder.getWAVBlob() |
| | | const file = new File([wavBlob], new Date().getTime() + '.wav') |
| | | uploadUtil({ |
| | | file, |
| | | formData: { |
| | | name: data.soundName, |
| | | sn: data.dockSn, |
| | | psdk_index: 2, |
| | | volumn: 100, |
| | | }, |
| | | url: '/drone-device-core/speak/api/v1/startVoice' |
| | | }).then(res => { |
| | | droneHornState.value = '1' |
| | | showToast('播放成功') |
| | | }).catch(() => { |
| | | droneHornState.value = '0' |
| | | }).finally(() => { |
| | | updateKey.value += 1 |
| | | }) |
| | | } |
| | | |