Commit 5bc2cf8b authored by 周亚武's avatar 周亚武

修改合并mp3文件规则

parent 33f37b63
...@@ -141,6 +141,8 @@ ...@@ -141,6 +141,8 @@
<version>1.0.1</version> <version>1.0.1</version>
</dependency> </dependency>
<!-- 引入 SpringMVC 相关依赖,并实现对其的自动配置 --> <!-- 引入 SpringMVC 相关依赖,并实现对其的自动配置 -->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
...@@ -227,6 +229,12 @@ ...@@ -227,6 +229,12 @@
<version>3.0.9</version> <version>3.0.9</version>
</dependency> </dependency>
<dependency>
<groupId>com.mpatric</groupId>
<artifactId>mp3agic</artifactId>
<version>0.9.1</version>
</dependency>
</dependencies> </dependencies>
......
package com.mortals.xhx.tts.utils; package com.mortals.xhx.tts.utils;
import com.mpatric.mp3agic.InvalidDataException;
import com.mpatric.mp3agic.Mp3File;
import com.mpatric.mp3agic.MpegFrame;
import com.mpatric.mp3agic.UnsupportedTagException;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import javax.sound.sampled.*; import javax.sound.sampled.*;
...@@ -14,66 +18,32 @@ import java.util.List; ...@@ -14,66 +18,32 @@ import java.util.List;
public class AddMp3Util { public class AddMp3Util {
public static String mergeMp3s( List<String> inputFiles) throws IOException, UnsupportedAudioFileException, LineUnavailableException { public static String mergeMp3s( List<String> inputPaths) throws IOException, InvalidDataException, UnsupportedTagException {
String outputFile = "/tmp/"; String outputPath = "/tmp/";
if(System.getProperty("os.name").startsWith("Windows")){ //windows电脑测试路径 if(System.getProperty("os.name").startsWith("Windows")){ //windows电脑测试路径
outputFile= "F:\\\\"; outputPath= "F:\\\\";
} }
File file = new File(outputFile+"new.mp3"); File file = new File(outputPath+"new.mp3");
if (file.exists()) { if (file.exists()) {
file.delete(); file.delete();
} }
FileOutputStream fos = new FileOutputStream(outputPath);
AudioFormat format = null; for (String inputPath : inputPaths) {
TargetDataLine targetLine = null;
SourceDataLine sourceLine = null;
// 获取混音所需的格式
for (String inputFile : inputFiles) {
ClassLoader classLoader = AddMp3Util.class.getClassLoader(); ClassLoader classLoader = AddMp3Util.class.getClassLoader();
InputStream inputStream = classLoader.getResourceAsStream(inputFile); InputStream inputStream = classLoader.getResourceAsStream(inputPath);
String fileName = inputFile.substring(inputFile.lastIndexOf("/")+1); String fileName = inputPath.substring(inputPath.lastIndexOf("/")+1);
File nowFile = new File(outputFile+fileName); File nowFile = new File(outputPath+fileName);
//转换 //转换
FileUtils.copyInputStreamToFile(inputStream, file); FileUtils.copyInputStreamToFile(inputStream, nowFile);
inputStream.close();
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(nowFile);
if (format == null) {
format = audioInputStream.getFormat();
}
// 处理其他文件...
}
// 打开目标数据行用于输出
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
targetLine = (TargetDataLine) AudioSystem.getLine(info);
targetLine.open(format);
targetLine.start();
// 打开源数据行用于输入 Mp3File mp3 = new Mp3File(nowFile);
info = new DataLine.Info(SourceDataLine.class, format); byte[] buffer = mp3.getCustomTag();
sourceLine = (SourceDataLine) AudioSystem.getLine(info); fos.write(buffer);
sourceLine.open(format); mp3.removeCustomTag();
sourceLine.start(); fos.close();
}
// 将源数据行连接到目标数据行
AudioInputStream inputStream = new AudioInputStream(new SequenceInputStream(
new FileInputStream(inputFiles.get(0)),
new FileInputStream(inputFiles.get(1))),
format,
AudioSystem.NOT_SPECIFIED);
// 将inputStream的内容复制到targetLine
AudioSystem.write(inputStream, AudioFileFormat.Type.WAVE, new File(outputFile));
// 关闭线路和流
targetLine.stop();
targetLine.close();
sourceLine.stop();
sourceLine.close();
inputStream.close();
return outputFile; return outputPath;
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment