没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论











Java实现多个实现多个wav文件合成一个的方法示例文件合成一个的方法示例
主要介绍了Java实现多个wav文件合成一个的方法,涉及java文件流读写、编码转换、解析等相关操作技巧,需要
的朋友可以参考下
本文实例讲述了Java实现多个wav文件合成一个的方法。分享给大家供大家参考,具体如下:
前面一篇介绍了java切割wav音频文件的方法,这里再给出合并多个wav音频文件的方法。
package com.cmos.nomsapp.utils.wavmeger;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.List;
/**
* 获取wav头文件然后合并成单个wav
* @author zcf
* @date 2017-10-17
*/
public class WavMergeUtil {
/**
* meger多个wav
* @param inputs 多个wav
* @param output 要生成的wav
* @throws IOException
*/
public static void mergeWav(File[] inputs, String output) throws IOException {
if (inputs.length < 1) {
return;
}
try(FileInputStream fis = new FileInputStream(inputs[0]);
FileOutputStream fos = new FileOutputStream(new File(output))){
byte[] buffer = new byte[1024 * 4];
int total = 0;
int count;
while ((count = fis.read(buffer)) > -1) {
fos.write(buffer, 0, count);
total += count;
}
fis.close();
for (int i = 1; i < inputs.length; i++) {
File file = inputs[i];
try(FileInputStream fisH = new FileInputStream(file)){
Header header = resolveHeader(fisH);
FileInputStream dataInputStream = header.dataInputStream;
while ((count = dataInputStream.read(buffer)) > -1) {
fos.write(buffer, 0, count);
total += count;
}
}
}
fos.flush();
fos.close();
FileInputStream fisHo = new FileInputStream(new File(output));
Header outputHeader = resolveHeader(fisHo);
outputHeader.dataInputStream.close();
try(RandomAccessFile res = new RandomAccessFile(output, "rw")){
res.seek(4);
byte[] fileLen = intToByteArray(total + outputHeader.dataOffset - 8);
res.write(fileLen, 0, 4);
res.seek(outputHeader.dataSizeOffset);
byte[] dataLen = intToByteArray(total);
res.write(dataLen, 0, 4);
}
}
}
/**
* 解析头部,并获得文件指针指向数据开始位置的InputStreram,记得使用后需要关闭
*/
private static Header resolveHeader(FileInputStream fis) throws IOException {
byte[] byte4 = new byte[4];
byte[] buffer = new byte[2048];
int readCount = 0;
资源评论


weixin_38635449
- 粉丝: 5
- 资源: 971
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
