From 74d1c21ebb6b3b916904d95d13d289df23dcdedd Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Tue, 20 Aug 2024 18:06:46 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/ht-dev' into ht-dev

---
 src/main/java/com/dji/sample/speak/util/AudioConverter.java |   55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/dji/sample/speak/util/AudioConverter.java b/src/main/java/com/dji/sample/speak/util/AudioConverter.java
new file mode 100644
index 0000000..d6bbd0b
--- /dev/null
+++ b/src/main/java/com/dji/sample/speak/util/AudioConverter.java
@@ -0,0 +1,55 @@
+package com.dji.sample.speak.util;
+
+import javax.sound.sampled.*;
+import java.io.File;
+import java.io.IOException;
+
+public class AudioConverter {
+
+    public static File convertToFile(File file) throws UnsupportedAudioFileException, IOException {
+        int channels =analyzeAudio(file);
+        if (channels != 1){
+            return convertAudio(file);
+        }
+        return file;
+    }
+    public static int  analyzeAudio(File inputFile)
+            throws IOException, UnsupportedAudioFileException {
+        AudioInputStream audioStream = AudioSystem.getAudioInputStream(inputFile);
+        AudioFormat format = audioStream.getFormat();
+        int channels = format.getChannels();
+        audioStream.close();
+        return channels;
+    }
+    public static File convertAudio(File inputFile)
+            throws IOException, UnsupportedAudioFileException {
+        // 固定参数:声道数 1,采样率 16 kHz,位宽 16 bit
+        float sampleRate = 16000;
+        int channels = 1;
+        int bitDepth = 16;
+
+        AudioInputStream sourceStream = AudioSystem.getAudioInputStream(inputFile);
+
+        AudioFormat targetFormat = new AudioFormat(
+                AudioFormat.Encoding.PCM_SIGNED,
+                sampleRate,
+                bitDepth,
+                channels,
+                (bitDepth / 8) * channels,
+                sampleRate,
+                false
+        );
+
+        AudioInputStream convertedStream = AudioSystem.getAudioInputStream(targetFormat, sourceStream);
+
+        // 使用源文件名生成输出文件名
+        File outputFile = new File("converted_" + inputFile.getName());
+
+        AudioSystem.write(convertedStream, AudioFileFormat.Type.WAVE, outputFile);
+
+        sourceStream.close();
+        convertedStream.close();
+
+        return outputFile;
+    }
+}

--
Gitblit v1.9.3