资源简介
音频文件PCM转WAV格式转换类 Utils类
直接可以使用有现成DEMO。感谢评论 音频文件PCM转WAV格式转换类 Utils类
代码片段和文件信息
package pcmwav;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class PcmToWav {
/**
* 转换音频文件
*
* @param src
* 需要转换的pcm音频路径
* @param target
* 保存转换后wav格式的音频路径
* @throws Exception
*/
public static void convertAudioFiles(String src String target) throws Exception {
FileInputStream fis = new FileInputStream(src);
FileOutputStream fos = new FileOutputStream(target);
// 计算长度
byte[] buf = new byte[1024 * 4];
int size = fis.read(buf);
int PCMSize = 0;
while (size != -1) {
PCMSize += size;
size = fis.read(buf);
}
fis.close();
// 填入参数,比特率等等。这里用的是16位单声道 8000 hz
WaveHeader header = new WaveHeader();
// 长度字段 = 内容的大小(PCMSize) + 头部字段的大小(不包括前面4字节的标识符RIFF以及fileLength本身的4字节)
header.fileLength = PCMSize + (44 - 8);
header.FmtHdrLeth = 16;
header.BitsPerSample = 16;
header.Channels = 2;
header.FormatTag = 0x0001;
header.SamplesPerSec = 8000;
header.BlockAlign = (short) (header.Channels * header.BitsPerSample / 8);
header.AvgBytesPerSec = header.BlockAlign * header.SamplesPerSec;
header.DataHdrLeth = PCMSize;
byte[] h = header.getHeader();
assert h.length == 44; // WAV标准,头部应该是44字节
// write header
fos.write(h 0 h.length);
// write data stream
fis = new FileInputStream(src);
size = fis.read(buf);
while (size != -1) {
fos.write(buf 0 size);
size = fis.read(buf);
}
fis.close();
fos.close();
System.out.println(“Convert OK!“);
}
// 测试方法
public static void main(String[] agrs) throws Exception {
convertAudioFiles(“C:\\Users\\90942\\Desktop\\2\\processed.pcm“ “C:\\Users\\90942\\Desktop\\2\\pro.wav“);
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-05-11 17:16 pcmwav\
文件 1828 2018-05-07 10:17 pcmwav\PcmToWav.java
文件 1816 2018-05-04 20:16 pcmwav\WaveHeader.java
评论
共有 条评论