資源簡介
音頻文件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
評論
共有 條評論