From 168d72ecfc9060ec0f718b0b6585367bce4609f8 Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Thu, 01 Aug 2024 15:12:54 +0800
Subject: [PATCH] 喊话功能后缀修改

---
 src/main/java/com/dji/sample/speak/service/serviceImpl/SpeakVoiceServiceImpl.java |   61 ++++++++++++++++++++++++++----
 src/main/java/com/dji/sample/speak/service/SpeakVoiceService.java                 |    2 +
 src/main/java/com/dji/sample/speak/controller/SpeakVoiceController.java           |   10 +++++
 3 files changed, 65 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/dji/sample/speak/controller/SpeakVoiceController.java b/src/main/java/com/dji/sample/speak/controller/SpeakVoiceController.java
index 9663628..0b21628 100644
--- a/src/main/java/com/dji/sample/speak/controller/SpeakVoiceController.java
+++ b/src/main/java/com/dji/sample/speak/controller/SpeakVoiceController.java
@@ -65,4 +65,14 @@
     public ResponseResult getVoices(@RequestParam Integer page, @RequestParam Integer page_size) {
         return ResponseResult.success(voiceServicel.getVoices(page, page_size));
     }
+
+    @PostMapping("/startVoices")
+    public ResponseResult takeVoices(
+                                    @RequestParam String sn,
+                                    @RequestParam int psdk_index,
+                                    @RequestParam String name,
+                                    @RequestParam String url) throws UnsupportedAudioFileException, IOException {
+        return ResponseResult.success(voiceServicel.takeVoices(sn, psdk_index, name, url));
+    }
+
 }
diff --git a/src/main/java/com/dji/sample/speak/service/SpeakVoiceService.java b/src/main/java/com/dji/sample/speak/service/SpeakVoiceService.java
index 5fef21a..ba6c7d7 100644
--- a/src/main/java/com/dji/sample/speak/service/SpeakVoiceService.java
+++ b/src/main/java/com/dji/sample/speak/service/SpeakVoiceService.java
@@ -29,4 +29,6 @@
     int awayRiver (String sn);
 
     PaginationData<SpeakVoiceEntity> getVoices(Integer pages,Integer page_size);
+    int takeVoices(String sn,Integer psdk_index, String name, String url) throws UnsupportedAudioFileException, IOException;
+
 }
diff --git a/src/main/java/com/dji/sample/speak/service/serviceImpl/SpeakVoiceServiceImpl.java b/src/main/java/com/dji/sample/speak/service/serviceImpl/SpeakVoiceServiceImpl.java
index fea2037..474523b 100644
--- a/src/main/java/com/dji/sample/speak/service/serviceImpl/SpeakVoiceServiceImpl.java
+++ b/src/main/java/com/dji/sample/speak/service/serviceImpl/SpeakVoiceServiceImpl.java
@@ -14,6 +14,9 @@
 import com.dji.sample.speak.model.enums.VoiceEnums;
 import com.dji.sample.speak.service.SpeakVoiceService;
 import com.dji.sample.speak.util.MD5Util;
+import com.dji.sample.territory.service.impl.TbFjServiceImpl;
+import io.minio.MinioClient;
+import io.minio.PutObjectArgs;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -21,8 +24,7 @@
 import javax.sound.sampled.AudioInputStream;
 import javax.sound.sampled.AudioSystem;
 import javax.sound.sampled.UnsupportedAudioFileException;
-import java.io.File;
-import java.io.IOException;
+import java.io.*;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.List;
@@ -66,14 +68,14 @@
 
     @Override
     public int restartVoice(String sn, Integer psdk_index) {
-        SpeakRestartDto dto=new SpeakRestartDto();
+        SpeakRestartDto dto = new SpeakRestartDto();
         dto.setPsdk_index(psdk_index);
         return messageSenderService.publishServicesTopic(sn, VoiceEnums.SPEAKER_REPLAY.getMethod(), dto).getResult();
     }
 
     @Override
     public int stopVoice(String sn, Integer psdk_index) {
-        SpeakStopDto dto=new SpeakStopDto();
+        SpeakStopDto dto = new SpeakStopDto();
         dto.setPsdk_index(psdk_index);
         return messageSenderService.publishServicesTopic(sn, VoiceEnums.SPEAKER_PLAY_STOP.getMethod(), dto).getResult();
     }
@@ -102,10 +104,10 @@
     }
 
     @Override
-    public PaginationData<SpeakVoiceEntity> getVoices(Integer pages,Integer page_size) {
+    public PaginationData<SpeakVoiceEntity> getVoices(Integer pages, Integer page_size) {
         // Paging Query
         Page<SpeakVoiceEntity> page = voiceMapper.selectPage(
-                new Page<>(pages,page_size),
+                new Page<>(pages, page_size),
                 new LambdaQueryWrapper<SpeakVoiceEntity>()
         );
         // Wrap the results of a paging query into a custom paging object.
@@ -122,9 +124,10 @@
         String secretKey = pojo.getSecretKey();
         String bucketName = pojo.getBucket();
         String objectName = "/" + fileName + getNowTimeName();
-        FileServiceImpl.uploadFile(endpoint, accessKey, secretKey, bucketName, objectName, file, "audio/mpeg");
+        FileServiceImpl.uploadFile(endpoint, accessKey, secretKey, bucketName, objectName, file, "audio/wav");
         return endpoint + "/" + bucketName + objectName;
     }
+
 
     public static String getNowTimeName() {
         LocalDateTime currentTime = LocalDateTime.now();
@@ -140,8 +143,50 @@
             int frameSize = format.getFrameSize();
             float frameRate = format.getFrameRate();
             return Math.round(audioFileLength / (frameSize * frameRate));
-        }catch (Exception e){
+        } catch (Exception e) {
             return 0.0;
         }
     }
+
+    public int takeVoices(String sn, Integer psdk_index, String name, String url) {
+        SpeakVoiceEntity voiceEntity = new SpeakVoiceEntity();
+        SpeakVoiceStartDto dto = new SpeakVoiceStartDto();
+        SpeakVoiceFileDto fileDto = new SpeakVoiceFileDto();
+        SpeakVolumeDto volumeDto = new SpeakVolumeDto();
+        File file = TbFjServiceImpl.downloadFile(url);
+        String md5 = MD5Util.getMD5Checksum(file);
+        volumeDto.setPsdk_index(psdk_index);
+        volumeDto.setPlay_volume(100);
+        String names = name + ".wav";
+        fileDto.setUrl(url);
+        fileDto.setMd5(md5);
+        fileDto.setFormat(FormatEnum.PCM);
+        fileDto.setName(name);
+        dto.setPsdk_index(psdk_index);
+        dto.setFile(fileDto);
+        voiceEntity.setMd5(md5);
+        voiceEntity.setUrl(url);
+        voiceEntity.setName(names);
+        voiceMapper.insert(voiceEntity);
+        messageSenderService.publishServicesTopic(sn, VoiceEnums.SPEAKER_PLAY_VOLUME_SET.getMethod(), volumeDto);
+        return messageSenderService.publishServicesTopic(sn, VoiceEnums.SPEAKER_AUDIO_PLAY_START.getMethod(), dto).getResult();
+    }
+
+    public void saveFileToLocal(File file, String destinationPath) throws IOException {
+        // 创建目标文件对象
+        File destinationFile = new File(destinationPath);
+
+        // 确保目标文件的父目录存在
+        destinationFile.getParentFile().mkdirs();
+
+        // 将文件内容写入目标文件
+        try (FileOutputStream outputStream = new FileOutputStream(destinationFile);
+             InputStream inputStream = new FileInputStream(file)) {
+            byte[] buffer = new byte[1024];
+            int bytesRead;
+            while ((bytesRead = inputStream.read(buffer)) != -1) {
+                outputStream.write(buffer, 0, bytesRead);
+            }
+        }
+    }
 }

--
Gitblit v1.9.3